├── .gitignore ├── LICENSE ├── README.md ├── index.html └── public ├── css ├── bootstrap.font.css ├── bootstrap.min.css ├── bootstrap.min.css.map └── style.css ├── fonts └── bootstrap-icons.woff2 └── js ├── bootstrap.min.js ├── bootstrap.min.js.map ├── draw_function.js ├── function-plot.min.js ├── jquery-3.6.0.min.js └── vue.min.js /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Aa][Rr][Mm]/ 27 | [Aa][Rr][Mm]64/ 28 | bld/ 29 | [Bb]in/ 30 | [Oo]bj/ 31 | [Ll]og/ 32 | [Ll]ogs/ 33 | 34 | # Visual Studio 2015/2017 cache/options directory 35 | .vs/ 36 | # Uncomment if you have tasks that create the project's static files in wwwroot 37 | #wwwroot/ 38 | 39 | # Visual Studio 2017 auto generated files 40 | Generated\ Files/ 41 | 42 | # MSTest test Results 43 | [Tt]est[Rr]esult*/ 44 | [Bb]uild[Ll]og.* 45 | 46 | # NUnit 47 | *.VisualState.xml 48 | TestResult.xml 49 | nunit-*.xml 50 | 51 | # Build Results of an ATL Project 52 | [Dd]ebugPS/ 53 | [Rr]eleasePS/ 54 | dlldata.c 55 | 56 | # Benchmark Results 57 | BenchmarkDotNet.Artifacts/ 58 | 59 | # .NET Core 60 | project.lock.json 61 | project.fragment.lock.json 62 | artifacts/ 63 | 64 | # StyleCop 65 | StyleCopReport.xml 66 | 67 | # Files built by Visual Studio 68 | *_i.c 69 | *_p.c 70 | *_h.h 71 | *.ilk 72 | *.meta 73 | *.obj 74 | *.iobj 75 | *.pch 76 | *.pdb 77 | *.ipdb 78 | *.pgc 79 | *.pgd 80 | *.rsp 81 | *.sbr 82 | *.tlb 83 | *.tli 84 | *.tlh 85 | *.tmp 86 | *.tmp_proj 87 | *_wpftmp.csproj 88 | *.log 89 | *.vspscc 90 | *.vssscc 91 | .builds 92 | *.pidb 93 | *.svclog 94 | *.scc 95 | 96 | # Chutzpah Test files 97 | _Chutzpah* 98 | 99 | # Visual C++ cache files 100 | ipch/ 101 | *.aps 102 | *.ncb 103 | *.opendb 104 | *.opensdf 105 | *.sdf 106 | *.cachefile 107 | *.VC.db 108 | *.VC.VC.opendb 109 | 110 | # Visual Studio profiler 111 | *.psess 112 | *.vsp 113 | *.vspx 114 | *.sap 115 | 116 | # Visual Studio Trace Files 117 | *.e2e 118 | 119 | # TFS 2012 Local Workspace 120 | $tf/ 121 | 122 | # Guidance Automation Toolkit 123 | *.gpState 124 | 125 | # ReSharper is a .NET coding add-in 126 | _ReSharper*/ 127 | *.[Rr]e[Ss]harper 128 | *.DotSettings.user 129 | 130 | # TeamCity is a build add-in 131 | _TeamCity* 132 | 133 | # DotCover is a Code Coverage Tool 134 | *.dotCover 135 | 136 | # AxoCover is a Code Coverage Tool 137 | .axoCover/* 138 | !.axoCover/settings.json 139 | 140 | # Visual Studio code coverage results 141 | *.coverage 142 | *.coveragexml 143 | 144 | # NCrunch 145 | _NCrunch_* 146 | .*crunch*.local.xml 147 | nCrunchTemp_* 148 | 149 | # MightyMoose 150 | *.mm.* 151 | AutoTest.Net/ 152 | 153 | # Web workbench (sass) 154 | .sass-cache/ 155 | 156 | # Installshield output folder 157 | [Ee]xpress/ 158 | 159 | # DocProject is a documentation generator add-in 160 | DocProject/buildhelp/ 161 | DocProject/Help/*.HxT 162 | DocProject/Help/*.HxC 163 | DocProject/Help/*.hhc 164 | DocProject/Help/*.hhk 165 | DocProject/Help/*.hhp 166 | DocProject/Help/Html2 167 | DocProject/Help/html 168 | 169 | # Click-Once directory 170 | publish/ 171 | 172 | # Publish Web Output 173 | *.[Pp]ublish.xml 174 | *.azurePubxml 175 | # Note: Comment the next line if you want to checkin your web deploy settings, 176 | # but database connection strings (with potential passwords) will be unencrypted 177 | *.pubxml 178 | *.publishproj 179 | 180 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 181 | # checkin your Azure Web App publish settings, but sensitive information contained 182 | # in these scripts will be unencrypted 183 | PublishScripts/ 184 | 185 | # NuGet Packages 186 | *.nupkg 187 | # NuGet Symbol Packages 188 | *.snupkg 189 | # The packages folder can be ignored because of Package Restore 190 | **/[Pp]ackages/* 191 | # except build/, which is used as an MSBuild target. 192 | !**/[Pp]ackages/build/ 193 | # Uncomment if necessary however generally it will be regenerated when needed 194 | #!**/[Pp]ackages/repositories.config 195 | # NuGet v3's project.json files produces more ignorable files 196 | *.nuget.props 197 | *.nuget.targets 198 | 199 | # Microsoft Azure Build Output 200 | csx/ 201 | *.build.csdef 202 | 203 | # Microsoft Azure Emulator 204 | ecf/ 205 | rcf/ 206 | 207 | # Windows Store app package directories and files 208 | AppPackages/ 209 | BundleArtifacts/ 210 | Package.StoreAssociation.xml 211 | _pkginfo.txt 212 | *.appx 213 | *.appxbundle 214 | *.appxupload 215 | 216 | # Visual Studio cache files 217 | # files ending in .cache can be ignored 218 | *.[Cc]ache 219 | # but keep track of directories ending in .cache 220 | !?*.[Cc]ache/ 221 | 222 | # Others 223 | ClientBin/ 224 | ~$* 225 | *~ 226 | *.dbmdl 227 | *.dbproj.schemaview 228 | *.jfm 229 | *.pfx 230 | *.publishsettings 231 | orleans.codegen.cs 232 | 233 | # Including strong name files can present a security risk 234 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 235 | #*.snk 236 | 237 | # Since there are multiple workflows, uncomment next line to ignore bower_components 238 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 239 | #bower_components/ 240 | 241 | # RIA/Silverlight projects 242 | Generated_Code/ 243 | 244 | # Backup & report files from converting an old project file 245 | # to a newer Visual Studio version. Backup files are not needed, 246 | # because we have git ;-) 247 | _UpgradeReport_Files/ 248 | Backup*/ 249 | UpgradeLog*.XML 250 | UpgradeLog*.htm 251 | ServiceFabricBackup/ 252 | *.rptproj.bak 253 | 254 | # SQL Server files 255 | *.mdf 256 | *.ldf 257 | *.ndf 258 | 259 | # Business Intelligence projects 260 | *.rdl.data 261 | *.bim.layout 262 | *.bim_*.settings 263 | *.rptproj.rsuser 264 | *- [Bb]ackup.rdl 265 | *- [Bb]ackup ([0-9]).rdl 266 | *- [Bb]ackup ([0-9][0-9]).rdl 267 | 268 | # Microsoft Fakes 269 | FakesAssemblies/ 270 | 271 | # GhostDoc plugin setting file 272 | *.GhostDoc.xml 273 | 274 | # Node.js Tools for Visual Studio 275 | .ntvs_analysis.dat 276 | node_modules/ 277 | 278 | # Visual Studio 6 build log 279 | *.plg 280 | 281 | # Visual Studio 6 workspace options file 282 | *.opt 283 | 284 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 285 | *.vbw 286 | 287 | # Visual Studio LightSwitch build output 288 | **/*.HTMLClient/GeneratedArtifacts 289 | **/*.DesktopClient/GeneratedArtifacts 290 | **/*.DesktopClient/ModelManifest.xml 291 | **/*.Server/GeneratedArtifacts 292 | **/*.Server/ModelManifest.xml 293 | _Pvt_Extensions 294 | 295 | # Paket dependency manager 296 | .paket/paket.exe 297 | paket-files/ 298 | 299 | # FAKE - F# Make 300 | .fake/ 301 | 302 | # CodeRush personal settings 303 | .cr/personal 304 | 305 | # Python Tools for Visual Studio (PTVS) 306 | __pycache__/ 307 | *.pyc 308 | 309 | # Cake - Uncomment if you are using it 310 | # tools/** 311 | # !tools/packages.config 312 | 313 | # Tabs Studio 314 | *.tss 315 | 316 | # Telerik's JustMock configuration file 317 | *.jmconfig 318 | 319 | # BizTalk build output 320 | *.btp.cs 321 | *.btm.cs 322 | *.odx.cs 323 | *.xsd.cs 324 | 325 | # OpenCover UI analysis results 326 | OpenCover/ 327 | 328 | # Azure Stream Analytics local run output 329 | ASALocalRun/ 330 | 331 | # MSBuild Binary and Structured Log 332 | *.binlog 333 | 334 | # NVidia Nsight GPU debugger configuration file 335 | *.nvuser 336 | 337 | # MFractors (Xamarin productivity tool) working folder 338 | .mfractor/ 339 | 340 | # Local History for Visual Studio 341 | .localhistory/ 342 | 343 | # BeatPulse healthcheck temp database 344 | healthchecksdb 345 | 346 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 347 | MigrationBackup/ 348 | 349 | # Ionide (cross platform F# VS Code tools) working folder 350 | .ionide/ 351 | 352 | .DS_Store -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 7 |

8 | 函数图像绘制工具 9 |

10 | 11 |
12 | 13 | 函数图像绘制工具,方便初中生和高中生(以后可能会包括大学生)绘制函数图像。
14 | 意在培养学生的抽象化思维,帮助学习。

15 | 16 | [![NPM version](https://img.shields.io/badge/vue-2.0-green)](https://cn.vuejs.org/) 17 | [![function--plot](https://img.shields.io/badge/function--plot-1.22.7-blue)](https://mauriciopoppe.github.io/function-plot/) 18 | [![bootstrap](https://img.shields.io/badge/bootstrap-5.0-ff69b4)](https://v5.bootcss.com/) 19 | 20 |
21 | 22 | ## 特点 23 | * **支持显函数、隐函数、极坐标方程、参数方程、数据点** 24 | * **添加了【按键键盘】功能,方便移动端** 25 | * 支持简写的π、e等代替PI、exp(),支持三角函数、反三角函数 26 | * 支持一些形式的简写,例如sinx而不一定要写成sin(x) 27 | 28 | ## 未来 29 | * **有参函数绘制(随参数变化体现函数的变化趋势)** 30 | * 三维空间函数图像绘制 31 | * 微分 32 | * 积分 33 | * ... 34 | 35 | 36 | -------------------------------------------------------------------------------- /public/css/bootstrap.font.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: "bootstrap-icons"; 3 | src: url("../fonts/bootstrap-icons.woff2?856008caa5eb66df68595e734e59580d") format("woff2"), 4 | url("../fonts/bootstrap-icons.woff?856008caa5eb66df68595e734e59580d") format("woff"); 5 | } 6 | 7 | [class^="bi-"]::before, 8 | [class*=" bi-"]::before { 9 | display: inline-block; 10 | font-family: bootstrap-icons !important; 11 | font-style: normal; 12 | font-weight: normal !important; 13 | font-variant: normal; 14 | text-transform: none; 15 | line-height: 1; 16 | vertical-align: -.125em; 17 | -webkit-font-smoothing: antialiased; 18 | -moz-osx-font-smoothing: grayscale; 19 | } 20 | 21 | .bi-alarm-fill::before { content: "\f101"; } 22 | .bi-alarm::before { content: "\f102"; } 23 | .bi-align-bottom::before { content: "\f103"; } 24 | .bi-align-center::before { content: "\f104"; } 25 | .bi-align-end::before { content: "\f105"; } 26 | .bi-align-middle::before { content: "\f106"; } 27 | .bi-align-start::before { content: "\f107"; } 28 | .bi-align-top::before { content: "\f108"; } 29 | .bi-alt::before { content: "\f109"; } 30 | .bi-app-indicator::before { content: "\f10a"; } 31 | .bi-app::before { content: "\f10b"; } 32 | .bi-archive-fill::before { content: "\f10c"; } 33 | .bi-archive::before { content: "\f10d"; } 34 | .bi-arrow-90deg-down::before { content: "\f10e"; } 35 | .bi-arrow-90deg-left::before { content: "\f10f"; } 36 | .bi-arrow-90deg-right::before { content: "\f110"; } 37 | .bi-arrow-90deg-up::before { content: "\f111"; } 38 | .bi-arrow-bar-down::before { content: "\f112"; } 39 | .bi-arrow-bar-left::before { content: "\f113"; } 40 | .bi-arrow-bar-right::before { content: "\f114"; } 41 | .bi-arrow-bar-up::before { content: "\f115"; } 42 | .bi-arrow-clockwise::before { content: "\f116"; } 43 | .bi-arrow-counterclockwise::before { content: "\f117"; } 44 | .bi-arrow-down-circle-fill::before { content: "\f118"; } 45 | .bi-arrow-down-circle::before { content: "\f119"; } 46 | .bi-arrow-down-left-circle-fill::before { content: "\f11a"; } 47 | .bi-arrow-down-left-circle::before { content: "\f11b"; } 48 | .bi-arrow-down-left-square-fill::before { content: "\f11c"; } 49 | .bi-arrow-down-left-square::before { content: "\f11d"; } 50 | .bi-arrow-down-left::before { content: "\f11e"; } 51 | .bi-arrow-down-right-circle-fill::before { content: "\f11f"; } 52 | .bi-arrow-down-right-circle::before { content: "\f120"; } 53 | .bi-arrow-down-right-square-fill::before { content: "\f121"; } 54 | .bi-arrow-down-right-square::before { content: "\f122"; } 55 | .bi-arrow-down-right::before { content: "\f123"; } 56 | .bi-arrow-down-short::before { content: "\f124"; } 57 | .bi-arrow-down-square-fill::before { content: "\f125"; } 58 | .bi-arrow-down-square::before { content: "\f126"; } 59 | .bi-arrow-down-up::before { content: "\f127"; } 60 | .bi-arrow-down::before { content: "\f128"; } 61 | .bi-arrow-left-circle-fill::before { content: "\f129"; } 62 | .bi-arrow-left-circle::before { content: "\f12a"; } 63 | .bi-arrow-left-right::before { content: "\f12b"; } 64 | .bi-arrow-left-short::before { content: "\f12c"; } 65 | .bi-arrow-left-square-fill::before { content: "\f12d"; } 66 | .bi-arrow-left-square::before { content: "\f12e"; } 67 | .bi-arrow-left::before { content: "\f12f"; } 68 | .bi-arrow-repeat::before { content: "\f130"; } 69 | .bi-arrow-return-left::before { content: "\f131"; } 70 | .bi-arrow-return-right::before { content: "\f132"; } 71 | .bi-arrow-right-circle-fill::before { content: "\f133"; } 72 | .bi-arrow-right-circle::before { content: "\f134"; } 73 | .bi-arrow-right-short::before { content: "\f135"; } 74 | .bi-arrow-right-square-fill::before { content: "\f136"; } 75 | .bi-arrow-right-square::before { content: "\f137"; } 76 | .bi-arrow-right::before { content: "\f138"; } 77 | .bi-arrow-up-circle-fill::before { content: "\f139"; } 78 | .bi-arrow-up-circle::before { content: "\f13a"; } 79 | .bi-arrow-up-left-circle-fill::before { content: "\f13b"; } 80 | .bi-arrow-up-left-circle::before { content: "\f13c"; } 81 | .bi-arrow-up-left-square-fill::before { content: "\f13d"; } 82 | .bi-arrow-up-left-square::before { content: "\f13e"; } 83 | .bi-arrow-up-left::before { content: "\f13f"; } 84 | .bi-arrow-up-right-circle-fill::before { content: "\f140"; } 85 | .bi-arrow-up-right-circle::before { content: "\f141"; } 86 | .bi-arrow-up-right-square-fill::before { content: "\f142"; } 87 | .bi-arrow-up-right-square::before { content: "\f143"; } 88 | .bi-arrow-up-right::before { content: "\f144"; } 89 | .bi-arrow-up-short::before { content: "\f145"; } 90 | .bi-arrow-up-square-fill::before { content: "\f146"; } 91 | .bi-arrow-up-square::before { content: "\f147"; } 92 | .bi-arrow-up::before { content: "\f148"; } 93 | .bi-arrows-angle-contract::before { content: "\f149"; } 94 | .bi-arrows-angle-expand::before { content: "\f14a"; } 95 | .bi-arrows-collapse::before { content: "\f14b"; } 96 | .bi-arrows-expand::before { content: "\f14c"; } 97 | .bi-arrows-fullscreen::before { content: "\f14d"; } 98 | .bi-arrows-move::before { content: "\f14e"; } 99 | .bi-aspect-ratio-fill::before { content: "\f14f"; } 100 | .bi-aspect-ratio::before { content: "\f150"; } 101 | .bi-asterisk::before { content: "\f151"; } 102 | .bi-at::before { content: "\f152"; } 103 | .bi-award-fill::before { content: "\f153"; } 104 | .bi-award::before { content: "\f154"; } 105 | .bi-back::before { content: "\f155"; } 106 | .bi-backspace-fill::before { content: "\f156"; } 107 | .bi-backspace-reverse-fill::before { content: "\f157"; } 108 | .bi-backspace-reverse::before { content: "\f158"; } 109 | .bi-backspace::before { content: "\f159"; } 110 | .bi-badge-3d-fill::before { content: "\f15a"; } 111 | .bi-badge-3d::before { content: "\f15b"; } 112 | .bi-badge-4k-fill::before { content: "\f15c"; } 113 | .bi-badge-4k::before { content: "\f15d"; } 114 | .bi-badge-8k-fill::before { content: "\f15e"; } 115 | .bi-badge-8k::before { content: "\f15f"; } 116 | .bi-badge-ad-fill::before { content: "\f160"; } 117 | .bi-badge-ad::before { content: "\f161"; } 118 | .bi-badge-ar-fill::before { content: "\f162"; } 119 | .bi-badge-ar::before { content: "\f163"; } 120 | .bi-badge-cc-fill::before { content: "\f164"; } 121 | .bi-badge-cc::before { content: "\f165"; } 122 | .bi-badge-hd-fill::before { content: "\f166"; } 123 | .bi-badge-hd::before { content: "\f167"; } 124 | .bi-badge-tm-fill::before { content: "\f168"; } 125 | .bi-badge-tm::before { content: "\f169"; } 126 | .bi-badge-vo-fill::before { content: "\f16a"; } 127 | .bi-badge-vo::before { content: "\f16b"; } 128 | .bi-badge-vr-fill::before { content: "\f16c"; } 129 | .bi-badge-vr::before { content: "\f16d"; } 130 | .bi-badge-wc-fill::before { content: "\f16e"; } 131 | .bi-badge-wc::before { content: "\f16f"; } 132 | .bi-bag-check-fill::before { content: "\f170"; } 133 | .bi-bag-check::before { content: "\f171"; } 134 | .bi-bag-dash-fill::before { content: "\f172"; } 135 | .bi-bag-dash::before { content: "\f173"; } 136 | .bi-bag-fill::before { content: "\f174"; } 137 | .bi-bag-plus-fill::before { content: "\f175"; } 138 | .bi-bag-plus::before { content: "\f176"; } 139 | .bi-bag-x-fill::before { content: "\f177"; } 140 | .bi-bag-x::before { content: "\f178"; } 141 | .bi-bag::before { content: "\f179"; } 142 | .bi-bar-chart-fill::before { content: "\f17a"; } 143 | .bi-bar-chart-line-fill::before { content: "\f17b"; } 144 | .bi-bar-chart-line::before { content: "\f17c"; } 145 | .bi-bar-chart-steps::before { content: "\f17d"; } 146 | .bi-bar-chart::before { content: "\f17e"; } 147 | .bi-basket-fill::before { content: "\f17f"; } 148 | .bi-basket::before { content: "\f180"; } 149 | .bi-basket2-fill::before { content: "\f181"; } 150 | .bi-basket2::before { content: "\f182"; } 151 | .bi-basket3-fill::before { content: "\f183"; } 152 | .bi-basket3::before { content: "\f184"; } 153 | .bi-battery-charging::before { content: "\f185"; } 154 | .bi-battery-full::before { content: "\f186"; } 155 | .bi-battery-half::before { content: "\f187"; } 156 | .bi-battery::before { content: "\f188"; } 157 | .bi-bell-fill::before { content: "\f189"; } 158 | .bi-bell::before { content: "\f18a"; } 159 | .bi-bezier::before { content: "\f18b"; } 160 | .bi-bezier2::before { content: "\f18c"; } 161 | .bi-bicycle::before { content: "\f18d"; } 162 | .bi-binoculars-fill::before { content: "\f18e"; } 163 | .bi-binoculars::before { content: "\f18f"; } 164 | .bi-blockquote-left::before { content: "\f190"; } 165 | .bi-blockquote-right::before { content: "\f191"; } 166 | .bi-book-fill::before { content: "\f192"; } 167 | .bi-book-half::before { content: "\f193"; } 168 | .bi-book::before { content: "\f194"; } 169 | .bi-bookmark-check-fill::before { content: "\f195"; } 170 | .bi-bookmark-check::before { content: "\f196"; } 171 | .bi-bookmark-dash-fill::before { content: "\f197"; } 172 | .bi-bookmark-dash::before { content: "\f198"; } 173 | .bi-bookmark-fill::before { content: "\f199"; } 174 | .bi-bookmark-heart-fill::before { content: "\f19a"; } 175 | .bi-bookmark-heart::before { content: "\f19b"; } 176 | .bi-bookmark-plus-fill::before { content: "\f19c"; } 177 | .bi-bookmark-plus::before { content: "\f19d"; } 178 | .bi-bookmark-star-fill::before { content: "\f19e"; } 179 | .bi-bookmark-star::before { content: "\f19f"; } 180 | .bi-bookmark-x-fill::before { content: "\f1a0"; } 181 | .bi-bookmark-x::before { content: "\f1a1"; } 182 | .bi-bookmark::before { content: "\f1a2"; } 183 | .bi-bookmarks-fill::before { content: "\f1a3"; } 184 | .bi-bookmarks::before { content: "\f1a4"; } 185 | .bi-bookshelf::before { content: "\f1a5"; } 186 | .bi-bootstrap-fill::before { content: "\f1a6"; } 187 | .bi-bootstrap-reboot::before { content: "\f1a7"; } 188 | .bi-bootstrap::before { content: "\f1a8"; } 189 | .bi-border-all::before { content: "\f1a9"; } 190 | .bi-border-bottom::before { content: "\f1aa"; } 191 | .bi-border-center::before { content: "\f1ab"; } 192 | .bi-border-inner::before { content: "\f1ac"; } 193 | .bi-border-left::before { content: "\f1ad"; } 194 | .bi-border-middle::before { content: "\f1ae"; } 195 | .bi-border-outer::before { content: "\f1af"; } 196 | .bi-border-right::before { content: "\f1b0"; } 197 | .bi-border-style::before { content: "\f1b1"; } 198 | .bi-border-top::before { content: "\f1b2"; } 199 | .bi-border-width::before { content: "\f1b3"; } 200 | .bi-border::before { content: "\f1b4"; } 201 | .bi-bounding-box-circles::before { content: "\f1b5"; } 202 | .bi-bounding-box::before { content: "\f1b6"; } 203 | .bi-box-arrow-down-left::before { content: "\f1b7"; } 204 | .bi-box-arrow-down-right::before { content: "\f1b8"; } 205 | .bi-box-arrow-down::before { content: "\f1b9"; } 206 | .bi-box-arrow-in-down-left::before { content: "\f1ba"; } 207 | .bi-box-arrow-in-down-right::before { content: "\f1bb"; } 208 | .bi-box-arrow-in-down::before { content: "\f1bc"; } 209 | .bi-box-arrow-in-left::before { content: "\f1bd"; } 210 | .bi-box-arrow-in-right::before { content: "\f1be"; } 211 | .bi-box-arrow-in-up-left::before { content: "\f1bf"; } 212 | .bi-box-arrow-in-up-right::before { content: "\f1c0"; } 213 | .bi-box-arrow-in-up::before { content: "\f1c1"; } 214 | .bi-box-arrow-left::before { content: "\f1c2"; } 215 | .bi-box-arrow-right::before { content: "\f1c3"; } 216 | .bi-box-arrow-up-left::before { content: "\f1c4"; } 217 | .bi-box-arrow-up-right::before { content: "\f1c5"; } 218 | .bi-box-arrow-up::before { content: "\f1c6"; } 219 | .bi-box-seam::before { content: "\f1c7"; } 220 | .bi-box::before { content: "\f1c8"; } 221 | .bi-braces::before { content: "\f1c9"; } 222 | .bi-bricks::before { content: "\f1ca"; } 223 | .bi-briefcase-fill::before { content: "\f1cb"; } 224 | .bi-briefcase::before { content: "\f1cc"; } 225 | .bi-brightness-alt-high-fill::before { content: "\f1cd"; } 226 | .bi-brightness-alt-high::before { content: "\f1ce"; } 227 | .bi-brightness-alt-low-fill::before { content: "\f1cf"; } 228 | .bi-brightness-alt-low::before { content: "\f1d0"; } 229 | .bi-brightness-high-fill::before { content: "\f1d1"; } 230 | .bi-brightness-high::before { content: "\f1d2"; } 231 | .bi-brightness-low-fill::before { content: "\f1d3"; } 232 | .bi-brightness-low::before { content: "\f1d4"; } 233 | .bi-broadcast-pin::before { content: "\f1d5"; } 234 | .bi-broadcast::before { content: "\f1d6"; } 235 | .bi-brush-fill::before { content: "\f1d7"; } 236 | .bi-brush::before { content: "\f1d8"; } 237 | .bi-bucket-fill::before { content: "\f1d9"; } 238 | .bi-bucket::before { content: "\f1da"; } 239 | .bi-bug-fill::before { content: "\f1db"; } 240 | .bi-bug::before { content: "\f1dc"; } 241 | .bi-building::before { content: "\f1dd"; } 242 | .bi-bullseye::before { content: "\f1de"; } 243 | .bi-calculator-fill::before { content: "\f1df"; } 244 | .bi-calculator::before { content: "\f1e0"; } 245 | .bi-calendar-check-fill::before { content: "\f1e1"; } 246 | .bi-calendar-check::before { content: "\f1e2"; } 247 | .bi-calendar-date-fill::before { content: "\f1e3"; } 248 | .bi-calendar-date::before { content: "\f1e4"; } 249 | .bi-calendar-day-fill::before { content: "\f1e5"; } 250 | .bi-calendar-day::before { content: "\f1e6"; } 251 | .bi-calendar-event-fill::before { content: "\f1e7"; } 252 | .bi-calendar-event::before { content: "\f1e8"; } 253 | .bi-calendar-fill::before { content: "\f1e9"; } 254 | .bi-calendar-minus-fill::before { content: "\f1ea"; } 255 | .bi-calendar-minus::before { content: "\f1eb"; } 256 | .bi-calendar-month-fill::before { content: "\f1ec"; } 257 | .bi-calendar-month::before { content: "\f1ed"; } 258 | .bi-calendar-plus-fill::before { content: "\f1ee"; } 259 | .bi-calendar-plus::before { content: "\f1ef"; } 260 | .bi-calendar-range-fill::before { content: "\f1f0"; } 261 | .bi-calendar-range::before { content: "\f1f1"; } 262 | .bi-calendar-week-fill::before { content: "\f1f2"; } 263 | .bi-calendar-week::before { content: "\f1f3"; } 264 | .bi-calendar-x-fill::before { content: "\f1f4"; } 265 | .bi-calendar-x::before { content: "\f1f5"; } 266 | .bi-calendar::before { content: "\f1f6"; } 267 | .bi-calendar2-check-fill::before { content: "\f1f7"; } 268 | .bi-calendar2-check::before { content: "\f1f8"; } 269 | .bi-calendar2-date-fill::before { content: "\f1f9"; } 270 | .bi-calendar2-date::before { content: "\f1fa"; } 271 | .bi-calendar2-day-fill::before { content: "\f1fb"; } 272 | .bi-calendar2-day::before { content: "\f1fc"; } 273 | .bi-calendar2-event-fill::before { content: "\f1fd"; } 274 | .bi-calendar2-event::before { content: "\f1fe"; } 275 | .bi-calendar2-fill::before { content: "\f1ff"; } 276 | .bi-calendar2-minus-fill::before { content: "\f200"; } 277 | .bi-calendar2-minus::before { content: "\f201"; } 278 | .bi-calendar2-month-fill::before { content: "\f202"; } 279 | .bi-calendar2-month::before { content: "\f203"; } 280 | .bi-calendar2-plus-fill::before { content: "\f204"; } 281 | .bi-calendar2-plus::before { content: "\f205"; } 282 | .bi-calendar2-range-fill::before { content: "\f206"; } 283 | .bi-calendar2-range::before { content: "\f207"; } 284 | .bi-calendar2-week-fill::before { content: "\f208"; } 285 | .bi-calendar2-week::before { content: "\f209"; } 286 | .bi-calendar2-x-fill::before { content: "\f20a"; } 287 | .bi-calendar2-x::before { content: "\f20b"; } 288 | .bi-calendar2::before { content: "\f20c"; } 289 | .bi-calendar3-event-fill::before { content: "\f20d"; } 290 | .bi-calendar3-event::before { content: "\f20e"; } 291 | .bi-calendar3-fill::before { content: "\f20f"; } 292 | .bi-calendar3-range-fill::before { content: "\f210"; } 293 | .bi-calendar3-range::before { content: "\f211"; } 294 | .bi-calendar3-week-fill::before { content: "\f212"; } 295 | .bi-calendar3-week::before { content: "\f213"; } 296 | .bi-calendar3::before { content: "\f214"; } 297 | .bi-calendar4-event::before { content: "\f215"; } 298 | .bi-calendar4-range::before { content: "\f216"; } 299 | .bi-calendar4-week::before { content: "\f217"; } 300 | .bi-calendar4::before { content: "\f218"; } 301 | .bi-camera-fill::before { content: "\f219"; } 302 | .bi-camera-reels-fill::before { content: "\f21a"; } 303 | .bi-camera-reels::before { content: "\f21b"; } 304 | .bi-camera-video-fill::before { content: "\f21c"; } 305 | .bi-camera-video-off-fill::before { content: "\f21d"; } 306 | .bi-camera-video-off::before { content: "\f21e"; } 307 | .bi-camera-video::before { content: "\f21f"; } 308 | .bi-camera::before { content: "\f220"; } 309 | .bi-camera2::before { content: "\f221"; } 310 | .bi-capslock-fill::before { content: "\f222"; } 311 | .bi-capslock::before { content: "\f223"; } 312 | .bi-card-checklist::before { content: "\f224"; } 313 | .bi-card-heading::before { content: "\f225"; } 314 | .bi-card-image::before { content: "\f226"; } 315 | .bi-card-list::before { content: "\f227"; } 316 | .bi-card-text::before { content: "\f228"; } 317 | .bi-caret-down-fill::before { content: "\f229"; } 318 | .bi-caret-down-square-fill::before { content: "\f22a"; } 319 | .bi-caret-down-square::before { content: "\f22b"; } 320 | .bi-caret-down::before { content: "\f22c"; } 321 | .bi-caret-left-fill::before { content: "\f22d"; } 322 | .bi-caret-left-square-fill::before { content: "\f22e"; } 323 | .bi-caret-left-square::before { content: "\f22f"; } 324 | .bi-caret-left::before { content: "\f230"; } 325 | .bi-caret-right-fill::before { content: "\f231"; } 326 | .bi-caret-right-square-fill::before { content: "\f232"; } 327 | .bi-caret-right-square::before { content: "\f233"; } 328 | .bi-caret-right::before { content: "\f234"; } 329 | .bi-caret-up-fill::before { content: "\f235"; } 330 | .bi-caret-up-square-fill::before { content: "\f236"; } 331 | .bi-caret-up-square::before { content: "\f237"; } 332 | .bi-caret-up::before { content: "\f238"; } 333 | .bi-cart-check-fill::before { content: "\f239"; } 334 | .bi-cart-check::before { content: "\f23a"; } 335 | .bi-cart-dash-fill::before { content: "\f23b"; } 336 | .bi-cart-dash::before { content: "\f23c"; } 337 | .bi-cart-fill::before { content: "\f23d"; } 338 | .bi-cart-plus-fill::before { content: "\f23e"; } 339 | .bi-cart-plus::before { content: "\f23f"; } 340 | .bi-cart-x-fill::before { content: "\f240"; } 341 | .bi-cart-x::before { content: "\f241"; } 342 | .bi-cart::before { content: "\f242"; } 343 | .bi-cart2::before { content: "\f243"; } 344 | .bi-cart3::before { content: "\f244"; } 345 | .bi-cart4::before { content: "\f245"; } 346 | .bi-cash-stack::before { content: "\f246"; } 347 | .bi-cash::before { content: "\f247"; } 348 | .bi-cast::before { content: "\f248"; } 349 | .bi-chat-dots-fill::before { content: "\f249"; } 350 | .bi-chat-dots::before { content: "\f24a"; } 351 | .bi-chat-fill::before { content: "\f24b"; } 352 | .bi-chat-left-dots-fill::before { content: "\f24c"; } 353 | .bi-chat-left-dots::before { content: "\f24d"; } 354 | .bi-chat-left-fill::before { content: "\f24e"; } 355 | .bi-chat-left-quote-fill::before { content: "\f24f"; } 356 | .bi-chat-left-quote::before { content: "\f250"; } 357 | .bi-chat-left-text-fill::before { content: "\f251"; } 358 | .bi-chat-left-text::before { content: "\f252"; } 359 | .bi-chat-left::before { content: "\f253"; } 360 | .bi-chat-quote-fill::before { content: "\f254"; } 361 | .bi-chat-quote::before { content: "\f255"; } 362 | .bi-chat-right-dots-fill::before { content: "\f256"; } 363 | .bi-chat-right-dots::before { content: "\f257"; } 364 | .bi-chat-right-fill::before { content: "\f258"; } 365 | .bi-chat-right-quote-fill::before { content: "\f259"; } 366 | .bi-chat-right-quote::before { content: "\f25a"; } 367 | .bi-chat-right-text-fill::before { content: "\f25b"; } 368 | .bi-chat-right-text::before { content: "\f25c"; } 369 | .bi-chat-right::before { content: "\f25d"; } 370 | .bi-chat-square-dots-fill::before { content: "\f25e"; } 371 | .bi-chat-square-dots::before { content: "\f25f"; } 372 | .bi-chat-square-fill::before { content: "\f260"; } 373 | .bi-chat-square-quote-fill::before { content: "\f261"; } 374 | .bi-chat-square-quote::before { content: "\f262"; } 375 | .bi-chat-square-text-fill::before { content: "\f263"; } 376 | .bi-chat-square-text::before { content: "\f264"; } 377 | .bi-chat-square::before { content: "\f265"; } 378 | .bi-chat-text-fill::before { content: "\f266"; } 379 | .bi-chat-text::before { content: "\f267"; } 380 | .bi-chat::before { content: "\f268"; } 381 | .bi-check-all::before { content: "\f269"; } 382 | .bi-check-circle-fill::before { content: "\f26a"; } 383 | .bi-check-circle::before { content: "\f26b"; } 384 | .bi-check-square-fill::before { content: "\f26c"; } 385 | .bi-check-square::before { content: "\f26d"; } 386 | .bi-check::before { content: "\f26e"; } 387 | .bi-check2-all::before { content: "\f26f"; } 388 | .bi-check2-circle::before { content: "\f270"; } 389 | .bi-check2-square::before { content: "\f271"; } 390 | .bi-check2::before { content: "\f272"; } 391 | .bi-chevron-bar-contract::before { content: "\f273"; } 392 | .bi-chevron-bar-down::before { content: "\f274"; } 393 | .bi-chevron-bar-expand::before { content: "\f275"; } 394 | .bi-chevron-bar-left::before { content: "\f276"; } 395 | .bi-chevron-bar-right::before { content: "\f277"; } 396 | .bi-chevron-bar-up::before { content: "\f278"; } 397 | .bi-chevron-compact-down::before { content: "\f279"; } 398 | .bi-chevron-compact-left::before { content: "\f27a"; } 399 | .bi-chevron-compact-right::before { content: "\f27b"; } 400 | .bi-chevron-compact-up::before { content: "\f27c"; } 401 | .bi-chevron-contract::before { content: "\f27d"; } 402 | .bi-chevron-double-down::before { content: "\f27e"; } 403 | .bi-chevron-double-left::before { content: "\f27f"; } 404 | .bi-chevron-double-right::before { content: "\f280"; } 405 | .bi-chevron-double-up::before { content: "\f281"; } 406 | .bi-chevron-down::before { content: "\f282"; } 407 | .bi-chevron-expand::before { content: "\f283"; } 408 | .bi-chevron-left::before { content: "\f284"; } 409 | .bi-chevron-right::before { content: "\f285"; } 410 | .bi-chevron-up::before { content: "\f286"; } 411 | .bi-circle-fill::before { content: "\f287"; } 412 | .bi-circle-half::before { content: "\f288"; } 413 | .bi-circle-square::before { content: "\f289"; } 414 | .bi-circle::before { content: "\f28a"; } 415 | .bi-clipboard-check::before { content: "\f28b"; } 416 | .bi-clipboard-data::before { content: "\f28c"; } 417 | .bi-clipboard-minus::before { content: "\f28d"; } 418 | .bi-clipboard-plus::before { content: "\f28e"; } 419 | .bi-clipboard-x::before { content: "\f28f"; } 420 | .bi-clipboard::before { content: "\f290"; } 421 | .bi-clock-fill::before { content: "\f291"; } 422 | .bi-clock-history::before { content: "\f292"; } 423 | .bi-clock::before { content: "\f293"; } 424 | .bi-cloud-arrow-down-fill::before { content: "\f294"; } 425 | .bi-cloud-arrow-down::before { content: "\f295"; } 426 | .bi-cloud-arrow-up-fill::before { content: "\f296"; } 427 | .bi-cloud-arrow-up::before { content: "\f297"; } 428 | .bi-cloud-check-fill::before { content: "\f298"; } 429 | .bi-cloud-check::before { content: "\f299"; } 430 | .bi-cloud-download-fill::before { content: "\f29a"; } 431 | .bi-cloud-download::before { content: "\f29b"; } 432 | .bi-cloud-drizzle-fill::before { content: "\f29c"; } 433 | .bi-cloud-drizzle::before { content: "\f29d"; } 434 | .bi-cloud-fill::before { content: "\f29e"; } 435 | .bi-cloud-fog-fill::before { content: "\f29f"; } 436 | .bi-cloud-fog::before { content: "\f2a0"; } 437 | .bi-cloud-fog2-fill::before { content: "\f2a1"; } 438 | .bi-cloud-fog2::before { content: "\f2a2"; } 439 | .bi-cloud-hail-fill::before { content: "\f2a3"; } 440 | .bi-cloud-hail::before { content: "\f2a4"; } 441 | .bi-cloud-haze-1::before { content: "\f2a5"; } 442 | .bi-cloud-haze-fill::before { content: "\f2a6"; } 443 | .bi-cloud-haze::before { content: "\f2a7"; } 444 | .bi-cloud-haze2-fill::before { content: "\f2a8"; } 445 | .bi-cloud-lightning-fill::before { content: "\f2a9"; } 446 | .bi-cloud-lightning-rain-fill::before { content: "\f2aa"; } 447 | .bi-cloud-lightning-rain::before { content: "\f2ab"; } 448 | .bi-cloud-lightning::before { content: "\f2ac"; } 449 | .bi-cloud-minus-fill::before { content: "\f2ad"; } 450 | .bi-cloud-minus::before { content: "\f2ae"; } 451 | .bi-cloud-moon-fill::before { content: "\f2af"; } 452 | .bi-cloud-moon::before { content: "\f2b0"; } 453 | .bi-cloud-plus-fill::before { content: "\f2b1"; } 454 | .bi-cloud-plus::before { content: "\f2b2"; } 455 | .bi-cloud-rain-fill::before { content: "\f2b3"; } 456 | .bi-cloud-rain-heavy-fill::before { content: "\f2b4"; } 457 | .bi-cloud-rain-heavy::before { content: "\f2b5"; } 458 | .bi-cloud-rain::before { content: "\f2b6"; } 459 | .bi-cloud-slash-fill::before { content: "\f2b7"; } 460 | .bi-cloud-slash::before { content: "\f2b8"; } 461 | .bi-cloud-sleet-fill::before { content: "\f2b9"; } 462 | .bi-cloud-sleet::before { content: "\f2ba"; } 463 | .bi-cloud-snow-fill::before { content: "\f2bb"; } 464 | .bi-cloud-snow::before { content: "\f2bc"; } 465 | .bi-cloud-sun-fill::before { content: "\f2bd"; } 466 | .bi-cloud-sun::before { content: "\f2be"; } 467 | .bi-cloud-upload-fill::before { content: "\f2bf"; } 468 | .bi-cloud-upload::before { content: "\f2c0"; } 469 | .bi-cloud::before { content: "\f2c1"; } 470 | .bi-clouds-fill::before { content: "\f2c2"; } 471 | .bi-clouds::before { content: "\f2c3"; } 472 | .bi-cloudy-fill::before { content: "\f2c4"; } 473 | .bi-cloudy::before { content: "\f2c5"; } 474 | .bi-code-slash::before { content: "\f2c6"; } 475 | .bi-code-square::before { content: "\f2c7"; } 476 | .bi-code::before { content: "\f2c8"; } 477 | .bi-collection-fill::before { content: "\f2c9"; } 478 | .bi-collection-play-fill::before { content: "\f2ca"; } 479 | .bi-collection-play::before { content: "\f2cb"; } 480 | .bi-collection::before { content: "\f2cc"; } 481 | .bi-columns-gap::before { content: "\f2cd"; } 482 | .bi-columns::before { content: "\f2ce"; } 483 | .bi-command::before { content: "\f2cf"; } 484 | .bi-compass-fill::before { content: "\f2d0"; } 485 | .bi-compass::before { content: "\f2d1"; } 486 | .bi-cone-striped::before { content: "\f2d2"; } 487 | .bi-cone::before { content: "\f2d3"; } 488 | .bi-controller::before { content: "\f2d4"; } 489 | .bi-cpu-fill::before { content: "\f2d5"; } 490 | .bi-cpu::before { content: "\f2d6"; } 491 | .bi-credit-card-2-back-fill::before { content: "\f2d7"; } 492 | .bi-credit-card-2-back::before { content: "\f2d8"; } 493 | .bi-credit-card-2-front-fill::before { content: "\f2d9"; } 494 | .bi-credit-card-2-front::before { content: "\f2da"; } 495 | .bi-credit-card-fill::before { content: "\f2db"; } 496 | .bi-credit-card::before { content: "\f2dc"; } 497 | .bi-crop::before { content: "\f2dd"; } 498 | .bi-cup-fill::before { content: "\f2de"; } 499 | .bi-cup-straw::before { content: "\f2df"; } 500 | .bi-cup::before { content: "\f2e0"; } 501 | .bi-cursor-fill::before { content: "\f2e1"; } 502 | .bi-cursor-text::before { content: "\f2e2"; } 503 | .bi-cursor::before { content: "\f2e3"; } 504 | .bi-dash-circle-dotted::before { content: "\f2e4"; } 505 | .bi-dash-circle-fill::before { content: "\f2e5"; } 506 | .bi-dash-circle::before { content: "\f2e6"; } 507 | .bi-dash-square-dotted::before { content: "\f2e7"; } 508 | .bi-dash-square-fill::before { content: "\f2e8"; } 509 | .bi-dash-square::before { content: "\f2e9"; } 510 | .bi-dash::before { content: "\f2ea"; } 511 | .bi-diagram-2-fill::before { content: "\f2eb"; } 512 | .bi-diagram-2::before { content: "\f2ec"; } 513 | .bi-diagram-3-fill::before { content: "\f2ed"; } 514 | .bi-diagram-3::before { content: "\f2ee"; } 515 | .bi-diamond-fill::before { content: "\f2ef"; } 516 | .bi-diamond-half::before { content: "\f2f0"; } 517 | .bi-diamond::before { content: "\f2f1"; } 518 | .bi-dice-1-fill::before { content: "\f2f2"; } 519 | .bi-dice-1::before { content: "\f2f3"; } 520 | .bi-dice-2-fill::before { content: "\f2f4"; } 521 | .bi-dice-2::before { content: "\f2f5"; } 522 | .bi-dice-3-fill::before { content: "\f2f6"; } 523 | .bi-dice-3::before { content: "\f2f7"; } 524 | .bi-dice-4-fill::before { content: "\f2f8"; } 525 | .bi-dice-4::before { content: "\f2f9"; } 526 | .bi-dice-5-fill::before { content: "\f2fa"; } 527 | .bi-dice-5::before { content: "\f2fb"; } 528 | .bi-dice-6-fill::before { content: "\f2fc"; } 529 | .bi-dice-6::before { content: "\f2fd"; } 530 | .bi-disc-fill::before { content: "\f2fe"; } 531 | .bi-disc::before { content: "\f2ff"; } 532 | .bi-discord::before { content: "\f300"; } 533 | .bi-display-fill::before { content: "\f301"; } 534 | .bi-display::before { content: "\f302"; } 535 | .bi-distribute-horizontal::before { content: "\f303"; } 536 | .bi-distribute-vertical::before { content: "\f304"; } 537 | .bi-door-closed-fill::before { content: "\f305"; } 538 | .bi-door-closed::before { content: "\f306"; } 539 | .bi-door-open-fill::before { content: "\f307"; } 540 | .bi-door-open::before { content: "\f308"; } 541 | .bi-dot::before { content: "\f309"; } 542 | .bi-download::before { content: "\f30a"; } 543 | .bi-droplet-fill::before { content: "\f30b"; } 544 | .bi-droplet-half::before { content: "\f30c"; } 545 | .bi-droplet::before { content: "\f30d"; } 546 | .bi-earbuds::before { content: "\f30e"; } 547 | .bi-easel-fill::before { content: "\f30f"; } 548 | .bi-easel::before { content: "\f310"; } 549 | .bi-egg-fill::before { content: "\f311"; } 550 | .bi-egg-fried::before { content: "\f312"; } 551 | .bi-egg::before { content: "\f313"; } 552 | .bi-eject-fill::before { content: "\f314"; } 553 | .bi-eject::before { content: "\f315"; } 554 | .bi-emoji-angry-fill::before { content: "\f316"; } 555 | .bi-emoji-angry::before { content: "\f317"; } 556 | .bi-emoji-dizzy-fill::before { content: "\f318"; } 557 | .bi-emoji-dizzy::before { content: "\f319"; } 558 | .bi-emoji-expressionless-fill::before { content: "\f31a"; } 559 | .bi-emoji-expressionless::before { content: "\f31b"; } 560 | .bi-emoji-frown-fill::before { content: "\f31c"; } 561 | .bi-emoji-frown::before { content: "\f31d"; } 562 | .bi-emoji-heart-eyes-fill::before { content: "\f31e"; } 563 | .bi-emoji-heart-eyes::before { content: "\f31f"; } 564 | .bi-emoji-laughing-fill::before { content: "\f320"; } 565 | .bi-emoji-laughing::before { content: "\f321"; } 566 | .bi-emoji-neutral-fill::before { content: "\f322"; } 567 | .bi-emoji-neutral::before { content: "\f323"; } 568 | .bi-emoji-smile-fill::before { content: "\f324"; } 569 | .bi-emoji-smile-upside-down-fill::before { content: "\f325"; } 570 | .bi-emoji-smile-upside-down::before { content: "\f326"; } 571 | .bi-emoji-smile::before { content: "\f327"; } 572 | .bi-emoji-sunglasses-fill::before { content: "\f328"; } 573 | .bi-emoji-sunglasses::before { content: "\f329"; } 574 | .bi-emoji-wink-fill::before { content: "\f32a"; } 575 | .bi-emoji-wink::before { content: "\f32b"; } 576 | .bi-envelope-fill::before { content: "\f32c"; } 577 | .bi-envelope-open-fill::before { content: "\f32d"; } 578 | .bi-envelope-open::before { content: "\f32e"; } 579 | .bi-envelope::before { content: "\f32f"; } 580 | .bi-eraser-fill::before { content: "\f330"; } 581 | .bi-eraser::before { content: "\f331"; } 582 | .bi-exclamation-circle-fill::before { content: "\f332"; } 583 | .bi-exclamation-circle::before { content: "\f333"; } 584 | .bi-exclamation-diamond-fill::before { content: "\f334"; } 585 | .bi-exclamation-diamond::before { content: "\f335"; } 586 | .bi-exclamation-octagon-fill::before { content: "\f336"; } 587 | .bi-exclamation-octagon::before { content: "\f337"; } 588 | .bi-exclamation-square-fill::before { content: "\f338"; } 589 | .bi-exclamation-square::before { content: "\f339"; } 590 | .bi-exclamation-triangle-fill::before { content: "\f33a"; } 591 | .bi-exclamation-triangle::before { content: "\f33b"; } 592 | .bi-exclamation::before { content: "\f33c"; } 593 | .bi-exclude::before { content: "\f33d"; } 594 | .bi-eye-fill::before { content: "\f33e"; } 595 | .bi-eye-slash-fill::before { content: "\f33f"; } 596 | .bi-eye-slash::before { content: "\f340"; } 597 | .bi-eye::before { content: "\f341"; } 598 | .bi-eyedropper::before { content: "\f342"; } 599 | .bi-eyeglasses::before { content: "\f343"; } 600 | .bi-facebook::before { content: "\f344"; } 601 | .bi-file-arrow-down-fill::before { content: "\f345"; } 602 | .bi-file-arrow-down::before { content: "\f346"; } 603 | .bi-file-arrow-up-fill::before { content: "\f347"; } 604 | .bi-file-arrow-up::before { content: "\f348"; } 605 | .bi-file-bar-graph-fill::before { content: "\f349"; } 606 | .bi-file-bar-graph::before { content: "\f34a"; } 607 | .bi-file-binary-fill::before { content: "\f34b"; } 608 | .bi-file-binary::before { content: "\f34c"; } 609 | .bi-file-break-fill::before { content: "\f34d"; } 610 | .bi-file-break::before { content: "\f34e"; } 611 | .bi-file-check-fill::before { content: "\f34f"; } 612 | .bi-file-check::before { content: "\f350"; } 613 | .bi-file-code-fill::before { content: "\f351"; } 614 | .bi-file-code::before { content: "\f352"; } 615 | .bi-file-diff-fill::before { content: "\f353"; } 616 | .bi-file-diff::before { content: "\f354"; } 617 | .bi-file-earmark-arrow-down-fill::before { content: "\f355"; } 618 | .bi-file-earmark-arrow-down::before { content: "\f356"; } 619 | .bi-file-earmark-arrow-up-fill::before { content: "\f357"; } 620 | .bi-file-earmark-arrow-up::before { content: "\f358"; } 621 | .bi-file-earmark-bar-graph-fill::before { content: "\f359"; } 622 | .bi-file-earmark-bar-graph::before { content: "\f35a"; } 623 | .bi-file-earmark-binary-fill::before { content: "\f35b"; } 624 | .bi-file-earmark-binary::before { content: "\f35c"; } 625 | .bi-file-earmark-break-fill::before { content: "\f35d"; } 626 | .bi-file-earmark-break::before { content: "\f35e"; } 627 | .bi-file-earmark-check-fill::before { content: "\f35f"; } 628 | .bi-file-earmark-check::before { content: "\f360"; } 629 | .bi-file-earmark-code-fill::before { content: "\f361"; } 630 | .bi-file-earmark-code::before { content: "\f362"; } 631 | .bi-file-earmark-diff-fill::before { content: "\f363"; } 632 | .bi-file-earmark-diff::before { content: "\f364"; } 633 | .bi-file-earmark-easel-fill::before { content: "\f365"; } 634 | .bi-file-earmark-easel::before { content: "\f366"; } 635 | .bi-file-earmark-excel-fill::before { content: "\f367"; } 636 | .bi-file-earmark-excel::before { content: "\f368"; } 637 | .bi-file-earmark-fill::before { content: "\f369"; } 638 | .bi-file-earmark-font-fill::before { content: "\f36a"; } 639 | .bi-file-earmark-font::before { content: "\f36b"; } 640 | .bi-file-earmark-image-fill::before { content: "\f36c"; } 641 | .bi-file-earmark-image::before { content: "\f36d"; } 642 | .bi-file-earmark-lock-fill::before { content: "\f36e"; } 643 | .bi-file-earmark-lock::before { content: "\f36f"; } 644 | .bi-file-earmark-lock2-fill::before { content: "\f370"; } 645 | .bi-file-earmark-lock2::before { content: "\f371"; } 646 | .bi-file-earmark-medical-fill::before { content: "\f372"; } 647 | .bi-file-earmark-medical::before { content: "\f373"; } 648 | .bi-file-earmark-minus-fill::before { content: "\f374"; } 649 | .bi-file-earmark-minus::before { content: "\f375"; } 650 | .bi-file-earmark-music-fill::before { content: "\f376"; } 651 | .bi-file-earmark-music::before { content: "\f377"; } 652 | .bi-file-earmark-person-fill::before { content: "\f378"; } 653 | .bi-file-earmark-person::before { content: "\f379"; } 654 | .bi-file-earmark-play-fill::before { content: "\f37a"; } 655 | .bi-file-earmark-play::before { content: "\f37b"; } 656 | .bi-file-earmark-plus-fill::before { content: "\f37c"; } 657 | .bi-file-earmark-plus::before { content: "\f37d"; } 658 | .bi-file-earmark-post-fill::before { content: "\f37e"; } 659 | .bi-file-earmark-post::before { content: "\f37f"; } 660 | .bi-file-earmark-ppt-fill::before { content: "\f380"; } 661 | .bi-file-earmark-ppt::before { content: "\f381"; } 662 | .bi-file-earmark-richtext-fill::before { content: "\f382"; } 663 | .bi-file-earmark-richtext::before { content: "\f383"; } 664 | .bi-file-earmark-ruled-fill::before { content: "\f384"; } 665 | .bi-file-earmark-ruled::before { content: "\f385"; } 666 | .bi-file-earmark-slides-fill::before { content: "\f386"; } 667 | .bi-file-earmark-slides::before { content: "\f387"; } 668 | .bi-file-earmark-spreadsheet-fill::before { content: "\f388"; } 669 | .bi-file-earmark-spreadsheet::before { content: "\f389"; } 670 | .bi-file-earmark-text-fill::before { content: "\f38a"; } 671 | .bi-file-earmark-text::before { content: "\f38b"; } 672 | .bi-file-earmark-word-fill::before { content: "\f38c"; } 673 | .bi-file-earmark-word::before { content: "\f38d"; } 674 | .bi-file-earmark-x-fill::before { content: "\f38e"; } 675 | .bi-file-earmark-x::before { content: "\f38f"; } 676 | .bi-file-earmark-zip-fill::before { content: "\f390"; } 677 | .bi-file-earmark-zip::before { content: "\f391"; } 678 | .bi-file-earmark::before { content: "\f392"; } 679 | .bi-file-easel-fill::before { content: "\f393"; } 680 | .bi-file-easel::before { content: "\f394"; } 681 | .bi-file-excel-fill::before { content: "\f395"; } 682 | .bi-file-excel::before { content: "\f396"; } 683 | .bi-file-fill::before { content: "\f397"; } 684 | .bi-file-font-fill::before { content: "\f398"; } 685 | .bi-file-font::before { content: "\f399"; } 686 | .bi-file-image-fill::before { content: "\f39a"; } 687 | .bi-file-image::before { content: "\f39b"; } 688 | .bi-file-lock-fill::before { content: "\f39c"; } 689 | .bi-file-lock::before { content: "\f39d"; } 690 | .bi-file-lock2-fill::before { content: "\f39e"; } 691 | .bi-file-lock2::before { content: "\f39f"; } 692 | .bi-file-medical-fill::before { content: "\f3a0"; } 693 | .bi-file-medical::before { content: "\f3a1"; } 694 | .bi-file-minus-fill::before { content: "\f3a2"; } 695 | .bi-file-minus::before { content: "\f3a3"; } 696 | .bi-file-music-fill::before { content: "\f3a4"; } 697 | .bi-file-music::before { content: "\f3a5"; } 698 | .bi-file-person-fill::before { content: "\f3a6"; } 699 | .bi-file-person::before { content: "\f3a7"; } 700 | .bi-file-play-fill::before { content: "\f3a8"; } 701 | .bi-file-play::before { content: "\f3a9"; } 702 | .bi-file-plus-fill::before { content: "\f3aa"; } 703 | .bi-file-plus::before { content: "\f3ab"; } 704 | .bi-file-post-fill::before { content: "\f3ac"; } 705 | .bi-file-post::before { content: "\f3ad"; } 706 | .bi-file-ppt-fill::before { content: "\f3ae"; } 707 | .bi-file-ppt::before { content: "\f3af"; } 708 | .bi-file-richtext-fill::before { content: "\f3b0"; } 709 | .bi-file-richtext::before { content: "\f3b1"; } 710 | .bi-file-ruled-fill::before { content: "\f3b2"; } 711 | .bi-file-ruled::before { content: "\f3b3"; } 712 | .bi-file-slides-fill::before { content: "\f3b4"; } 713 | .bi-file-slides::before { content: "\f3b5"; } 714 | .bi-file-spreadsheet-fill::before { content: "\f3b6"; } 715 | .bi-file-spreadsheet::before { content: "\f3b7"; } 716 | .bi-file-text-fill::before { content: "\f3b8"; } 717 | .bi-file-text::before { content: "\f3b9"; } 718 | .bi-file-word-fill::before { content: "\f3ba"; } 719 | .bi-file-word::before { content: "\f3bb"; } 720 | .bi-file-x-fill::before { content: "\f3bc"; } 721 | .bi-file-x::before { content: "\f3bd"; } 722 | .bi-file-zip-fill::before { content: "\f3be"; } 723 | .bi-file-zip::before { content: "\f3bf"; } 724 | .bi-file::before { content: "\f3c0"; } 725 | .bi-files-alt::before { content: "\f3c1"; } 726 | .bi-files::before { content: "\f3c2"; } 727 | .bi-film::before { content: "\f3c3"; } 728 | .bi-filter-circle-fill::before { content: "\f3c4"; } 729 | .bi-filter-circle::before { content: "\f3c5"; } 730 | .bi-filter-left::before { content: "\f3c6"; } 731 | .bi-filter-right::before { content: "\f3c7"; } 732 | .bi-filter-square-fill::before { content: "\f3c8"; } 733 | .bi-filter-square::before { content: "\f3c9"; } 734 | .bi-filter::before { content: "\f3ca"; } 735 | .bi-flag-fill::before { content: "\f3cb"; } 736 | .bi-flag::before { content: "\f3cc"; } 737 | .bi-flower1::before { content: "\f3cd"; } 738 | .bi-flower2::before { content: "\f3ce"; } 739 | .bi-flower3::before { content: "\f3cf"; } 740 | .bi-folder-check::before { content: "\f3d0"; } 741 | .bi-folder-fill::before { content: "\f3d1"; } 742 | .bi-folder-minus::before { content: "\f3d2"; } 743 | .bi-folder-plus::before { content: "\f3d3"; } 744 | .bi-folder-symlink-fill::before { content: "\f3d4"; } 745 | .bi-folder-symlink::before { content: "\f3d5"; } 746 | .bi-folder-x::before { content: "\f3d6"; } 747 | .bi-folder::before { content: "\f3d7"; } 748 | .bi-folder2-open::before { content: "\f3d8"; } 749 | .bi-folder2::before { content: "\f3d9"; } 750 | .bi-fonts::before { content: "\f3da"; } 751 | .bi-forward-fill::before { content: "\f3db"; } 752 | .bi-forward::before { content: "\f3dc"; } 753 | .bi-front::before { content: "\f3dd"; } 754 | .bi-fullscreen-exit::before { content: "\f3de"; } 755 | .bi-fullscreen::before { content: "\f3df"; } 756 | .bi-funnel-fill::before { content: "\f3e0"; } 757 | .bi-funnel::before { content: "\f3e1"; } 758 | .bi-gear-fill::before { content: "\f3e2"; } 759 | .bi-gear-wide-connected::before { content: "\f3e3"; } 760 | .bi-gear-wide::before { content: "\f3e4"; } 761 | .bi-gear::before { content: "\f3e5"; } 762 | .bi-gem::before { content: "\f3e6"; } 763 | .bi-geo-alt-fill::before { content: "\f3e7"; } 764 | .bi-geo-alt::before { content: "\f3e8"; } 765 | .bi-geo-fill::before { content: "\f3e9"; } 766 | .bi-geo::before { content: "\f3ea"; } 767 | .bi-gift-fill::before { content: "\f3eb"; } 768 | .bi-gift::before { content: "\f3ec"; } 769 | .bi-github::before { content: "\f3ed"; } 770 | .bi-globe::before { content: "\f3ee"; } 771 | .bi-globe2::before { content: "\f3ef"; } 772 | .bi-google::before { content: "\f3f0"; } 773 | .bi-graph-down::before { content: "\f3f1"; } 774 | .bi-graph-up::before { content: "\f3f2"; } 775 | .bi-grid-1x2-fill::before { content: "\f3f3"; } 776 | .bi-grid-1x2::before { content: "\f3f4"; } 777 | .bi-grid-3x2-gap-fill::before { content: "\f3f5"; } 778 | .bi-grid-3x2-gap::before { content: "\f3f6"; } 779 | .bi-grid-3x2::before { content: "\f3f7"; } 780 | .bi-grid-3x3-gap-fill::before { content: "\f3f8"; } 781 | .bi-grid-3x3-gap::before { content: "\f3f9"; } 782 | .bi-grid-3x3::before { content: "\f3fa"; } 783 | .bi-grid-fill::before { content: "\f3fb"; } 784 | .bi-grid::before { content: "\f3fc"; } 785 | .bi-grip-horizontal::before { content: "\f3fd"; } 786 | .bi-grip-vertical::before { content: "\f3fe"; } 787 | .bi-hammer::before { content: "\f3ff"; } 788 | .bi-hand-index-fill::before { content: "\f400"; } 789 | .bi-hand-index-thumb-fill::before { content: "\f401"; } 790 | .bi-hand-index-thumb::before { content: "\f402"; } 791 | .bi-hand-index::before { content: "\f403"; } 792 | .bi-hand-thumbs-down-fill::before { content: "\f404"; } 793 | .bi-hand-thumbs-down::before { content: "\f405"; } 794 | .bi-hand-thumbs-up-fill::before { content: "\f406"; } 795 | .bi-hand-thumbs-up::before { content: "\f407"; } 796 | .bi-handbag-fill::before { content: "\f408"; } 797 | .bi-handbag::before { content: "\f409"; } 798 | .bi-hash::before { content: "\f40a"; } 799 | .bi-hdd-fill::before { content: "\f40b"; } 800 | .bi-hdd-network-fill::before { content: "\f40c"; } 801 | .bi-hdd-network::before { content: "\f40d"; } 802 | .bi-hdd-rack-fill::before { content: "\f40e"; } 803 | .bi-hdd-rack::before { content: "\f40f"; } 804 | .bi-hdd-stack-fill::before { content: "\f410"; } 805 | .bi-hdd-stack::before { content: "\f411"; } 806 | .bi-hdd::before { content: "\f412"; } 807 | .bi-headphones::before { content: "\f413"; } 808 | .bi-headset::before { content: "\f414"; } 809 | .bi-heart-fill::before { content: "\f415"; } 810 | .bi-heart-half::before { content: "\f416"; } 811 | .bi-heart::before { content: "\f417"; } 812 | .bi-heptagon-fill::before { content: "\f418"; } 813 | .bi-heptagon-half::before { content: "\f419"; } 814 | .bi-heptagon::before { content: "\f41a"; } 815 | .bi-hexagon-fill::before { content: "\f41b"; } 816 | .bi-hexagon-half::before { content: "\f41c"; } 817 | .bi-hexagon::before { content: "\f41d"; } 818 | .bi-hourglass-bottom::before { content: "\f41e"; } 819 | .bi-hourglass-split::before { content: "\f41f"; } 820 | .bi-hourglass-top::before { content: "\f420"; } 821 | .bi-hourglass::before { content: "\f421"; } 822 | .bi-house-door-fill::before { content: "\f422"; } 823 | .bi-house-door::before { content: "\f423"; } 824 | .bi-house-fill::before { content: "\f424"; } 825 | .bi-house::before { content: "\f425"; } 826 | .bi-hr::before { content: "\f426"; } 827 | .bi-hurricane::before { content: "\f427"; } 828 | .bi-image-alt::before { content: "\f428"; } 829 | .bi-image-fill::before { content: "\f429"; } 830 | .bi-image::before { content: "\f42a"; } 831 | .bi-images::before { content: "\f42b"; } 832 | .bi-inbox-fill::before { content: "\f42c"; } 833 | .bi-inbox::before { content: "\f42d"; } 834 | .bi-inboxes-fill::before { content: "\f42e"; } 835 | .bi-inboxes::before { content: "\f42f"; } 836 | .bi-info-circle-fill::before { content: "\f430"; } 837 | .bi-info-circle::before { content: "\f431"; } 838 | .bi-info-square-fill::before { content: "\f432"; } 839 | .bi-info-square::before { content: "\f433"; } 840 | .bi-info::before { content: "\f434"; } 841 | .bi-input-cursor-text::before { content: "\f435"; } 842 | .bi-input-cursor::before { content: "\f436"; } 843 | .bi-instagram::before { content: "\f437"; } 844 | .bi-intersect::before { content: "\f438"; } 845 | .bi-journal-album::before { content: "\f439"; } 846 | .bi-journal-arrow-down::before { content: "\f43a"; } 847 | .bi-journal-arrow-up::before { content: "\f43b"; } 848 | .bi-journal-bookmark-fill::before { content: "\f43c"; } 849 | .bi-journal-bookmark::before { content: "\f43d"; } 850 | .bi-journal-check::before { content: "\f43e"; } 851 | .bi-journal-code::before { content: "\f43f"; } 852 | .bi-journal-medical::before { content: "\f440"; } 853 | .bi-journal-minus::before { content: "\f441"; } 854 | .bi-journal-plus::before { content: "\f442"; } 855 | .bi-journal-richtext::before { content: "\f443"; } 856 | .bi-journal-text::before { content: "\f444"; } 857 | .bi-journal-x::before { content: "\f445"; } 858 | .bi-journal::before { content: "\f446"; } 859 | .bi-journals::before { content: "\f447"; } 860 | .bi-joystick::before { content: "\f448"; } 861 | .bi-justify-left::before { content: "\f449"; } 862 | .bi-justify-right::before { content: "\f44a"; } 863 | .bi-justify::before { content: "\f44b"; } 864 | .bi-kanban-fill::before { content: "\f44c"; } 865 | .bi-kanban::before { content: "\f44d"; } 866 | .bi-key-fill::before { content: "\f44e"; } 867 | .bi-key::before { content: "\f44f"; } 868 | .bi-keyboard-fill::before { content: "\f450"; } 869 | .bi-keyboard::before { content: "\f451"; } 870 | .bi-ladder::before { content: "\f452"; } 871 | .bi-lamp-fill::before { content: "\f453"; } 872 | .bi-lamp::before { content: "\f454"; } 873 | .bi-laptop-fill::before { content: "\f455"; } 874 | .bi-laptop::before { content: "\f456"; } 875 | .bi-layer-backward::before { content: "\f457"; } 876 | .bi-layer-forward::before { content: "\f458"; } 877 | .bi-layers-fill::before { content: "\f459"; } 878 | .bi-layers-half::before { content: "\f45a"; } 879 | .bi-layers::before { content: "\f45b"; } 880 | .bi-layout-sidebar-inset-reverse::before { content: "\f45c"; } 881 | .bi-layout-sidebar-inset::before { content: "\f45d"; } 882 | .bi-layout-sidebar-reverse::before { content: "\f45e"; } 883 | .bi-layout-sidebar::before { content: "\f45f"; } 884 | .bi-layout-split::before { content: "\f460"; } 885 | .bi-layout-text-sidebar-reverse::before { content: "\f461"; } 886 | .bi-layout-text-sidebar::before { content: "\f462"; } 887 | .bi-layout-text-window-reverse::before { content: "\f463"; } 888 | .bi-layout-text-window::before { content: "\f464"; } 889 | .bi-layout-three-columns::before { content: "\f465"; } 890 | .bi-layout-wtf::before { content: "\f466"; } 891 | .bi-life-preserver::before { content: "\f467"; } 892 | .bi-lightbulb-fill::before { content: "\f468"; } 893 | .bi-lightbulb-off-fill::before { content: "\f469"; } 894 | .bi-lightbulb-off::before { content: "\f46a"; } 895 | .bi-lightbulb::before { content: "\f46b"; } 896 | .bi-lightning-charge-fill::before { content: "\f46c"; } 897 | .bi-lightning-charge::before { content: "\f46d"; } 898 | .bi-lightning-fill::before { content: "\f46e"; } 899 | .bi-lightning::before { content: "\f46f"; } 900 | .bi-link-45deg::before { content: "\f470"; } 901 | .bi-link::before { content: "\f471"; } 902 | .bi-linkedin::before { content: "\f472"; } 903 | .bi-list-check::before { content: "\f473"; } 904 | .bi-list-nested::before { content: "\f474"; } 905 | .bi-list-ol::before { content: "\f475"; } 906 | .bi-list-stars::before { content: "\f476"; } 907 | .bi-list-task::before { content: "\f477"; } 908 | .bi-list-ul::before { content: "\f478"; } 909 | .bi-list::before { content: "\f479"; } 910 | .bi-lock-fill::before { content: "\f47a"; } 911 | .bi-lock::before { content: "\f47b"; } 912 | .bi-mailbox::before { content: "\f47c"; } 913 | .bi-mailbox2::before { content: "\f47d"; } 914 | .bi-map-fill::before { content: "\f47e"; } 915 | .bi-map::before { content: "\f47f"; } 916 | .bi-markdown-fill::before { content: "\f480"; } 917 | .bi-markdown::before { content: "\f481"; } 918 | .bi-mask::before { content: "\f482"; } 919 | .bi-megaphone-fill::before { content: "\f483"; } 920 | .bi-megaphone::before { content: "\f484"; } 921 | .bi-menu-app-fill::before { content: "\f485"; } 922 | .bi-menu-app::before { content: "\f486"; } 923 | .bi-menu-button-fill::before { content: "\f487"; } 924 | .bi-menu-button-wide-fill::before { content: "\f488"; } 925 | .bi-menu-button-wide::before { content: "\f489"; } 926 | .bi-menu-button::before { content: "\f48a"; } 927 | .bi-menu-down::before { content: "\f48b"; } 928 | .bi-menu-up::before { content: "\f48c"; } 929 | .bi-mic-fill::before { content: "\f48d"; } 930 | .bi-mic-mute-fill::before { content: "\f48e"; } 931 | .bi-mic-mute::before { content: "\f48f"; } 932 | .bi-mic::before { content: "\f490"; } 933 | .bi-minecart-loaded::before { content: "\f491"; } 934 | .bi-minecart::before { content: "\f492"; } 935 | .bi-moisture::before { content: "\f493"; } 936 | .bi-moon-fill::before { content: "\f494"; } 937 | .bi-moon-stars-fill::before { content: "\f495"; } 938 | .bi-moon-stars::before { content: "\f496"; } 939 | .bi-moon::before { content: "\f497"; } 940 | .bi-mouse-fill::before { content: "\f498"; } 941 | .bi-mouse::before { content: "\f499"; } 942 | .bi-mouse2-fill::before { content: "\f49a"; } 943 | .bi-mouse2::before { content: "\f49b"; } 944 | .bi-mouse3-fill::before { content: "\f49c"; } 945 | .bi-mouse3::before { content: "\f49d"; } 946 | .bi-music-note-beamed::before { content: "\f49e"; } 947 | .bi-music-note-list::before { content: "\f49f"; } 948 | .bi-music-note::before { content: "\f4a0"; } 949 | .bi-music-player-fill::before { content: "\f4a1"; } 950 | .bi-music-player::before { content: "\f4a2"; } 951 | .bi-newspaper::before { content: "\f4a3"; } 952 | .bi-node-minus-fill::before { content: "\f4a4"; } 953 | .bi-node-minus::before { content: "\f4a5"; } 954 | .bi-node-plus-fill::before { content: "\f4a6"; } 955 | .bi-node-plus::before { content: "\f4a7"; } 956 | .bi-nut-fill::before { content: "\f4a8"; } 957 | .bi-nut::before { content: "\f4a9"; } 958 | .bi-octagon-fill::before { content: "\f4aa"; } 959 | .bi-octagon-half::before { content: "\f4ab"; } 960 | .bi-octagon::before { content: "\f4ac"; } 961 | .bi-option::before { content: "\f4ad"; } 962 | .bi-outlet::before { content: "\f4ae"; } 963 | .bi-paint-bucket::before { content: "\f4af"; } 964 | .bi-palette-fill::before { content: "\f4b0"; } 965 | .bi-palette::before { content: "\f4b1"; } 966 | .bi-palette2::before { content: "\f4b2"; } 967 | .bi-paperclip::before { content: "\f4b3"; } 968 | .bi-paragraph::before { content: "\f4b4"; } 969 | .bi-patch-check-fill::before { content: "\f4b5"; } 970 | .bi-patch-check::before { content: "\f4b6"; } 971 | .bi-patch-exclamation-fill::before { content: "\f4b7"; } 972 | .bi-patch-exclamation::before { content: "\f4b8"; } 973 | .bi-patch-minus-fill::before { content: "\f4b9"; } 974 | .bi-patch-minus::before { content: "\f4ba"; } 975 | .bi-patch-plus-fill::before { content: "\f4bb"; } 976 | .bi-patch-plus::before { content: "\f4bc"; } 977 | .bi-patch-question-fill::before { content: "\f4bd"; } 978 | .bi-patch-question::before { content: "\f4be"; } 979 | .bi-pause-btn-fill::before { content: "\f4bf"; } 980 | .bi-pause-btn::before { content: "\f4c0"; } 981 | .bi-pause-circle-fill::before { content: "\f4c1"; } 982 | .bi-pause-circle::before { content: "\f4c2"; } 983 | .bi-pause-fill::before { content: "\f4c3"; } 984 | .bi-pause::before { content: "\f4c4"; } 985 | .bi-peace-fill::before { content: "\f4c5"; } 986 | .bi-peace::before { content: "\f4c6"; } 987 | .bi-pen-fill::before { content: "\f4c7"; } 988 | .bi-pen::before { content: "\f4c8"; } 989 | .bi-pencil-fill::before { content: "\f4c9"; } 990 | .bi-pencil-square::before { content: "\f4ca"; } 991 | .bi-pencil::before { content: "\f4cb"; } 992 | .bi-pentagon-fill::before { content: "\f4cc"; } 993 | .bi-pentagon-half::before { content: "\f4cd"; } 994 | .bi-pentagon::before { content: "\f4ce"; } 995 | .bi-people-fill::before { content: "\f4cf"; } 996 | .bi-people::before { content: "\f4d0"; } 997 | .bi-percent::before { content: "\f4d1"; } 998 | .bi-person-badge-fill::before { content: "\f4d2"; } 999 | .bi-person-badge::before { content: "\f4d3"; } 1000 | .bi-person-bounding-box::before { content: "\f4d4"; } 1001 | .bi-person-check-fill::before { content: "\f4d5"; } 1002 | .bi-person-check::before { content: "\f4d6"; } 1003 | .bi-person-circle::before { content: "\f4d7"; } 1004 | .bi-person-dash-fill::before { content: "\f4d8"; } 1005 | .bi-person-dash::before { content: "\f4d9"; } 1006 | .bi-person-fill::before { content: "\f4da"; } 1007 | .bi-person-lines-fill::before { content: "\f4db"; } 1008 | .bi-person-plus-fill::before { content: "\f4dc"; } 1009 | .bi-person-plus::before { content: "\f4dd"; } 1010 | .bi-person-square::before { content: "\f4de"; } 1011 | .bi-person-x-fill::before { content: "\f4df"; } 1012 | .bi-person-x::before { content: "\f4e0"; } 1013 | .bi-person::before { content: "\f4e1"; } 1014 | .bi-phone-fill::before { content: "\f4e2"; } 1015 | .bi-phone-landscape-fill::before { content: "\f4e3"; } 1016 | .bi-phone-landscape::before { content: "\f4e4"; } 1017 | .bi-phone-vibrate-fill::before { content: "\f4e5"; } 1018 | .bi-phone-vibrate::before { content: "\f4e6"; } 1019 | .bi-phone::before { content: "\f4e7"; } 1020 | .bi-pie-chart-fill::before { content: "\f4e8"; } 1021 | .bi-pie-chart::before { content: "\f4e9"; } 1022 | .bi-pin-angle-fill::before { content: "\f4ea"; } 1023 | .bi-pin-angle::before { content: "\f4eb"; } 1024 | .bi-pin-fill::before { content: "\f4ec"; } 1025 | .bi-pin::before { content: "\f4ed"; } 1026 | .bi-pip-fill::before { content: "\f4ee"; } 1027 | .bi-pip::before { content: "\f4ef"; } 1028 | .bi-play-btn-fill::before { content: "\f4f0"; } 1029 | .bi-play-btn::before { content: "\f4f1"; } 1030 | .bi-play-circle-fill::before { content: "\f4f2"; } 1031 | .bi-play-circle::before { content: "\f4f3"; } 1032 | .bi-play-fill::before { content: "\f4f4"; } 1033 | .bi-play::before { content: "\f4f5"; } 1034 | .bi-plug-fill::before { content: "\f4f6"; } 1035 | .bi-plug::before { content: "\f4f7"; } 1036 | .bi-plus-circle-dotted::before { content: "\f4f8"; } 1037 | .bi-plus-circle-fill::before { content: "\f4f9"; } 1038 | .bi-plus-circle::before { content: "\f4fa"; } 1039 | .bi-plus-square-dotted::before { content: "\f4fb"; } 1040 | .bi-plus-square-fill::before { content: "\f4fc"; } 1041 | .bi-plus-square::before { content: "\f4fd"; } 1042 | .bi-plus::before { content: "\f4fe"; } 1043 | .bi-power::before { content: "\f4ff"; } 1044 | .bi-printer-fill::before { content: "\f500"; } 1045 | .bi-printer::before { content: "\f501"; } 1046 | .bi-puzzle-fill::before { content: "\f502"; } 1047 | .bi-puzzle::before { content: "\f503"; } 1048 | .bi-question-circle-fill::before { content: "\f504"; } 1049 | .bi-question-circle::before { content: "\f505"; } 1050 | .bi-question-diamond-fill::before { content: "\f506"; } 1051 | .bi-question-diamond::before { content: "\f507"; } 1052 | .bi-question-octagon-fill::before { content: "\f508"; } 1053 | .bi-question-octagon::before { content: "\f509"; } 1054 | .bi-question-square-fill::before { content: "\f50a"; } 1055 | .bi-question-square::before { content: "\f50b"; } 1056 | .bi-question::before { content: "\f50c"; } 1057 | .bi-rainbow::before { content: "\f50d"; } 1058 | .bi-receipt-cutoff::before { content: "\f50e"; } 1059 | .bi-receipt::before { content: "\f50f"; } 1060 | .bi-reception-0::before { content: "\f510"; } 1061 | .bi-reception-1::before { content: "\f511"; } 1062 | .bi-reception-2::before { content: "\f512"; } 1063 | .bi-reception-3::before { content: "\f513"; } 1064 | .bi-reception-4::before { content: "\f514"; } 1065 | .bi-record-btn-fill::before { content: "\f515"; } 1066 | .bi-record-btn::before { content: "\f516"; } 1067 | .bi-record-circle-fill::before { content: "\f517"; } 1068 | .bi-record-circle::before { content: "\f518"; } 1069 | .bi-record-fill::before { content: "\f519"; } 1070 | .bi-record::before { content: "\f51a"; } 1071 | .bi-record2-fill::before { content: "\f51b"; } 1072 | .bi-record2::before { content: "\f51c"; } 1073 | .bi-reply-all-fill::before { content: "\f51d"; } 1074 | .bi-reply-all::before { content: "\f51e"; } 1075 | .bi-reply-fill::before { content: "\f51f"; } 1076 | .bi-reply::before { content: "\f520"; } 1077 | .bi-rss-fill::before { content: "\f521"; } 1078 | .bi-rss::before { content: "\f522"; } 1079 | .bi-rulers::before { content: "\f523"; } 1080 | .bi-save-fill::before { content: "\f524"; } 1081 | .bi-save::before { content: "\f525"; } 1082 | .bi-save2-fill::before { content: "\f526"; } 1083 | .bi-save2::before { content: "\f527"; } 1084 | .bi-scissors::before { content: "\f528"; } 1085 | .bi-screwdriver::before { content: "\f529"; } 1086 | .bi-search::before { content: "\f52a"; } 1087 | .bi-segmented-nav::before { content: "\f52b"; } 1088 | .bi-server::before { content: "\f52c"; } 1089 | .bi-share-fill::before { content: "\f52d"; } 1090 | .bi-share::before { content: "\f52e"; } 1091 | .bi-shield-check::before { content: "\f52f"; } 1092 | .bi-shield-exclamation::before { content: "\f530"; } 1093 | .bi-shield-fill-check::before { content: "\f531"; } 1094 | .bi-shield-fill-exclamation::before { content: "\f532"; } 1095 | .bi-shield-fill-minus::before { content: "\f533"; } 1096 | .bi-shield-fill-plus::before { content: "\f534"; } 1097 | .bi-shield-fill-x::before { content: "\f535"; } 1098 | .bi-shield-fill::before { content: "\f536"; } 1099 | .bi-shield-lock-fill::before { content: "\f537"; } 1100 | .bi-shield-lock::before { content: "\f538"; } 1101 | .bi-shield-minus::before { content: "\f539"; } 1102 | .bi-shield-plus::before { content: "\f53a"; } 1103 | .bi-shield-shaded::before { content: "\f53b"; } 1104 | .bi-shield-slash-fill::before { content: "\f53c"; } 1105 | .bi-shield-slash::before { content: "\f53d"; } 1106 | .bi-shield-x::before { content: "\f53e"; } 1107 | .bi-shield::before { content: "\f53f"; } 1108 | .bi-shift-fill::before { content: "\f540"; } 1109 | .bi-shift::before { content: "\f541"; } 1110 | .bi-shop-window::before { content: "\f542"; } 1111 | .bi-shop::before { content: "\f543"; } 1112 | .bi-shuffle::before { content: "\f544"; } 1113 | .bi-signpost-2-fill::before { content: "\f545"; } 1114 | .bi-signpost-2::before { content: "\f546"; } 1115 | .bi-signpost-fill::before { content: "\f547"; } 1116 | .bi-signpost-split-fill::before { content: "\f548"; } 1117 | .bi-signpost-split::before { content: "\f549"; } 1118 | .bi-signpost::before { content: "\f54a"; } 1119 | .bi-sim-fill::before { content: "\f54b"; } 1120 | .bi-sim::before { content: "\f54c"; } 1121 | .bi-skip-backward-btn-fill::before { content: "\f54d"; } 1122 | .bi-skip-backward-btn::before { content: "\f54e"; } 1123 | .bi-skip-backward-circle-fill::before { content: "\f54f"; } 1124 | .bi-skip-backward-circle::before { content: "\f550"; } 1125 | .bi-skip-backward-fill::before { content: "\f551"; } 1126 | .bi-skip-backward::before { content: "\f552"; } 1127 | .bi-skip-end-btn-fill::before { content: "\f553"; } 1128 | .bi-skip-end-btn::before { content: "\f554"; } 1129 | .bi-skip-end-circle-fill::before { content: "\f555"; } 1130 | .bi-skip-end-circle::before { content: "\f556"; } 1131 | .bi-skip-end-fill::before { content: "\f557"; } 1132 | .bi-skip-end::before { content: "\f558"; } 1133 | .bi-skip-forward-btn-fill::before { content: "\f559"; } 1134 | .bi-skip-forward-btn::before { content: "\f55a"; } 1135 | .bi-skip-forward-circle-fill::before { content: "\f55b"; } 1136 | .bi-skip-forward-circle::before { content: "\f55c"; } 1137 | .bi-skip-forward-fill::before { content: "\f55d"; } 1138 | .bi-skip-forward::before { content: "\f55e"; } 1139 | .bi-skip-start-btn-fill::before { content: "\f55f"; } 1140 | .bi-skip-start-btn::before { content: "\f560"; } 1141 | .bi-skip-start-circle-fill::before { content: "\f561"; } 1142 | .bi-skip-start-circle::before { content: "\f562"; } 1143 | .bi-skip-start-fill::before { content: "\f563"; } 1144 | .bi-skip-start::before { content: "\f564"; } 1145 | .bi-slack::before { content: "\f565"; } 1146 | .bi-slash-circle-fill::before { content: "\f566"; } 1147 | .bi-slash-circle::before { content: "\f567"; } 1148 | .bi-slash-square-fill::before { content: "\f568"; } 1149 | .bi-slash-square::before { content: "\f569"; } 1150 | .bi-slash::before { content: "\f56a"; } 1151 | .bi-sliders::before { content: "\f56b"; } 1152 | .bi-smartwatch::before { content: "\f56c"; } 1153 | .bi-snow::before { content: "\f56d"; } 1154 | .bi-snow2::before { content: "\f56e"; } 1155 | .bi-snow3::before { content: "\f56f"; } 1156 | .bi-sort-alpha-down-alt::before { content: "\f570"; } 1157 | .bi-sort-alpha-down::before { content: "\f571"; } 1158 | .bi-sort-alpha-up-alt::before { content: "\f572"; } 1159 | .bi-sort-alpha-up::before { content: "\f573"; } 1160 | .bi-sort-down-alt::before { content: "\f574"; } 1161 | .bi-sort-down::before { content: "\f575"; } 1162 | .bi-sort-numeric-down-alt::before { content: "\f576"; } 1163 | .bi-sort-numeric-down::before { content: "\f577"; } 1164 | .bi-sort-numeric-up-alt::before { content: "\f578"; } 1165 | .bi-sort-numeric-up::before { content: "\f579"; } 1166 | .bi-sort-up-alt::before { content: "\f57a"; } 1167 | .bi-sort-up::before { content: "\f57b"; } 1168 | .bi-soundwave::before { content: "\f57c"; } 1169 | .bi-speaker-fill::before { content: "\f57d"; } 1170 | .bi-speaker::before { content: "\f57e"; } 1171 | .bi-speedometer::before { content: "\f57f"; } 1172 | .bi-speedometer2::before { content: "\f580"; } 1173 | .bi-spellcheck::before { content: "\f581"; } 1174 | .bi-square-fill::before { content: "\f582"; } 1175 | .bi-square-half::before { content: "\f583"; } 1176 | .bi-square::before { content: "\f584"; } 1177 | .bi-stack::before { content: "\f585"; } 1178 | .bi-star-fill::before { content: "\f586"; } 1179 | .bi-star-half::before { content: "\f587"; } 1180 | .bi-star::before { content: "\f588"; } 1181 | .bi-stars::before { content: "\f589"; } 1182 | .bi-stickies-fill::before { content: "\f58a"; } 1183 | .bi-stickies::before { content: "\f58b"; } 1184 | .bi-sticky-fill::before { content: "\f58c"; } 1185 | .bi-sticky::before { content: "\f58d"; } 1186 | .bi-stop-btn-fill::before { content: "\f58e"; } 1187 | .bi-stop-btn::before { content: "\f58f"; } 1188 | .bi-stop-circle-fill::before { content: "\f590"; } 1189 | .bi-stop-circle::before { content: "\f591"; } 1190 | .bi-stop-fill::before { content: "\f592"; } 1191 | .bi-stop::before { content: "\f593"; } 1192 | .bi-stoplights-fill::before { content: "\f594"; } 1193 | .bi-stoplights::before { content: "\f595"; } 1194 | .bi-stopwatch-fill::before { content: "\f596"; } 1195 | .bi-stopwatch::before { content: "\f597"; } 1196 | .bi-subtract::before { content: "\f598"; } 1197 | .bi-suit-club-fill::before { content: "\f599"; } 1198 | .bi-suit-club::before { content: "\f59a"; } 1199 | .bi-suit-diamond-fill::before { content: "\f59b"; } 1200 | .bi-suit-diamond::before { content: "\f59c"; } 1201 | .bi-suit-heart-fill::before { content: "\f59d"; } 1202 | .bi-suit-heart::before { content: "\f59e"; } 1203 | .bi-suit-spade-fill::before { content: "\f59f"; } 1204 | .bi-suit-spade::before { content: "\f5a0"; } 1205 | .bi-sun-fill::before { content: "\f5a1"; } 1206 | .bi-sun::before { content: "\f5a2"; } 1207 | .bi-sunglasses::before { content: "\f5a3"; } 1208 | .bi-sunrise-fill::before { content: "\f5a4"; } 1209 | .bi-sunrise::before { content: "\f5a5"; } 1210 | .bi-sunset-fill::before { content: "\f5a6"; } 1211 | .bi-sunset::before { content: "\f5a7"; } 1212 | .bi-symmetry-horizontal::before { content: "\f5a8"; } 1213 | .bi-symmetry-vertical::before { content: "\f5a9"; } 1214 | .bi-table::before { content: "\f5aa"; } 1215 | .bi-tablet-fill::before { content: "\f5ab"; } 1216 | .bi-tablet-landscape-fill::before { content: "\f5ac"; } 1217 | .bi-tablet-landscape::before { content: "\f5ad"; } 1218 | .bi-tablet::before { content: "\f5ae"; } 1219 | .bi-tag-fill::before { content: "\f5af"; } 1220 | .bi-tag::before { content: "\f5b0"; } 1221 | .bi-tags-fill::before { content: "\f5b1"; } 1222 | .bi-tags::before { content: "\f5b2"; } 1223 | .bi-telegram::before { content: "\f5b3"; } 1224 | .bi-telephone-fill::before { content: "\f5b4"; } 1225 | .bi-telephone-forward-fill::before { content: "\f5b5"; } 1226 | .bi-telephone-forward::before { content: "\f5b6"; } 1227 | .bi-telephone-inbound-fill::before { content: "\f5b7"; } 1228 | .bi-telephone-inbound::before { content: "\f5b8"; } 1229 | .bi-telephone-minus-fill::before { content: "\f5b9"; } 1230 | .bi-telephone-minus::before { content: "\f5ba"; } 1231 | .bi-telephone-outbound-fill::before { content: "\f5bb"; } 1232 | .bi-telephone-outbound::before { content: "\f5bc"; } 1233 | .bi-telephone-plus-fill::before { content: "\f5bd"; } 1234 | .bi-telephone-plus::before { content: "\f5be"; } 1235 | .bi-telephone-x-fill::before { content: "\f5bf"; } 1236 | .bi-telephone-x::before { content: "\f5c0"; } 1237 | .bi-telephone::before { content: "\f5c1"; } 1238 | .bi-terminal-fill::before { content: "\f5c2"; } 1239 | .bi-terminal::before { content: "\f5c3"; } 1240 | .bi-text-center::before { content: "\f5c4"; } 1241 | .bi-text-indent-left::before { content: "\f5c5"; } 1242 | .bi-text-indent-right::before { content: "\f5c6"; } 1243 | .bi-text-left::before { content: "\f5c7"; } 1244 | .bi-text-paragraph::before { content: "\f5c8"; } 1245 | .bi-text-right::before { content: "\f5c9"; } 1246 | .bi-textarea-resize::before { content: "\f5ca"; } 1247 | .bi-textarea-t::before { content: "\f5cb"; } 1248 | .bi-textarea::before { content: "\f5cc"; } 1249 | .bi-thermometer-half::before { content: "\f5cd"; } 1250 | .bi-thermometer-high::before { content: "\f5ce"; } 1251 | .bi-thermometer-low::before { content: "\f5cf"; } 1252 | .bi-thermometer-snow::before { content: "\f5d0"; } 1253 | .bi-thermometer-sun::before { content: "\f5d1"; } 1254 | .bi-thermometer::before { content: "\f5d2"; } 1255 | .bi-three-dots-vertical::before { content: "\f5d3"; } 1256 | .bi-three-dots::before { content: "\f5d4"; } 1257 | .bi-toggle-off::before { content: "\f5d5"; } 1258 | .bi-toggle-on::before { content: "\f5d6"; } 1259 | .bi-toggle2-off::before { content: "\f5d7"; } 1260 | .bi-toggle2-on::before { content: "\f5d8"; } 1261 | .bi-toggles::before { content: "\f5d9"; } 1262 | .bi-toggles2::before { content: "\f5da"; } 1263 | .bi-tools::before { content: "\f5db"; } 1264 | .bi-tornado::before { content: "\f5dc"; } 1265 | .bi-trash-fill::before { content: "\f5dd"; } 1266 | .bi-trash::before { content: "\f5de"; } 1267 | .bi-trash2-fill::before { content: "\f5df"; } 1268 | .bi-trash2::before { content: "\f5e0"; } 1269 | .bi-tree-fill::before { content: "\f5e1"; } 1270 | .bi-tree::before { content: "\f5e2"; } 1271 | .bi-triangle-fill::before { content: "\f5e3"; } 1272 | .bi-triangle-half::before { content: "\f5e4"; } 1273 | .bi-triangle::before { content: "\f5e5"; } 1274 | .bi-trophy-fill::before { content: "\f5e6"; } 1275 | .bi-trophy::before { content: "\f5e7"; } 1276 | .bi-tropical-storm::before { content: "\f5e8"; } 1277 | .bi-truck-flatbed::before { content: "\f5e9"; } 1278 | .bi-truck::before { content: "\f5ea"; } 1279 | .bi-tsunami::before { content: "\f5eb"; } 1280 | .bi-tv-fill::before { content: "\f5ec"; } 1281 | .bi-tv::before { content: "\f5ed"; } 1282 | .bi-twitch::before { content: "\f5ee"; } 1283 | .bi-twitter::before { content: "\f5ef"; } 1284 | .bi-type-bold::before { content: "\f5f0"; } 1285 | .bi-type-h1::before { content: "\f5f1"; } 1286 | .bi-type-h2::before { content: "\f5f2"; } 1287 | .bi-type-h3::before { content: "\f5f3"; } 1288 | .bi-type-italic::before { content: "\f5f4"; } 1289 | .bi-type-strikethrough::before { content: "\f5f5"; } 1290 | .bi-type-underline::before { content: "\f5f6"; } 1291 | .bi-type::before { content: "\f5f7"; } 1292 | .bi-ui-checks-grid::before { content: "\f5f8"; } 1293 | .bi-ui-checks::before { content: "\f5f9"; } 1294 | .bi-ui-radios-grid::before { content: "\f5fa"; } 1295 | .bi-ui-radios::before { content: "\f5fb"; } 1296 | .bi-umbrella-fill::before { content: "\f5fc"; } 1297 | .bi-umbrella::before { content: "\f5fd"; } 1298 | .bi-union::before { content: "\f5fe"; } 1299 | .bi-unlock-fill::before { content: "\f5ff"; } 1300 | .bi-unlock::before { content: "\f600"; } 1301 | .bi-upc-scan::before { content: "\f601"; } 1302 | .bi-upc::before { content: "\f602"; } 1303 | .bi-upload::before { content: "\f603"; } 1304 | .bi-vector-pen::before { content: "\f604"; } 1305 | .bi-view-list::before { content: "\f605"; } 1306 | .bi-view-stacked::before { content: "\f606"; } 1307 | .bi-vinyl-fill::before { content: "\f607"; } 1308 | .bi-vinyl::before { content: "\f608"; } 1309 | .bi-voicemail::before { content: "\f609"; } 1310 | .bi-volume-down-fill::before { content: "\f60a"; } 1311 | .bi-volume-down::before { content: "\f60b"; } 1312 | .bi-volume-mute-fill::before { content: "\f60c"; } 1313 | .bi-volume-mute::before { content: "\f60d"; } 1314 | .bi-volume-off-fill::before { content: "\f60e"; } 1315 | .bi-volume-off::before { content: "\f60f"; } 1316 | .bi-volume-up-fill::before { content: "\f610"; } 1317 | .bi-volume-up::before { content: "\f611"; } 1318 | .bi-vr::before { content: "\f612"; } 1319 | .bi-wallet-fill::before { content: "\f613"; } 1320 | .bi-wallet::before { content: "\f614"; } 1321 | .bi-wallet2::before { content: "\f615"; } 1322 | .bi-watch::before { content: "\f616"; } 1323 | .bi-water::before { content: "\f617"; } 1324 | .bi-whatsapp::before { content: "\f618"; } 1325 | .bi-wifi-1::before { content: "\f619"; } 1326 | .bi-wifi-2::before { content: "\f61a"; } 1327 | .bi-wifi-off::before { content: "\f61b"; } 1328 | .bi-wifi::before { content: "\f61c"; } 1329 | .bi-wind::before { content: "\f61d"; } 1330 | .bi-window-dock::before { content: "\f61e"; } 1331 | .bi-window-sidebar::before { content: "\f61f"; } 1332 | .bi-window::before { content: "\f620"; } 1333 | .bi-wrench::before { content: "\f621"; } 1334 | .bi-x-circle-fill::before { content: "\f622"; } 1335 | .bi-x-circle::before { content: "\f623"; } 1336 | .bi-x-diamond-fill::before { content: "\f624"; } 1337 | .bi-x-diamond::before { content: "\f625"; } 1338 | .bi-x-octagon-fill::before { content: "\f626"; } 1339 | .bi-x-octagon::before { content: "\f627"; } 1340 | .bi-x-square-fill::before { content: "\f628"; } 1341 | .bi-x-square::before { content: "\f629"; } 1342 | .bi-x::before { content: "\f62a"; } 1343 | .bi-youtube::before { content: "\f62b"; } 1344 | .bi-zoom-in::before { content: "\f62c"; } 1345 | .bi-zoom-out::before { content: "\f62d"; } 1346 | .bi-bank::before { content: "\f62e"; } 1347 | .bi-bank2::before { content: "\f62f"; } 1348 | .bi-bell-slash-fill::before { content: "\f630"; } 1349 | .bi-bell-slash::before { content: "\f631"; } 1350 | .bi-cash-coin::before { content: "\f632"; } 1351 | .bi-check-lg::before { content: "\f633"; } 1352 | .bi-coin::before { content: "\f634"; } 1353 | .bi-currency-bitcoin::before { content: "\f635"; } 1354 | .bi-currency-dollar::before { content: "\f636"; } 1355 | .bi-currency-euro::before { content: "\f637"; } 1356 | .bi-currency-exchange::before { content: "\f638"; } 1357 | .bi-currency-pound::before { content: "\f639"; } 1358 | .bi-currency-yen::before { content: "\f63a"; } 1359 | .bi-dash-lg::before { content: "\f63b"; } 1360 | .bi-exclamation-lg::before { content: "\f63c"; } 1361 | .bi-file-earmark-pdf-fill::before { content: "\f63d"; } 1362 | .bi-file-earmark-pdf::before { content: "\f63e"; } 1363 | .bi-file-pdf-fill::before { content: "\f63f"; } 1364 | .bi-file-pdf::before { content: "\f640"; } 1365 | .bi-gender-ambiguous::before { content: "\f641"; } 1366 | .bi-gender-female::before { content: "\f642"; } 1367 | .bi-gender-male::before { content: "\f643"; } 1368 | .bi-gender-trans::before { content: "\f644"; } 1369 | .bi-headset-vr::before { content: "\f645"; } 1370 | .bi-info-lg::before { content: "\f646"; } 1371 | .bi-mastodon::before { content: "\f647"; } 1372 | .bi-messenger::before { content: "\f648"; } 1373 | .bi-piggy-bank-fill::before { content: "\f649"; } 1374 | .bi-piggy-bank::before { content: "\f64a"; } 1375 | .bi-pin-map-fill::before { content: "\f64b"; } 1376 | .bi-pin-map::before { content: "\f64c"; } 1377 | .bi-plus-lg::before { content: "\f64d"; } 1378 | .bi-question-lg::before { content: "\f64e"; } 1379 | .bi-recycle::before { content: "\f64f"; } 1380 | .bi-reddit::before { content: "\f650"; } 1381 | .bi-safe-fill::before { content: "\f651"; } 1382 | .bi-safe2-fill::before { content: "\f652"; } 1383 | .bi-safe2::before { content: "\f653"; } 1384 | .bi-sd-card-fill::before { content: "\f654"; } 1385 | .bi-sd-card::before { content: "\f655"; } 1386 | .bi-skype::before { content: "\f656"; } 1387 | .bi-slash-lg::before { content: "\f657"; } 1388 | .bi-translate::before { content: "\f658"; } 1389 | .bi-x-lg::before { content: "\f659"; } 1390 | .bi-safe::before { content: "\f65a"; } -------------------------------------------------------------------------------- /public/css/style.css: -------------------------------------------------------------------------------- 1 | /* #root{ 2 | margin-top: 20px; 3 | } */ 4 | body{ 5 | padding-top: 10px; 6 | } 7 | .col{ 8 | margin: 5px; 9 | } 10 | circle{ 11 | background-color: black; 12 | r: 2; 13 | opacity: 1; 14 | fill: black; 15 | stroke: black; 16 | } 17 | .func-card{ 18 | padding-left: 10px; 19 | padding-right: 10px; 20 | background-color: #fafaff; 21 | } 22 | 23 | h1{ 24 | text-align: center; 25 | } 26 | 27 | .form-select{ 28 | margin-top: 10px; 29 | } 30 | 31 | .grid_btn{ 32 | padding-left: 0; 33 | padding-right: 0; 34 | display: grid; 35 | } 36 | 37 | .footer_box{ 38 | margin-top: 1.5em; 39 | height: 8em; 40 | background-color: #f8f9fa!important; 41 | } 42 | 43 | .page_footer{ 44 | margin-top: 5em; 45 | font-size: .9em; 46 | color: #6c757d; 47 | } 48 | .blockquote-footer:before{ 49 | content: ""; 50 | } 51 | -------------------------------------------------------------------------------- /public/fonts/bootstrap-icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chenwenhang/MathFunctionTool/6380698ea3bd811c6e655872a567593112cfeb19/public/fonts/bootstrap-icons.woff2 -------------------------------------------------------------------------------- /public/js/bootstrap.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v5.0.2 (https://getbootstrap.com/) 3 | * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5 | */ 6 | !function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("@popperjs/core")):"function"==typeof define&&define.amd?define(["@popperjs/core"],e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e(t.Popper)}(this,(function(t){"use strict";function e(t){if(t&&t.__esModule)return t;var e=Object.create(null);return t&&Object.keys(t).forEach((function(s){if("default"!==s){var i=Object.getOwnPropertyDescriptor(t,s);Object.defineProperty(e,s,i.get?i:{enumerable:!0,get:function(){return t[s]}})}})),e.default=t,Object.freeze(e)}var s=e(t);const i={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter(t=>t.matches(e)),parents(t,e){const s=[];let i=t.parentNode;for(;i&&i.nodeType===Node.ELEMENT_NODE&&3!==i.nodeType;)i.matches(e)&&s.push(i),i=i.parentNode;return s},prev(t,e){let s=t.previousElementSibling;for(;s;){if(s.matches(e))return[s];s=s.previousElementSibling}return[]},next(t,e){let s=t.nextElementSibling;for(;s;){if(s.matches(e))return[s];s=s.nextElementSibling}return[]}},n=t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t},o=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let s=t.getAttribute("href");if(!s||!s.includes("#")&&!s.startsWith("."))return null;s.includes("#")&&!s.startsWith("#")&&(s="#"+s.split("#")[1]),e=s&&"#"!==s?s.trim():null}return e},r=t=>{const e=o(t);return e&&document.querySelector(e)?e:null},a=t=>{const e=o(t);return e?document.querySelector(e):null},l=t=>{t.dispatchEvent(new Event("transitionend"))},c=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),h=t=>c(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?i.findOne(t):null,d=(t,e,s)=>{Object.keys(s).forEach(i=>{const n=s[i],o=e[i],r=o&&c(o)?"element":null==(a=o)?""+a:{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase();var a;if(!new RegExp(n).test(r))throw new TypeError(`${t.toUpperCase()}: Option "${i}" provided type "${r}" but expected type "${n}".`)})},u=t=>!(!c(t)||0===t.getClientRects().length)&&"visible"===getComputedStyle(t).getPropertyValue("visibility"),g=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),p=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?p(t.parentNode):null},f=()=>{},m=t=>t.offsetHeight,_=()=>{const{jQuery:t}=window;return t&&!document.body.hasAttribute("data-bs-no-jquery")?t:null},b=[],v=()=>"rtl"===document.documentElement.dir,y=t=>{var e;e=()=>{const e=_();if(e){const s=t.NAME,i=e.fn[s];e.fn[s]=t.jQueryInterface,e.fn[s].Constructor=t,e.fn[s].noConflict=()=>(e.fn[s]=i,t.jQueryInterface)}},"loading"===document.readyState?(b.length||document.addEventListener("DOMContentLoaded",()=>{b.forEach(t=>t())}),b.push(e)):e()},w=t=>{"function"==typeof t&&t()},E=(t,e,s=!0)=>{if(!s)return void w(t);const i=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:s}=window.getComputedStyle(t);const i=Number.parseFloat(e),n=Number.parseFloat(s);return i||n?(e=e.split(",")[0],s=s.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(s))):0})(e)+5;let n=!1;const o=({target:s})=>{s===e&&(n=!0,e.removeEventListener("transitionend",o),w(t))};e.addEventListener("transitionend",o),setTimeout(()=>{n||l(e)},i)},A=(t,e,s,i)=>{let n=t.indexOf(e);if(-1===n)return t[!s&&i?t.length-1:0];const o=t.length;return n+=s?1:-1,i&&(n=(n+o)%o),t[Math.max(0,Math.min(n,o-1))]},T=/[^.]*(?=\..*)\.|.*/,C=/\..*/,k=/::\d+$/,L={};let O=1;const D={mouseenter:"mouseover",mouseleave:"mouseout"},I=/^(mouseenter|mouseleave)/i,N=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function S(t,e){return e&&`${e}::${O++}`||t.uidEvent||O++}function x(t){const e=S(t);return t.uidEvent=e,L[e]=L[e]||{},L[e]}function M(t,e,s=null){const i=Object.keys(t);for(let n=0,o=i.length;nfunction(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};i?i=t(i):s=t(s)}const[o,r,a]=P(e,s,i),l=x(t),c=l[a]||(l[a]={}),h=M(c,r,o?s:null);if(h)return void(h.oneOff=h.oneOff&&n);const d=S(r,e.replace(T,"")),u=o?function(t,e,s){return function i(n){const o=t.querySelectorAll(e);for(let{target:r}=n;r&&r!==this;r=r.parentNode)for(let a=o.length;a--;)if(o[a]===r)return n.delegateTarget=r,i.oneOff&&B.off(t,n.type,e,s),s.apply(r,[n]);return null}}(t,s,i):function(t,e){return function s(i){return i.delegateTarget=t,s.oneOff&&B.off(t,i.type,e),e.apply(t,[i])}}(t,s);u.delegationSelector=o?s:null,u.originalHandler=r,u.oneOff=n,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function H(t,e,s,i,n){const o=M(e[s],i,n);o&&(t.removeEventListener(s,o,Boolean(n)),delete e[s][o.uidEvent])}function R(t){return t=t.replace(C,""),D[t]||t}const B={on(t,e,s,i){j(t,e,s,i,!1)},one(t,e,s,i){j(t,e,s,i,!0)},off(t,e,s,i){if("string"!=typeof e||!t)return;const[n,o,r]=P(e,s,i),a=r!==e,l=x(t),c=e.startsWith(".");if(void 0!==o){if(!l||!l[r])return;return void H(t,l,r,o,n?s:null)}c&&Object.keys(l).forEach(s=>{!function(t,e,s,i){const n=e[s]||{};Object.keys(n).forEach(o=>{if(o.includes(i)){const i=n[o];H(t,e,s,i.originalHandler,i.delegationSelector)}})}(t,l,s,e.slice(1))});const h=l[r]||{};Object.keys(h).forEach(s=>{const i=s.replace(k,"");if(!a||e.includes(i)){const e=h[s];H(t,l,r,e.originalHandler,e.delegationSelector)}})},trigger(t,e,s){if("string"!=typeof e||!t)return null;const i=_(),n=R(e),o=e!==n,r=N.has(n);let a,l=!0,c=!0,h=!1,d=null;return o&&i&&(a=i.Event(e,s),i(t).trigger(a),l=!a.isPropagationStopped(),c=!a.isImmediatePropagationStopped(),h=a.isDefaultPrevented()),r?(d=document.createEvent("HTMLEvents"),d.initEvent(n,l,!0)):d=new CustomEvent(e,{bubbles:l,cancelable:!0}),void 0!==s&&Object.keys(s).forEach(t=>{Object.defineProperty(d,t,{get:()=>s[t]})}),h&&d.preventDefault(),c&&t.dispatchEvent(d),d.defaultPrevented&&void 0!==a&&a.preventDefault(),d}},$=new Map;var W={set(t,e,s){$.has(t)||$.set(t,new Map);const i=$.get(t);i.has(e)||0===i.size?i.set(e,s):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(i.keys())[0]}.`)},get:(t,e)=>$.has(t)&&$.get(t).get(e)||null,remove(t,e){if(!$.has(t))return;const s=$.get(t);s.delete(e),0===s.size&&$.delete(t)}};class q{constructor(t){(t=h(t))&&(this._element=t,W.set(this._element,this.constructor.DATA_KEY,this))}dispose(){W.remove(this._element,this.constructor.DATA_KEY),B.off(this._element,this.constructor.EVENT_KEY),Object.getOwnPropertyNames(this).forEach(t=>{this[t]=null})}_queueCallback(t,e,s=!0){E(t,e,s)}static getInstance(t){return W.get(t,this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.0.2"}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}static get DATA_KEY(){return"bs."+this.NAME}static get EVENT_KEY(){return"."+this.DATA_KEY}}class z extends q{static get NAME(){return"alert"}close(t){const e=t?this._getRootElement(t):this._element,s=this._triggerCloseEvent(e);null===s||s.defaultPrevented||this._removeElement(e)}_getRootElement(t){return a(t)||t.closest(".alert")}_triggerCloseEvent(t){return B.trigger(t,"close.bs.alert")}_removeElement(t){t.classList.remove("show");const e=t.classList.contains("fade");this._queueCallback(()=>this._destroyElement(t),t,e)}_destroyElement(t){t.remove(),B.trigger(t,"closed.bs.alert")}static jQueryInterface(t){return this.each((function(){const e=z.getOrCreateInstance(this);"close"===t&&e[t](this)}))}static handleDismiss(t){return function(e){e&&e.preventDefault(),t.close(this)}}}B.on(document,"click.bs.alert.data-api",'[data-bs-dismiss="alert"]',z.handleDismiss(new z)),y(z);class F extends q{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=F.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}function U(t){return"true"===t||"false"!==t&&(t===Number(t).toString()?Number(t):""===t||"null"===t?null:t)}function K(t){return t.replace(/[A-Z]/g,t=>"-"+t.toLowerCase())}B.on(document,"click.bs.button.data-api",'[data-bs-toggle="button"]',t=>{t.preventDefault();const e=t.target.closest('[data-bs-toggle="button"]');F.getOrCreateInstance(e).toggle()}),y(F);const V={setDataAttribute(t,e,s){t.setAttribute("data-bs-"+K(e),s)},removeDataAttribute(t,e){t.removeAttribute("data-bs-"+K(e))},getDataAttributes(t){if(!t)return{};const e={};return Object.keys(t.dataset).filter(t=>t.startsWith("bs")).forEach(s=>{let i=s.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=U(t.dataset[s])}),e},getDataAttribute:(t,e)=>U(t.getAttribute("data-bs-"+K(e))),offset(t){const e=t.getBoundingClientRect();return{top:e.top+document.body.scrollTop,left:e.left+document.body.scrollLeft}},position:t=>({top:t.offsetTop,left:t.offsetLeft})},Q={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"},Y="next",G="prev",Z="left",J="right",tt={ArrowLeft:J,ArrowRight:Z};class et extends q{constructor(t,e){super(t),this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._indicatorsElement=i.findOne(".carousel-indicators",this._element),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent),this._addEventListeners()}static get Default(){return Q}static get NAME(){return"carousel"}next(){this._slide(Y)}nextWhenVisible(){!document.hidden&&u(this._element)&&this.next()}prev(){this._slide(G)}pause(t){t||(this._isPaused=!0),i.findOne(".carousel-item-next, .carousel-item-prev",this._element)&&(l(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}cycle(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config&&this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(t){this._activeElement=i.findOne(".active.carousel-item",this._element);const e=this._getItemIndex(this._activeElement);if(t>this._items.length-1||t<0)return;if(this._isSliding)return void B.one(this._element,"slid.bs.carousel",()=>this.to(t));if(e===t)return this.pause(),void this.cycle();const s=t>e?Y:G;this._slide(s,this._items[t])}_getConfig(t){return t={...Q,...V.getDataAttributes(this._element),..."object"==typeof t?t:{}},d("carousel",t,X),t}_handleSwipe(){const t=Math.abs(this.touchDeltaX);if(t<=40)return;const e=t/this.touchDeltaX;this.touchDeltaX=0,e&&this._slide(e>0?J:Z)}_addEventListeners(){this._config.keyboard&&B.on(this._element,"keydown.bs.carousel",t=>this._keydown(t)),"hover"===this._config.pause&&(B.on(this._element,"mouseenter.bs.carousel",t=>this.pause(t)),B.on(this._element,"mouseleave.bs.carousel",t=>this.cycle(t))),this._config.touch&&this._touchSupported&&this._addTouchEventListeners()}_addTouchEventListeners(){const t=t=>{!this._pointerEvent||"pen"!==t.pointerType&&"touch"!==t.pointerType?this._pointerEvent||(this.touchStartX=t.touches[0].clientX):this.touchStartX=t.clientX},e=t=>{this.touchDeltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this.touchStartX},s=t=>{!this._pointerEvent||"pen"!==t.pointerType&&"touch"!==t.pointerType||(this.touchDeltaX=t.clientX-this.touchStartX),this._handleSwipe(),"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(t=>this.cycle(t),500+this._config.interval))};i.find(".carousel-item img",this._element).forEach(t=>{B.on(t,"dragstart.bs.carousel",t=>t.preventDefault())}),this._pointerEvent?(B.on(this._element,"pointerdown.bs.carousel",e=>t(e)),B.on(this._element,"pointerup.bs.carousel",t=>s(t)),this._element.classList.add("pointer-event")):(B.on(this._element,"touchstart.bs.carousel",e=>t(e)),B.on(this._element,"touchmove.bs.carousel",t=>e(t)),B.on(this._element,"touchend.bs.carousel",t=>s(t)))}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=tt[t.key];e&&(t.preventDefault(),this._slide(e))}_getItemIndex(t){return this._items=t&&t.parentNode?i.find(".carousel-item",t.parentNode):[],this._items.indexOf(t)}_getItemByOrder(t,e){const s=t===Y;return A(this._items,e,s,this._config.wrap)}_triggerSlideEvent(t,e){const s=this._getItemIndex(t),n=this._getItemIndex(i.findOne(".active.carousel-item",this._element));return B.trigger(this._element,"slide.bs.carousel",{relatedTarget:t,direction:e,from:n,to:s})}_setActiveIndicatorElement(t){if(this._indicatorsElement){const e=i.findOne(".active",this._indicatorsElement);e.classList.remove("active"),e.removeAttribute("aria-current");const s=i.find("[data-bs-target]",this._indicatorsElement);for(let e=0;e{B.trigger(this._element,"slid.bs.carousel",{relatedTarget:r,direction:u,from:o,to:a})};if(this._element.classList.contains("slide")){r.classList.add(d),m(r),n.classList.add(h),r.classList.add(h);const t=()=>{r.classList.remove(h,d),r.classList.add("active"),n.classList.remove("active",d,h),this._isSliding=!1,setTimeout(g,0)};this._queueCallback(t,n,!0)}else n.classList.remove("active"),r.classList.add("active"),this._isSliding=!1,g();l&&this.cycle()}_directionToOrder(t){return[J,Z].includes(t)?v()?t===Z?G:Y:t===Z?Y:G:t}_orderToDirection(t){return[Y,G].includes(t)?v()?t===G?Z:J:t===G?J:Z:t}static carouselInterface(t,e){const s=et.getOrCreateInstance(t,e);let{_config:i}=s;"object"==typeof e&&(i={...i,...e});const n="string"==typeof e?e:i.slide;if("number"==typeof e)s.to(e);else if("string"==typeof n){if(void 0===s[n])throw new TypeError(`No method named "${n}"`);s[n]()}else i.interval&&i.ride&&(s.pause(),s.cycle())}static jQueryInterface(t){return this.each((function(){et.carouselInterface(this,t)}))}static dataApiClickHandler(t){const e=a(this);if(!e||!e.classList.contains("carousel"))return;const s={...V.getDataAttributes(e),...V.getDataAttributes(this)},i=this.getAttribute("data-bs-slide-to");i&&(s.interval=!1),et.carouselInterface(e,s),i&&et.getInstance(e).to(i),t.preventDefault()}}B.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",et.dataApiClickHandler),B.on(window,"load.bs.carousel.data-api",()=>{const t=i.find('[data-bs-ride="carousel"]');for(let e=0,s=t.length;et===this._element);null!==n&&o.length&&(this._selector=n,this._triggerArray.push(e))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}static get Default(){return st}static get NAME(){return"collapse"}toggle(){this._element.classList.contains("show")?this.hide():this.show()}show(){if(this._isTransitioning||this._element.classList.contains("show"))return;let t,e;this._parent&&(t=i.find(".show, .collapsing",this._parent).filter(t=>"string"==typeof this._config.parent?t.getAttribute("data-bs-parent")===this._config.parent:t.classList.contains("collapse")),0===t.length&&(t=null));const s=i.findOne(this._selector);if(t){const i=t.find(t=>s!==t);if(e=i?nt.getInstance(i):null,e&&e._isTransitioning)return}if(B.trigger(this._element,"show.bs.collapse").defaultPrevented)return;t&&t.forEach(t=>{s!==t&&nt.collapseInterface(t,"hide"),e||W.set(t,"bs.collapse",null)});const n=this._getDimension();this._element.classList.remove("collapse"),this._element.classList.add("collapsing"),this._element.style[n]=0,this._triggerArray.length&&this._triggerArray.forEach(t=>{t.classList.remove("collapsed"),t.setAttribute("aria-expanded",!0)}),this.setTransitioning(!0);const o="scroll"+(n[0].toUpperCase()+n.slice(1));this._queueCallback(()=>{this._element.classList.remove("collapsing"),this._element.classList.add("collapse","show"),this._element.style[n]="",this.setTransitioning(!1),B.trigger(this._element,"shown.bs.collapse")},this._element,!0),this._element.style[n]=this._element[o]+"px"}hide(){if(this._isTransitioning||!this._element.classList.contains("show"))return;if(B.trigger(this._element,"hide.bs.collapse").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=this._element.getBoundingClientRect()[t]+"px",m(this._element),this._element.classList.add("collapsing"),this._element.classList.remove("collapse","show");const e=this._triggerArray.length;if(e>0)for(let t=0;t{this.setTransitioning(!1),this._element.classList.remove("collapsing"),this._element.classList.add("collapse"),B.trigger(this._element,"hidden.bs.collapse")},this._element,!0)}setTransitioning(t){this._isTransitioning=t}_getConfig(t){return(t={...st,...t}).toggle=Boolean(t.toggle),d("collapse",t,it),t}_getDimension(){return this._element.classList.contains("width")?"width":"height"}_getParent(){let{parent:t}=this._config;t=h(t);const e=`[data-bs-toggle="collapse"][data-bs-parent="${t}"]`;return i.find(e,t).forEach(t=>{const e=a(t);this._addAriaAndCollapsedClass(e,[t])}),t}_addAriaAndCollapsedClass(t,e){if(!t||!e.length)return;const s=t.classList.contains("show");e.forEach(t=>{s?t.classList.remove("collapsed"):t.classList.add("collapsed"),t.setAttribute("aria-expanded",s)})}static collapseInterface(t,e){let s=nt.getInstance(t);const i={...st,...V.getDataAttributes(t),..."object"==typeof e&&e?e:{}};if(!s&&i.toggle&&"string"==typeof e&&/show|hide/.test(e)&&(i.toggle=!1),s||(s=new nt(t,i)),"string"==typeof e){if(void 0===s[e])throw new TypeError(`No method named "${e}"`);s[e]()}}static jQueryInterface(t){return this.each((function(){nt.collapseInterface(this,t)}))}}B.on(document,"click.bs.collapse.data-api",'[data-bs-toggle="collapse"]',(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();const e=V.getDataAttributes(this),s=r(this);i.find(s).forEach(t=>{const s=nt.getInstance(t);let i;s?(null===s._parent&&"string"==typeof e.parent&&(s._config.parent=e.parent,s._parent=s._getParent()),i="toggle"):i=e,nt.collapseInterface(t,i)})})),y(nt);const ot=new RegExp("ArrowUp|ArrowDown|Escape"),rt=v()?"top-end":"top-start",at=v()?"top-start":"top-end",lt=v()?"bottom-end":"bottom-start",ct=v()?"bottom-start":"bottom-end",ht=v()?"left-start":"right-start",dt=v()?"right-start":"left-start",ut={offset:[0,2],boundary:"clippingParents",reference:"toggle",display:"dynamic",popperConfig:null,autoClose:!0},gt={offset:"(array|string|function)",boundary:"(string|element)",reference:"(string|element|object)",display:"string",popperConfig:"(null|object|function)",autoClose:"(boolean|string)"};class pt extends q{constructor(t,e){super(t),this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}static get Default(){return ut}static get DefaultType(){return gt}static get NAME(){return"dropdown"}toggle(){g(this._element)||(this._element.classList.contains("show")?this.hide():this.show())}show(){if(g(this._element)||this._menu.classList.contains("show"))return;const t=pt.getParentFromElement(this._element),e={relatedTarget:this._element};if(!B.trigger(this._element,"show.bs.dropdown",e).defaultPrevented){if(this._inNavbar)V.setDataAttribute(this._menu,"popper","none");else{if(void 0===s)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;"parent"===this._config.reference?e=t:c(this._config.reference)?e=h(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const i=this._getPopperConfig(),n=i.modifiers.find(t=>"applyStyles"===t.name&&!1===t.enabled);this._popper=s.createPopper(e,this._menu,i),n&&V.setDataAttribute(this._menu,"popper","static")}"ontouchstart"in document.documentElement&&!t.closest(".navbar-nav")&&[].concat(...document.body.children).forEach(t=>B.on(t,"mouseover",f)),this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.toggle("show"),this._element.classList.toggle("show"),B.trigger(this._element,"shown.bs.dropdown",e)}}hide(){if(g(this._element)||!this._menu.classList.contains("show"))return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_addEventListeners(){B.on(this._element,"click.bs.dropdown",t=>{t.preventDefault(),this.toggle()})}_completeHide(t){B.trigger(this._element,"hide.bs.dropdown",t).defaultPrevented||("ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach(t=>B.off(t,"mouseover",f)),this._popper&&this._popper.destroy(),this._menu.classList.remove("show"),this._element.classList.remove("show"),this._element.setAttribute("aria-expanded","false"),V.removeDataAttribute(this._menu,"popper"),B.trigger(this._element,"hidden.bs.dropdown",t))}_getConfig(t){if(t={...this.constructor.Default,...V.getDataAttributes(this._element),...t},d("dropdown",t,this.constructor.DefaultType),"object"==typeof t.reference&&!c(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError("dropdown".toUpperCase()+': Option "reference" provided type "object" without a required "getBoundingClientRect" method.');return t}_getMenuElement(){return i.next(this._element,".dropdown-menu")[0]}_getPlacement(){const t=this._element.parentNode;if(t.classList.contains("dropend"))return ht;if(t.classList.contains("dropstart"))return dt;const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?at:rt:e?ct:lt}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map(t=>Number.parseInt(t,10)):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return"static"===this._config.display&&(t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const s=i.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(u);s.length&&A(s,e,"ArrowDown"===t,!s.includes(e)).focus()}static dropdownInterface(t,e){const s=pt.getOrCreateInstance(t,e);if("string"==typeof e){if(void 0===s[e])throw new TypeError(`No method named "${e}"`);s[e]()}}static jQueryInterface(t){return this.each((function(){pt.dropdownInterface(this,t)}))}static clearMenus(t){if(t&&(2===t.button||"keyup"===t.type&&"Tab"!==t.key))return;const e=i.find('[data-bs-toggle="dropdown"]');for(let s=0,i=e.length;sthis.matches('[data-bs-toggle="dropdown"]')?this:i.prev(this,'[data-bs-toggle="dropdown"]')[0];return"Escape"===t.key?(s().focus(),void pt.clearMenus()):"ArrowUp"===t.key||"ArrowDown"===t.key?(e||s().click(),void pt.getInstance(s())._selectMenuItem(t)):void(e&&"Space"!==t.key||pt.clearMenus())}}B.on(document,"keydown.bs.dropdown.data-api",'[data-bs-toggle="dropdown"]',pt.dataApiKeydownHandler),B.on(document,"keydown.bs.dropdown.data-api",".dropdown-menu",pt.dataApiKeydownHandler),B.on(document,"click.bs.dropdown.data-api",pt.clearMenus),B.on(document,"keyup.bs.dropdown.data-api",pt.clearMenus),B.on(document,"click.bs.dropdown.data-api",'[data-bs-toggle="dropdown"]',(function(t){t.preventDefault(),pt.dropdownInterface(this)})),y(pt);class ft{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,"paddingRight",e=>e+t),this._setElementAttributes(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top","paddingRight",e=>e+t),this._setElementAttributes(".sticky-top","marginRight",e=>e-t)}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,s){const i=this.getWidth();this._applyManipulationCallback(t,t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+i)return;this._saveInitialAttribute(t,e);const n=window.getComputedStyle(t)[e];t.style[e]=s(Number.parseFloat(n))+"px"})}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,"paddingRight"),this._resetElementAttributes(".fixed-top, .fixed-bottom, .is-fixed, .sticky-top","paddingRight"),this._resetElementAttributes(".sticky-top","marginRight")}_saveInitialAttribute(t,e){const s=t.style[e];s&&V.setDataAttribute(t,e,s)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,t=>{const s=V.getDataAttribute(t,e);void 0===s?t.style.removeProperty(e):(V.removeDataAttribute(t,e),t.style[e]=s)})}_applyManipulationCallback(t,e){c(t)?e(t):i.find(t,this._element).forEach(e)}isOverflowing(){return this.getWidth()>0}}const mt={isVisible:!0,isAnimated:!1,rootElement:"body",clickCallback:null},_t={isVisible:"boolean",isAnimated:"boolean",rootElement:"(element|string)",clickCallback:"(function|null)"};class bt{constructor(t){this._config=this._getConfig(t),this._isAppended=!1,this._element=null}show(t){this._config.isVisible?(this._append(),this._config.isAnimated&&m(this._getElement()),this._getElement().classList.add("show"),this._emulateAnimation(()=>{w(t)})):w(t)}hide(t){this._config.isVisible?(this._getElement().classList.remove("show"),this._emulateAnimation(()=>{this.dispose(),w(t)})):w(t)}_getElement(){if(!this._element){const t=document.createElement("div");t.className="modal-backdrop",this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_getConfig(t){return(t={...mt,..."object"==typeof t?t:{}}).rootElement=h(t.rootElement),d("backdrop",t,_t),t}_append(){this._isAppended||(this._config.rootElement.appendChild(this._getElement()),B.on(this._getElement(),"mousedown.bs.backdrop",()=>{w(this._config.clickCallback)}),this._isAppended=!0)}dispose(){this._isAppended&&(B.off(this._element,"mousedown.bs.backdrop"),this._element.remove(),this._isAppended=!1)}_emulateAnimation(t){E(t,this._getElement(),this._config.isAnimated)}}const vt={backdrop:!0,keyboard:!0,focus:!0},yt={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean"};class wt extends q{constructor(t,e){super(t),this._config=this._getConfig(e),this._dialog=i.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._isShown=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollBar=new ft}static get Default(){return vt}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||B.trigger(this._element,"show.bs.modal",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isAnimated()&&(this._isTransitioning=!0),this._scrollBar.hide(),document.body.classList.add("modal-open"),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),B.on(this._element,"click.dismiss.bs.modal",'[data-bs-dismiss="modal"]',t=>this.hide(t)),B.on(this._dialog,"mousedown.dismiss.bs.modal",()=>{B.one(this._element,"mouseup.dismiss.bs.modal",t=>{t.target===this._element&&(this._ignoreBackdropClick=!0)})}),this._showBackdrop(()=>this._showElement(t)))}hide(t){if(t&&["A","AREA"].includes(t.target.tagName)&&t.preventDefault(),!this._isShown||this._isTransitioning)return;if(B.trigger(this._element,"hide.bs.modal").defaultPrevented)return;this._isShown=!1;const e=this._isAnimated();e&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),B.off(document,"focusin.bs.modal"),this._element.classList.remove("show"),B.off(this._element,"click.dismiss.bs.modal"),B.off(this._dialog,"mousedown.dismiss.bs.modal"),this._queueCallback(()=>this._hideModal(),this._element,e)}dispose(){[window,this._dialog].forEach(t=>B.off(t,".bs.modal")),this._backdrop.dispose(),super.dispose(),B.off(document,"focusin.bs.modal")}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new bt({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_getConfig(t){return t={...vt,...V.getDataAttributes(this._element),..."object"==typeof t?t:{}},d("modal",t,yt),t}_showElement(t){const e=this._isAnimated(),s=i.findOne(".modal-body",this._dialog);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.setAttribute("role","dialog"),this._element.scrollTop=0,s&&(s.scrollTop=0),e&&m(this._element),this._element.classList.add("show"),this._config.focus&&this._enforceFocus(),this._queueCallback(()=>{this._config.focus&&this._element.focus(),this._isTransitioning=!1,B.trigger(this._element,"shown.bs.modal",{relatedTarget:t})},this._dialog,e)}_enforceFocus(){B.off(document,"focusin.bs.modal"),B.on(document,"focusin.bs.modal",t=>{document===t.target||this._element===t.target||this._element.contains(t.target)||this._element.focus()})}_setEscapeEvent(){this._isShown?B.on(this._element,"keydown.dismiss.bs.modal",t=>{this._config.keyboard&&"Escape"===t.key?(t.preventDefault(),this.hide()):this._config.keyboard||"Escape"!==t.key||this._triggerBackdropTransition()}):B.off(this._element,"keydown.dismiss.bs.modal")}_setResizeEvent(){this._isShown?B.on(window,"resize.bs.modal",()=>this._adjustDialog()):B.off(window,"resize.bs.modal")}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove("modal-open"),this._resetAdjustments(),this._scrollBar.reset(),B.trigger(this._element,"hidden.bs.modal")})}_showBackdrop(t){B.on(this._element,"click.dismiss.bs.modal",t=>{this._ignoreBackdropClick?this._ignoreBackdropClick=!1:t.target===t.currentTarget&&(!0===this._config.backdrop?this.hide():"static"===this._config.backdrop&&this._triggerBackdropTransition())}),this._backdrop.show(t)}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(B.trigger(this._element,"hidePrevented.bs.modal").defaultPrevented)return;const{classList:t,scrollHeight:e,style:s}=this._element,i=e>document.documentElement.clientHeight;!i&&"hidden"===s.overflowY||t.contains("modal-static")||(i||(s.overflowY="hidden"),t.add("modal-static"),this._queueCallback(()=>{t.remove("modal-static"),i||this._queueCallback(()=>{s.overflowY=""},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),s=e>0;(!s&&t&&!v()||s&&!t&&v())&&(this._element.style.paddingLeft=e+"px"),(s&&!t&&!v()||!s&&t&&v())&&(this._element.style.paddingRight=e+"px")}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const s=wt.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===s[t])throw new TypeError(`No method named "${t}"`);s[t](e)}}))}}B.on(document,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',(function(t){const e=a(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),B.one(e,"show.bs.modal",t=>{t.defaultPrevented||B.one(e,"hidden.bs.modal",()=>{u(this)&&this.focus()})}),wt.getOrCreateInstance(e).toggle(this)})),y(wt);const Et={backdrop:!0,keyboard:!0,scroll:!1},At={backdrop:"boolean",keyboard:"boolean",scroll:"boolean"};class Tt extends q{constructor(t,e){super(t),this._config=this._getConfig(e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._addEventListeners()}static get NAME(){return"offcanvas"}static get Default(){return Et}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||B.trigger(this._element,"show.bs.offcanvas",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._element.style.visibility="visible",this._backdrop.show(),this._config.scroll||((new ft).hide(),this._enforceFocusOnElement(this._element)),this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add("show"),this._queueCallback(()=>{B.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:t})},this._element,!0))}hide(){this._isShown&&(B.trigger(this._element,"hide.bs.offcanvas").defaultPrevented||(B.off(document,"focusin.bs.offcanvas"),this._element.blur(),this._isShown=!1,this._element.classList.remove("show"),this._backdrop.hide(),this._queueCallback(()=>{this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._element.style.visibility="hidden",this._config.scroll||(new ft).reset(),B.trigger(this._element,"hidden.bs.offcanvas")},this._element,!0)))}dispose(){this._backdrop.dispose(),super.dispose(),B.off(document,"focusin.bs.offcanvas")}_getConfig(t){return t={...Et,...V.getDataAttributes(this._element),..."object"==typeof t?t:{}},d("offcanvas",t,At),t}_initializeBackDrop(){return new bt({isVisible:this._config.backdrop,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:()=>this.hide()})}_enforceFocusOnElement(t){B.off(document,"focusin.bs.offcanvas"),B.on(document,"focusin.bs.offcanvas",e=>{document===e.target||t===e.target||t.contains(e.target)||t.focus()}),t.focus()}_addEventListeners(){B.on(this._element,"click.dismiss.bs.offcanvas",'[data-bs-dismiss="offcanvas"]',()=>this.hide()),B.on(this._element,"keydown.dismiss.bs.offcanvas",t=>{this._config.keyboard&&"Escape"===t.key&&this.hide()})}static jQueryInterface(t){return this.each((function(){const e=Tt.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}B.on(document,"click.bs.offcanvas.data-api",'[data-bs-toggle="offcanvas"]',(function(t){const e=a(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),g(this))return;B.one(e,"hidden.bs.offcanvas",()=>{u(this)&&this.focus()});const s=i.findOne(".offcanvas.show");s&&s!==e&&Tt.getInstance(s).hide(),Tt.getOrCreateInstance(e).toggle(this)})),B.on(window,"load.bs.offcanvas.data-api",()=>i.find(".offcanvas.show").forEach(t=>Tt.getOrCreateInstance(t).show())),y(Tt);const Ct=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),kt=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i,Lt=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,Ot=(t,e)=>{const s=t.nodeName.toLowerCase();if(e.includes(s))return!Ct.has(s)||Boolean(kt.test(t.nodeValue)||Lt.test(t.nodeValue));const i=e.filter(t=>t instanceof RegExp);for(let t=0,e=i.length;t{Ot(t,a)||s.removeAttribute(t.nodeName)})}return i.body.innerHTML}const It=new RegExp("(^|\\s)bs-tooltip\\S+","g"),Nt=new Set(["sanitize","allowList","sanitizeFn"]),St={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(array|string|function)",container:"(string|element|boolean)",fallbackPlacements:"array",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",allowList:"object",popperConfig:"(null|object|function)"},xt={AUTO:"auto",TOP:"top",RIGHT:v()?"left":"right",BOTTOM:"bottom",LEFT:v()?"right":"left"},Mt={animation:!0,template:'',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:[0,0],container:!1,fallbackPlacements:["top","right","bottom","left"],boundary:"clippingParents",customClass:"",sanitize:!0,sanitizeFn:null,allowList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},Pt={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"};class jt extends q{constructor(t,e){if(void 0===s)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t),this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this._config=this._getConfig(e),this.tip=null,this._setListeners()}static get Default(){return Mt}static get NAME(){return"tooltip"}static get Event(){return Pt}static get DefaultType(){return St}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(t){if(this._isEnabled)if(t){const e=this._initializeOnDelegatedTarget(t);e._activeTrigger.click=!e._activeTrigger.click,e._isWithActiveTrigger()?e._enter(null,e):e._leave(null,e)}else{if(this.getTipElement().classList.contains("show"))return void this._leave(null,this);this._enter(null,this)}}dispose(){clearTimeout(this._timeout),B.off(this._element.closest(".modal"),"hide.bs.modal",this._hideModalHandler),this.tip&&this.tip.remove(),this._popper&&this._popper.destroy(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this.isWithContent()||!this._isEnabled)return;const t=B.trigger(this._element,this.constructor.Event.SHOW),e=p(this._element),i=null===e?this._element.ownerDocument.documentElement.contains(this._element):e.contains(this._element);if(t.defaultPrevented||!i)return;const o=this.getTipElement(),r=n(this.constructor.NAME);o.setAttribute("id",r),this._element.setAttribute("aria-describedby",r),this.setContent(),this._config.animation&&o.classList.add("fade");const a="function"==typeof this._config.placement?this._config.placement.call(this,o,this._element):this._config.placement,l=this._getAttachment(a);this._addAttachmentClass(l);const{container:c}=this._config;W.set(o,this.constructor.DATA_KEY,this),this._element.ownerDocument.documentElement.contains(this.tip)||(c.appendChild(o),B.trigger(this._element,this.constructor.Event.INSERTED)),this._popper?this._popper.update():this._popper=s.createPopper(this._element,o,this._getPopperConfig(l)),o.classList.add("show");const h="function"==typeof this._config.customClass?this._config.customClass():this._config.customClass;h&&o.classList.add(...h.split(" ")),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach(t=>{B.on(t,"mouseover",f)});const d=this.tip.classList.contains("fade");this._queueCallback(()=>{const t=this._hoverState;this._hoverState=null,B.trigger(this._element,this.constructor.Event.SHOWN),"out"===t&&this._leave(null,this)},this.tip,d)}hide(){if(!this._popper)return;const t=this.getTipElement();if(B.trigger(this._element,this.constructor.Event.HIDE).defaultPrevented)return;t.classList.remove("show"),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach(t=>B.off(t,"mouseover",f)),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1;const e=this.tip.classList.contains("fade");this._queueCallback(()=>{this._isWithActiveTrigger()||("show"!==this._hoverState&&t.remove(),this._cleanTipClass(),this._element.removeAttribute("aria-describedby"),B.trigger(this._element,this.constructor.Event.HIDDEN),this._popper&&(this._popper.destroy(),this._popper=null))},this.tip,e),this._hoverState=""}update(){null!==this._popper&&this._popper.update()}isWithContent(){return Boolean(this.getTitle())}getTipElement(){if(this.tip)return this.tip;const t=document.createElement("div");return t.innerHTML=this._config.template,this.tip=t.children[0],this.tip}setContent(){const t=this.getTipElement();this.setElementContent(i.findOne(".tooltip-inner",t),this.getTitle()),t.classList.remove("fade","show")}setElementContent(t,e){if(null!==t)return c(e)?(e=h(e),void(this._config.html?e.parentNode!==t&&(t.innerHTML="",t.appendChild(e)):t.textContent=e.textContent)):void(this._config.html?(this._config.sanitize&&(e=Dt(e,this._config.allowList,this._config.sanitizeFn)),t.innerHTML=e):t.textContent=e)}getTitle(){let t=this._element.getAttribute("data-bs-original-title");return t||(t="function"==typeof this._config.title?this._config.title.call(this._element):this._config.title),t}updateAttachment(t){return"right"===t?"end":"left"===t?"start":t}_initializeOnDelegatedTarget(t,e){const s=this.constructor.DATA_KEY;return(e=e||W.get(t.delegateTarget,s))||(e=new this.constructor(t.delegateTarget,this._getDelegateConfig()),W.set(t.delegateTarget,s,e)),e}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map(t=>Number.parseInt(t,10)):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"onChange",enabled:!0,phase:"afterWrite",fn:t=>this._handlePopperPlacementChange(t)}],onFirstUpdate:t=>{t.options.placement!==t.placement&&this._handlePopperPlacementChange(t)}};return{...e,..."function"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_addAttachmentClass(t){this.getTipElement().classList.add("bs-tooltip-"+this.updateAttachment(t))}_getAttachment(t){return xt[t.toUpperCase()]}_setListeners(){this._config.trigger.split(" ").forEach(t=>{if("click"===t)B.on(this._element,this.constructor.Event.CLICK,this._config.selector,t=>this.toggle(t));else if("manual"!==t){const e="hover"===t?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,s="hover"===t?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;B.on(this._element,e,this._config.selector,t=>this._enter(t)),B.on(this._element,s,this._config.selector,t=>this._leave(t))}}),this._hideModalHandler=()=>{this._element&&this.hide()},B.on(this._element.closest(".modal"),"hide.bs.modal",this._hideModalHandler),this._config.selector?this._config={...this._config,trigger:"manual",selector:""}:this._fixTitle()}_fixTitle(){const t=this._element.getAttribute("title"),e=typeof this._element.getAttribute("data-bs-original-title");(t||"string"!==e)&&(this._element.setAttribute("data-bs-original-title",t||""),!t||this._element.getAttribute("aria-label")||this._element.textContent||this._element.setAttribute("aria-label",t),this._element.setAttribute("title",""))}_enter(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusin"===t.type?"focus":"hover"]=!0),e.getTipElement().classList.contains("show")||"show"===e._hoverState?e._hoverState="show":(clearTimeout(e._timeout),e._hoverState="show",e._config.delay&&e._config.delay.show?e._timeout=setTimeout(()=>{"show"===e._hoverState&&e.show()},e._config.delay.show):e.show())}_leave(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusout"===t.type?"focus":"hover"]=e._element.contains(t.relatedTarget)),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState="out",e._config.delay&&e._config.delay.hide?e._timeout=setTimeout(()=>{"out"===e._hoverState&&e.hide()},e._config.delay.hide):e.hide())}_isWithActiveTrigger(){for(const t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1}_getConfig(t){const e=V.getDataAttributes(this._element);return Object.keys(e).forEach(t=>{Nt.has(t)&&delete e[t]}),(t={...this.constructor.Default,...e,..."object"==typeof t&&t?t:{}}).container=!1===t.container?document.body:h(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),d("tooltip",t,this.constructor.DefaultType),t.sanitize&&(t.template=Dt(t.template,t.allowList,t.sanitizeFn)),t}_getDelegateConfig(){const t={};if(this._config)for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t}_cleanTipClass(){const t=this.getTipElement(),e=t.getAttribute("class").match(It);null!==e&&e.length>0&&e.map(t=>t.trim()).forEach(e=>t.classList.remove(e))}_handlePopperPlacementChange(t){const{state:e}=t;e&&(this.tip=e.elements.popper,this._cleanTipClass(),this._addAttachmentClass(this._getAttachment(e.placement)))}static jQueryInterface(t){return this.each((function(){const e=jt.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}y(jt);const Ht=new RegExp("(^|\\s)bs-popover\\S+","g"),Rt={...jt.Default,placement:"right",offset:[0,8],trigger:"click",content:"",template:''},Bt={...jt.DefaultType,content:"(string|element|function)"},$t={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"};class Wt extends jt{static get Default(){return Rt}static get NAME(){return"popover"}static get Event(){return $t}static get DefaultType(){return Bt}isWithContent(){return this.getTitle()||this._getContent()}getTipElement(){return this.tip||(this.tip=super.getTipElement(),this.getTitle()||i.findOne(".popover-header",this.tip).remove(),this._getContent()||i.findOne(".popover-body",this.tip).remove()),this.tip}setContent(){const t=this.getTipElement();this.setElementContent(i.findOne(".popover-header",t),this.getTitle());let e=this._getContent();"function"==typeof e&&(e=e.call(this._element)),this.setElementContent(i.findOne(".popover-body",t),e),t.classList.remove("fade","show")}_addAttachmentClass(t){this.getTipElement().classList.add("bs-popover-"+this.updateAttachment(t))}_getContent(){return this._element.getAttribute("data-bs-content")||this._config.content}_cleanTipClass(){const t=this.getTipElement(),e=t.getAttribute("class").match(Ht);null!==e&&e.length>0&&e.map(t=>t.trim()).forEach(e=>t.classList.remove(e))}static jQueryInterface(t){return this.each((function(){const e=Wt.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}y(Wt);const qt={offset:10,method:"auto",target:""},zt={offset:"number",method:"string",target:"(string|element)"};class Ft extends q{constructor(t,e){super(t),this._scrollElement="BODY"===this._element.tagName?window:this._element,this._config=this._getConfig(e),this._selector=`${this._config.target} .nav-link, ${this._config.target} .list-group-item, ${this._config.target} .dropdown-item`,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,B.on(this._scrollElement,"scroll.bs.scrollspy",()=>this._process()),this.refresh(),this._process()}static get Default(){return qt}static get NAME(){return"scrollspy"}refresh(){const t=this._scrollElement===this._scrollElement.window?"offset":"position",e="auto"===this._config.method?t:this._config.method,s="position"===e?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),i.find(this._selector).map(t=>{const n=r(t),o=n?i.findOne(n):null;if(o){const t=o.getBoundingClientRect();if(t.width||t.height)return[V[e](o).top+s,n]}return null}).filter(t=>t).sort((t,e)=>t[0]-e[0]).forEach(t=>{this._offsets.push(t[0]),this._targets.push(t[1])})}dispose(){B.off(this._scrollElement,".bs.scrollspy"),super.dispose()}_getConfig(t){if("string"!=typeof(t={...qt,...V.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}}).target&&c(t.target)){let{id:e}=t.target;e||(e=n("scrollspy"),t.target.id=e),t.target="#"+e}return d("scrollspy",t,zt),t}_getScrollTop(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),s=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=s){const t=this._targets[this._targets.length-1];this._activeTarget!==t&&this._activate(t)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(let e=this._offsets.length;e--;)this._activeTarget!==this._targets[e]&&t>=this._offsets[e]&&(void 0===this._offsets[e+1]||t`${e}[data-bs-target="${t}"],${e}[href="${t}"]`),s=i.findOne(e.join(","));s.classList.contains("dropdown-item")?(i.findOne(".dropdown-toggle",s.closest(".dropdown")).classList.add("active"),s.classList.add("active")):(s.classList.add("active"),i.parents(s,".nav, .list-group").forEach(t=>{i.prev(t,".nav-link, .list-group-item").forEach(t=>t.classList.add("active")),i.prev(t,".nav-item").forEach(t=>{i.children(t,".nav-link").forEach(t=>t.classList.add("active"))})})),B.trigger(this._scrollElement,"activate.bs.scrollspy",{relatedTarget:t})}_clear(){i.find(this._selector).filter(t=>t.classList.contains("active")).forEach(t=>t.classList.remove("active"))}static jQueryInterface(t){return this.each((function(){const e=Ft.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}B.on(window,"load.bs.scrollspy.data-api",()=>{i.find('[data-bs-spy="scroll"]').forEach(t=>new Ft(t))}),y(Ft);class Ut extends q{static get NAME(){return"tab"}show(){if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&this._element.classList.contains("active"))return;let t;const e=a(this._element),s=this._element.closest(".nav, .list-group");if(s){const e="UL"===s.nodeName||"OL"===s.nodeName?":scope > li > .active":".active";t=i.find(e,s),t=t[t.length-1]}const n=t?B.trigger(t,"hide.bs.tab",{relatedTarget:this._element}):null;if(B.trigger(this._element,"show.bs.tab",{relatedTarget:t}).defaultPrevented||null!==n&&n.defaultPrevented)return;this._activate(this._element,s);const o=()=>{B.trigger(t,"hidden.bs.tab",{relatedTarget:this._element}),B.trigger(this._element,"shown.bs.tab",{relatedTarget:t})};e?this._activate(e,e.parentNode,o):o()}_activate(t,e,s){const n=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?i.children(e,".active"):i.find(":scope > li > .active",e))[0],o=s&&n&&n.classList.contains("fade"),r=()=>this._transitionComplete(t,n,s);n&&o?(n.classList.remove("show"),this._queueCallback(r,t,!0)):r()}_transitionComplete(t,e,s){if(e){e.classList.remove("active");const t=i.findOne(":scope > .dropdown-menu .active",e.parentNode);t&&t.classList.remove("active"),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}t.classList.add("active"),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),m(t),t.classList.contains("fade")&&t.classList.add("show");let n=t.parentNode;if(n&&"LI"===n.nodeName&&(n=n.parentNode),n&&n.classList.contains("dropdown-menu")){const e=t.closest(".dropdown");e&&i.find(".dropdown-toggle",e).forEach(t=>t.classList.add("active")),t.setAttribute("aria-expanded",!0)}s&&s()}static jQueryInterface(t){return this.each((function(){const e=Ut.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}B.on(document,"click.bs.tab.data-api",'[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),g(this)||Ut.getOrCreateInstance(this).show()})),y(Ut);const Kt={animation:"boolean",autohide:"boolean",delay:"number"},Vt={animation:!0,autohide:!0,delay:5e3};class Qt extends q{constructor(t,e){super(t),this._config=this._getConfig(e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get DefaultType(){return Kt}static get Default(){return Vt}static get NAME(){return"toast"}show(){B.trigger(this._element,"show.bs.toast").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove("hide"),m(this._element),this._element.classList.add("showing"),this._queueCallback(()=>{this._element.classList.remove("showing"),this._element.classList.add("show"),B.trigger(this._element,"shown.bs.toast"),this._maybeScheduleHide()},this._element,this._config.animation))}hide(){this._element.classList.contains("show")&&(B.trigger(this._element,"hide.bs.toast").defaultPrevented||(this._element.classList.remove("show"),this._queueCallback(()=>{this._element.classList.add("hide"),B.trigger(this._element,"hidden.bs.toast")},this._element,this._config.animation)))}dispose(){this._clearTimeout(),this._element.classList.contains("show")&&this._element.classList.remove("show"),super.dispose()}_getConfig(t){return t={...Vt,...V.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}},d("toast",t,this.constructor.DefaultType),t}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const s=t.relatedTarget;this._element===s||this._element.contains(s)||this._maybeScheduleHide()}_setListeners(){B.on(this._element,"click.dismiss.bs.toast",'[data-bs-dismiss="toast"]',()=>this.hide()),B.on(this._element,"mouseover.bs.toast",t=>this._onInteraction(t,!0)),B.on(this._element,"mouseout.bs.toast",t=>this._onInteraction(t,!1)),B.on(this._element,"focusin.bs.toast",t=>this._onInteraction(t,!0)),B.on(this._element,"focusout.bs.toast",t=>this._onInteraction(t,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=Qt.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return y(Qt),{Alert:z,Button:F,Carousel:et,Collapse:nt,Dropdown:pt,Modal:wt,Offcanvas:Tt,Popover:Wt,ScrollSpy:Ft,Tab:Ut,Toast:Qt,Tooltip:jt}})); 7 | //# sourceMappingURL=bootstrap.min.js.map -------------------------------------------------------------------------------- /public/js/draw_function.js: -------------------------------------------------------------------------------- 1 | /* jshint esversion: 6 */ 2 | var app = new Vue({ 3 | el: '#app', 4 | data: { 5 | min_x: -5, 6 | max_x: 5, 7 | min_y: -5, 8 | max_y: 5, 9 | func_list: [{ 10 | fnType: "normal_explicit", 11 | fn: "", 12 | fn_polar: "", 13 | parametric_fn_x: "", 14 | parametric_fn_y: "", 15 | parametric_min_t: "", 16 | parametric_max_t: "", 17 | point_x: "", 18 | point_y: "", 19 | // 光标位置 20 | pointer: 0, 21 | color: "" 22 | }] 23 | }, 24 | methods: { 25 | // 函数预处理 26 | pre_process: function (func) { 27 | function mul_process(func) { 28 | // 补全^后面的括号 29 | let tmp_txt = func 30 | 31 | // 哇我的真的服了,IOS不支持正则表达式零宽断言(形如(?<=sin)),会导致所有safri内核的浏览器全部加载异常,例如下面这个零宽断言就要被重写为函数回调形式 32 | // tmp_txt = tmp_txt.replace(/(?<=\^)([0-9]*[a-zA-Zθ]*)/g, "($&)"); 33 | tmp_txt = tmp_txt.replace(/\^([0-9]*[a-zA-Zθ]*)/g, function (word) { 34 | return "^(" + word.substring(1, word.length) + ")"; 35 | }); 36 | return tmp_txt 37 | } 38 | function abs_process(func) { 39 | // 支持绝对值符号 40 | let tmp_txt = func.replace(/\|(.*?)\|/g, "abs($&)"); 41 | func = tmp_txt.replace(/\|/g, ""); 42 | return func 43 | } 44 | function nobrackets_process(func) { 45 | let tmp_txt = func 46 | // 支持所有三角函数不带括号的情况 47 | tmp_txt = tmp_txt.replace(/sin([0-9]*[a-zA-Zθ]+)/g, function (word) { 48 | return "sin(" + word.substring(3, word.length) + ")"; 49 | }); 50 | tmp_txt = tmp_txt.replace(/cos([0-9]*[a-zA-Zθ]+)/g, function (word) { 51 | return "cos(" + word.substring(3, word.length) + ")"; 52 | }); 53 | tmp_txt = tmp_txt.replace(/tan([0-9]*[a-zA-Zθ]+)/g, function (word) { 54 | return "tan(" + word.substring(3, word.length) + ")"; 55 | }); 56 | tmp_txt = tmp_txt.replace(/arccos([0-9]*[a-zA-Zθ]+)/g, function (word) { 57 | return "arccos(" + word.substring(6, word.length) + ")"; 58 | }); 59 | tmp_txt = tmp_txt.replace(/arcsin([0-9]*[a-zA-Zθ]+)/g, function (word) { 60 | return "arcsin(" + word.substring(6, word.length) + ")"; 61 | }); 62 | tmp_txt = tmp_txt.replace(/arctan([0-9]*[a-zA-Zθ]+)/g, function (word) { 63 | return "arctan(" + word.substring(6, word.length) + ")"; 64 | }); 65 | return tmp_txt 66 | } 67 | function pi_process(func) { 68 | // 处理所有的π 69 | let tmp_txt = func 70 | tmp_txt = tmp_txt.replace(/π([a-zA-Zθ]+)/g, function (word) { 71 | return "π*" + word.substring(1, word.length); 72 | }); 73 | tmp_txt = tmp_txt.replace(/π/g, "PI"); 74 | return tmp_txt 75 | } 76 | function theta_process(func) { 77 | // 处理所有的θ 78 | let tmp_txt = func 79 | tmp_txt = tmp_txt.replace(/θ([a-zA-Zθ]+)/g, function (word) { 80 | return "θ*" + word.substring(1, word.length); 81 | }); 82 | tmp_txt = tmp_txt.replace(/θ/g, "theta"); 83 | return tmp_txt 84 | } 85 | function log_process(func) { 86 | // 处理所有的log 87 | let tmp_txt = func 88 | tmp_txt = tmp_txt.replace(/log\([0-9]+\)/g, function (word) { 89 | return "log" + word.substring(4, word.length - 1); 90 | }); 91 | return tmp_txt 92 | } 93 | function exp_process(func) { 94 | // 处理e相关,转换为exp()函数 95 | let tmp_txt = func 96 | // sin(theta)+cos(theta)+e 97 | tmp_txt = tmp_txt.replace(/exp\(([0-9]*[a-zA-Zθ]*)\)/g, function (word) { // 先替换exp为e 98 | return "e^" + word.substring(3, word.length); 99 | }); 100 | tmp_txt = tmp_txt.replace(/theta/g, "θ"); // 先替换theta为θ 101 | tmp_txt = tmp_txt.replace(/e([a-zA-Zθ]+)/g, function (word) { // 填充后面的* 102 | return "e*" + word.substring(1, word.length); 103 | }); 104 | tmp_txt = tmp_txt.replace(/[0-9]+e/g, function (word) { // 填充前面的* 105 | return word.substring(0, word.length - 1) + "*e"; 106 | }); 107 | tmp_txt = tmp_txt.replace(/e(\^\([0-9]*[a-zA-Zθ]*\))/g, function (word) { // 处理e^kx的情况,当做 EXPRESSION_TMP(kx) 108 | return "EXPRESSION_TMP" + word.substring(2, word.length); 109 | }); 110 | tmp_txt = tmp_txt.replace(/e[^\^]/g, function (word) { // 处理e的其他情况,当做 EXPRESSION_TMP(1) 111 | return "EXPRESSION_TMP(1)" + word.substring(1); 112 | }); 113 | 114 | tmp_txt = tmp_txt.replace(/EXPRESSION_TMP/g, "exp"); // 最终替换为exp 115 | return tmp_txt 116 | } 117 | function arc_process(func, arc_str) { 118 | // 变种括号匹配算法,替换掉反三角函数,转换为普通三角函数的倒数 119 | let arc_left = arc_str + "(" 120 | let arc_right = "" 121 | let stack = [] 122 | tmp_txt = ""; 123 | switch (arc_str) { 124 | case "arccos": 125 | arc_right = "(cos("; 126 | break; 127 | case "arcsin": 128 | arc_right = "(sin("; 129 | break; 130 | case "arctan": 131 | arc_right = "(tan("; 132 | break; 133 | default: 134 | break; 135 | } 136 | for (let i = 0; i < func.length; i++) { 137 | let c = func.charAt(i) 138 | if (c === "(") { 139 | if (i >= 6 && func.slice(i - 6, i + 1) === arc_left) { 140 | tmp_txt = tmp_txt.slice(0, tmp_txt.length - 6) + arc_right 141 | stack.push(arc_left) 142 | } else { 143 | tmp_txt += c 144 | stack.push("(") 145 | } 146 | } else if (c === ")") { 147 | let s = stack.pop() 148 | if (s === "(") { 149 | tmp_txt += ")" 150 | } else { 151 | tmp_txt += "))^(-1)" 152 | } 153 | } else { 154 | tmp_txt += c 155 | } 156 | } 157 | return tmp_txt 158 | } 159 | 160 | // func = "e^x + 3ex + e^2x" 161 | // func = "nthRoot(2, x)" 162 | // func = "sin(θ)+cos(θ)+exp(1)" 163 | // func = "exp(1)" 164 | origin = func 165 | try { 166 | // console.log(func); 167 | // 此处函数的处理顺序很重要,乱序可能会出问题 168 | 169 | // 0. 添加一个空格,便于正则表达式操作 170 | func += " " 171 | 172 | // 1. 替换形如|x|为abs(x),正则表达式懒惰匹配模式 173 | func = abs_process(func) 174 | 175 | // 2. 在^后添加括号 176 | func = mul_process(func) 177 | 178 | // 3. 替换e为exp,且做一些处理 179 | func = exp_process(func) 180 | 181 | // 4. 允许一些常见的没有括号的三角函数,例如cosx,sin3x 182 | func = nobrackets_process(func) 183 | 184 | // 5. 替换形如arccos(x)为(cos(x))^(-1),arctan(x)、arcsin(x)同理 185 | func = arc_process(func, "arccos") 186 | func = arc_process(func, "arcsin") 187 | func = arc_process(func, "arctan") 188 | 189 | // 6,替换π为PI,且做一些处理 190 | func = pi_process(func) 191 | 192 | // 7,替换θ为theta,且做一些处理 193 | func = theta_process(func) 194 | 195 | // 8. 去掉log()()前面的括号 196 | func = log_process(func) 197 | 198 | // 最后去除空格 199 | func = func.trim() 200 | 201 | console.log(func); 202 | 203 | } catch (exception) { 204 | // 说明函数有问题,直接用原函数 205 | func = origin 206 | } 207 | return func 208 | }, 209 | 210 | get_cipher_text_reply: function (key) { 211 | key = escape(key) 212 | // console.log(key); 213 | let c_map = { 214 | "%u6211%u559C%u6B22%u4F60": "%u6211%u4E5F%u559C%u6B22%u4F60", 215 | "%u6211%u7231%u4F60": "%u4E5F%u7231%u4F60", 216 | } 217 | if (key in c_map) { 218 | return unescape(c_map[key]) 219 | } else { 220 | return false 221 | } 222 | }, 223 | 224 | credit_reply: function (ls) { 225 | for (let i = 0; i < ls.length; i++) { 226 | let ele = ls[i]; 227 | let sentence = ""; 228 | switch (ele.fnType) { 229 | case "normal_explicit": sentence = ele.fn; break; 230 | case "normal_implicit": sentence = ele.fn; break; 231 | case "polar": sentence = ele.fn_polar; break; 232 | case "parametric": sentence = ele.parametric_fn_x == "" ? ele.parametric_fn_y : ele.parametric_fn_x; break; 233 | case "point": break; 234 | case "haveparam": break; 235 | case "integral": break; 236 | case "differential": break; 237 | default: break; 238 | } 239 | let reply = this.get_cipher_text_reply(sentence.trim()) 240 | if (reply) { 241 | alert(reply); 242 | return true; 243 | } 244 | } 245 | return false; 246 | }, 247 | 248 | // 绘制函数图像 249 | draw_function: function () { 250 | let data = [] 251 | this.func_list.forEach(ele => { 252 | switch (ele.fnType) { 253 | case "normal_explicit": 254 | data.push({ 255 | fn: this.pre_process(ele.fn), 256 | graphType: 'polyline', 257 | color: ele.color 258 | }) 259 | break; 260 | case "normal_implicit": 261 | data.push({ 262 | fn: this.pre_process(ele.fn), 263 | fnType: "implicit", 264 | color: ele.color 265 | }) 266 | break; 267 | case "polar": 268 | data.push({ 269 | r: this.pre_process(ele.fn_polar), 270 | fnType: "polar", 271 | graphType: 'polyline', 272 | color: ele.color 273 | }) 274 | break; 275 | case "parametric": 276 | data.push({ 277 | x: this.pre_process(ele.parametric_fn_x), 278 | y: this.pre_process(ele.parametric_fn_y), 279 | fnType: "parametric", 280 | range: [ele.parametric_min_t * Math.PI, ele.parametric_max_t * Math.PI], 281 | graphType: "polyline", 282 | color: ele.color 283 | }) 284 | break; 285 | case "point": 286 | data.push({ 287 | points: [ 288 | [ele.point_x, ele.point_y], 289 | ], 290 | fnType: 'points', 291 | graphType: 'scatter', 292 | color: ele.color 293 | }) 294 | break; 295 | case "haveparam": 296 | 297 | break; 298 | case "integral": 299 | 300 | break; 301 | case "differential": 302 | 303 | break; 304 | default: 305 | break; 306 | } 307 | }); 308 | if (this.credit_reply(this.func_list)) { 309 | return 310 | } 311 | try { 312 | plot({ 313 | data: data, 314 | x_range: [this.min_x, this.max_x], 315 | y_range: [this.min_y, this.max_y], 316 | }) 317 | } catch (exception) { 318 | alert("输入似乎不大对,检查一下~") 319 | } 320 | }, 321 | 322 | // 添加函数 323 | add_function: function (params) { 324 | this.func_list.push({ 325 | fnType: "normal_explicit", 326 | fn: "", 327 | fn_polar: "", 328 | parametric_fn_x: "", 329 | parametric_fn_y: "", 330 | parametric_min_t: "", 331 | parametric_max_t: "", 332 | point_x: "", 333 | point_y: "", 334 | }) 335 | }, 336 | 337 | // 删除函数 338 | del_fuction: function (index) { 339 | this.func_list.splice(index, 1); 340 | }, 341 | 342 | // 按键监听函数,need_back表示光标需要回退一格 343 | click_keyboard: function (key, index, inp_ref, pos_change, fn_name) { 344 | this.$nextTick(() => { 345 | let len = this.func_list[index][fn_name].length; 346 | let start = this.$refs[inp_ref][0].selectionStart; 347 | // 更新函数内容 348 | this.func_list[index][fn_name] = this.func_list[index][fn_name].substring(0, start) + key + this.func_list[index][fn_name].substring(start, len); 349 | // 如果移动光标到左边界则return,没有这个判断光标会移动到最右边 350 | if (start == 0 && pos_change <= 0) { 351 | this.$refs[inp_ref][0].focus(); 352 | return 353 | } 354 | // 输入框获取焦点 355 | this.$refs[inp_ref][0].focus(); 356 | // focus方法是异步的,所以更改光标位置需要在nextTick中延时更新,前端的坑是真TM的多 357 | this.$nextTick(() => { 358 | this.$refs[inp_ref][0].setSelectionRange(start + pos_change, start + pos_change); 359 | }); 360 | }) 361 | }, 362 | 363 | // 删除函数 364 | keyboard_delete: function (index, inp_ref, fn_name) { 365 | let len = this.func_list[index][fn_name].length; 366 | let start = this.$refs[inp_ref][0].selectionStart; 367 | this.func_list[index][fn_name] = this.func_list[index][fn_name].substr(0, start - 1) + this.func_list[index][fn_name].substr(start, len); 368 | // 输入框获取焦点 369 | this.$refs[inp_ref][0].focus(); 370 | this.$nextTick(() => { 371 | // 更新光标位置 372 | if (start - 1 <= 0) { 373 | this.$refs[inp_ref][0].setSelectionRange(0, 0); 374 | return 375 | } 376 | this.$refs[inp_ref][0].setSelectionRange(start - 1, start - 1); 377 | }) 378 | }, 379 | 380 | // 输入框失去焦点事件 381 | blur: function (index, inp_ref) { 382 | this.$nextTick(() => { 383 | let start = this.$refs[inp_ref][0].selectionStart; 384 | this.func_list[index].pointer = start 385 | }) 386 | } 387 | 388 | } 389 | 390 | }) 391 | 392 | 393 | function plot(param) { 394 | data = [] 395 | if (param.data) { 396 | data = param.data 397 | } 398 | data.push({ 399 | points: [ 400 | [0, 0], 401 | ], 402 | fnType: 'points', 403 | graphType: 'scatter' 404 | }) 405 | $('#root').empty() 406 | functionPlot({ 407 | target: "#root", 408 | width: $('#root').width(), 409 | height: $('#root').width(), 410 | xAxis: { 411 | domain: param.x_range 412 | }, 413 | yAxis: { 414 | domain: param.y_range 415 | }, 416 | grid: true, 417 | data: data 418 | }); 419 | } 420 | 421 | $(document).ready(function () { 422 | plot({ 423 | x_range: [-5, 5], 424 | y_range: [-5, 5], 425 | }); 426 | }); 427 | 428 | $(window).resize(function () { 429 | plot({ 430 | x_range: [-5, 5], 431 | y_range: [-5, 5], 432 | }); 433 | }); 434 | --------------------------------------------------------------------------------