├── .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 | [](https://cn.vuejs.org/)
17 | [](https://mauriciopoppe.github.io/function-plot/)
18 | [](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 |
--------------------------------------------------------------------------------