Import upstream version 4.5.5
Kali Janitor
3 years ago
12 | 12 | (e.g. Instaloader command line) |
13 | 13 | |
14 | 14 | **Expected behavior** |
15 | A clear and concise description of what you expected to happen (if not obvious). | |
15 | A clear and concise description of what you expected to happen (even if it seems obvious). | |
16 | 16 | |
17 | 17 | **Error messages and tracebacks** |
18 | 18 | If applicable, add error messages and tracebacks to help explain your problem. |
13 | 13 | **Describe alternatives you've considered** |
14 | 14 | A clear and concise description of any alternative solutions or features you've considered. |
15 | 15 | |
16 | **If the feature request is accepted, would you be willing to submit a PR?** | |
16 | **If the feature request is accepted, would you be willing to submit a pull request?** | |
17 | 17 | Yes / No |
18 | 18 | <!-- Help can be provided if you need assistance submitting a PR --> |
19 | 19 |
5 | 5 | - Alexander Graf (@aandergr) |
6 | 6 | - André Koch-Kramer (@Thammus) |
7 | 7 | - Lars Lindqvist (@e5150) |
8 | - ... and many more, see https://github.com/instaloader/instaloader/graphs/contributors |
0 | ||
1 | # Contributor Covenant Code of Conduct | |
2 | ||
3 | ## Our Pledge | |
4 | ||
5 | We as members, contributors, and leaders pledge to make participation in our | |
6 | community a harassment-free experience for everyone, regardless of age, body | |
7 | size, visible or invisible disability, ethnicity, sex characteristics, gender | |
8 | identity and expression, level of experience, education, socio-economic status, | |
9 | nationality, personal appearance, race, religion, or sexual identity | |
10 | and orientation. | |
11 | ||
12 | We pledge to act and interact in ways that contribute to an open, welcoming, | |
13 | diverse, inclusive, and healthy community. | |
14 | ||
15 | ## Our Standards | |
16 | ||
17 | Examples of behavior that contributes to a positive environment for our | |
18 | community include: | |
19 | ||
20 | * Demonstrating empathy and kindness toward other people | |
21 | * Being respectful of differing opinions, viewpoints, and experiences | |
22 | * Giving and gracefully accepting constructive feedback | |
23 | * Accepting responsibility and apologizing to those affected by our mistakes, | |
24 | and learning from the experience | |
25 | * Focusing on what is best not just for us as individuals, but for the | |
26 | overall community | |
27 | ||
28 | Examples of unacceptable behavior include: | |
29 | ||
30 | * The use of sexualized language or imagery, and sexual attention or | |
31 | advances of any kind | |
32 | * Trolling, insulting or derogatory comments, and personal or political attacks | |
33 | * Public or private harassment | |
34 | * Publishing others' private information, such as a physical or email | |
35 | address, without their explicit permission | |
36 | * Other conduct which could reasonably be considered inappropriate in a | |
37 | professional setting | |
38 | ||
39 | ## Enforcement Responsibilities | |
40 | ||
41 | Community leaders are responsible for clarifying and enforcing our standards of | |
42 | acceptable behavior and will take appropriate and fair corrective action in | |
43 | response to any behavior that they deem inappropriate, threatening, offensive, | |
44 | or harmful. | |
45 | ||
46 | Community leaders have the right and responsibility to remove, edit, or reject | |
47 | comments, commits, code, wiki edits, issues, and other contributions that are | |
48 | not aligned to this Code of Conduct, and will communicate reasons for moderation | |
49 | decisions when appropriate. | |
50 | ||
51 | ## Scope | |
52 | ||
53 | This Code of Conduct applies within all community spaces, and also applies when | |
54 | an individual is officially representing the community in public spaces. | |
55 | Examples of representing our community include using an official e-mail address, | |
56 | posting via an official social media account, or acting as an appointed | |
57 | representative at an online or offline event. | |
58 | ||
59 | ## Enforcement | |
60 | ||
61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be | |
62 | reported to the community leaders responsible for enforcement by opening an | |
63 | issue or contacting one or more of the project maintainers. | |
64 | ||
65 | All complaints will be reviewed and investigated promptly and fairly. | |
66 | ||
67 | All community leaders are obligated to respect the privacy and security of the | |
68 | reporter of any incident. | |
69 | ||
70 | ## Enforcement Guidelines | |
71 | ||
72 | Community leaders will follow these Community Impact Guidelines in determining | |
73 | the consequences for any action they deem in violation of this Code of Conduct: | |
74 | ||
75 | ### 1. Correction | |
76 | ||
77 | **Community Impact**: Use of inappropriate language or other behavior deemed | |
78 | unprofessional or unwelcome in the community. | |
79 | ||
80 | **Consequence**: A private, written warning from community leaders, providing | |
81 | clarity around the nature of the violation and an explanation of why the | |
82 | behavior was inappropriate. A public apology may be requested. | |
83 | ||
84 | ### 2. Warning | |
85 | ||
86 | **Community Impact**: A violation through a single incident or series | |
87 | of actions. | |
88 | ||
89 | **Consequence**: A warning with consequences for continued behavior. No | |
90 | interaction with the people involved, including unsolicited interaction with | |
91 | those enforcing the Code of Conduct, for a specified period of time. This | |
92 | includes avoiding interactions in community spaces as well as external channels | |
93 | like social media. Violating these terms may lead to a temporary or | |
94 | permanent ban. | |
95 | ||
96 | ### 3. Temporary Ban | |
97 | ||
98 | **Community Impact**: A serious violation of community standards, including | |
99 | sustained inappropriate behavior. | |
100 | ||
101 | **Consequence**: A temporary ban from any sort of interaction or public | |
102 | communication with the community for a specified period of time. No public or | |
103 | private interaction with the people involved, including unsolicited interaction | |
104 | with those enforcing the Code of Conduct, is allowed during this period. | |
105 | Violating these terms may lead to a permanent ban. | |
106 | ||
107 | ### 4. Permanent Ban | |
108 | ||
109 | **Community Impact**: Demonstrating a pattern of violation of community | |
110 | standards, including sustained inappropriate behavior, harassment of an | |
111 | individual, or aggression toward or disparagement of classes of individuals. | |
112 | ||
113 | **Consequence**: A permanent ban from any sort of public interaction within | |
114 | the community. | |
115 | ||
116 | ## Attribution | |
117 | ||
118 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], | |
119 | version 2.0, available at | |
120 | [https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0]. | |
121 | ||
122 | Community Impact Guidelines were inspired by | |
123 | [Mozilla's code of conduct enforcement ladder][Mozilla CoC]. | |
124 | ||
125 | For answers to common questions about this code of conduct, see the FAQ at | |
126 | [https://www.contributor-covenant.org/faq][FAQ]. Translations are available | |
127 | at [https://www.contributor-covenant.org/translations][translations]. | |
128 | ||
129 | [homepage]: https://www.contributor-covenant.org | |
130 | [v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html | |
131 | [Mozilla CoC]: https://github.com/mozilla/diversity | |
132 | [FAQ]: https://www.contributor-covenant.org/faq | |
133 | [translations]: https://www.contributor-covenant.org/translations | |
134 |
0 | 0 | The MIT License (MIT) |
1 | 1 | |
2 | Copyright (c) 2016-2019 Alexander Graf and André Koch-Kramer. | |
2 | Copyright (c) 2016-2020 Alexander Graf and André Koch-Kramer. | |
3 | 3 | |
4 | 4 | Permission is hereby granted, free of charge, to any person obtaining a copy |
5 | 5 | of this software and associated documentation files (the "Software"), to deal |
5 | 5 | [dev-packages] |
6 | 6 | pylint = "*" |
7 | 7 | mypy = "*" |
8 | sphinx = "*" | |
8 | sphinx = "~=2.3" | |
9 | 9 | pyinstaller = "*" |
10 | 10 | pefile = "*" |
11 | 11 | pywin32-ctypes = "*" |
0 | 0 | { |
1 | 1 | "_meta": { |
2 | 2 | "hash": { |
3 | "sha256": "33408a60fda1a56bf680462fad21643ae0159bc13f3b85d8f10ebf3eef7d8725" | |
3 | "sha256": "58caf1be034bed9aa7ebb8c78e75ffa7d7abe820d014b6398c444a5db566b306" | |
4 | 4 | }, |
5 | 5 | "pipfile-spec": 6, |
6 | 6 | "requires": {}, |
15 | 15 | "default": { |
16 | 16 | "certifi": { |
17 | 17 | "hashes": [ |
18 | "sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3", | |
19 | "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f" | |
20 | ], | |
21 | "version": "==2019.11.28" | |
18 | "sha256:5930595817496dd21bb8dc35dad090f1c2cd0adfaf21204bf6732ca5d8ee34d3", | |
19 | "sha256:8fc0819f1f30ba15bdb34cceffb9ef04d99f420f68eb75d901e9560b8749fc41" | |
20 | ], | |
21 | "version": "==2020.6.20" | |
22 | 22 | }, |
23 | 23 | "chardet": { |
24 | 24 | "hashes": [ |
29 | 29 | }, |
30 | 30 | "idna": { |
31 | 31 | "hashes": [ |
32 | "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", | |
33 | "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" | |
34 | ], | |
35 | "version": "==2.8" | |
32 | "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", | |
33 | "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" | |
34 | ], | |
35 | "version": "==2.10" | |
36 | 36 | }, |
37 | 37 | "requests": { |
38 | 38 | "hashes": [ |
39 | "sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4", | |
40 | "sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31" | |
41 | ], | |
42 | "index": "pypi", | |
43 | "version": "==2.22.0" | |
39 | "sha256:b3559a131db72c33ee969480840fff4bb6dd111de7dd27c8ee1f820f4f00231b", | |
40 | "sha256:fe75cc94a9443b9246fc7049224f75604b113c36acb93f87b80ed42c44cbb898" | |
41 | ], | |
42 | "index": "pypi", | |
43 | "version": "==2.24.0" | |
44 | 44 | }, |
45 | 45 | "urllib3": { |
46 | 46 | "hashes": [ |
47 | "sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc", | |
48 | "sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc" | |
49 | ], | |
50 | "version": "==1.25.8" | |
47 | "sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a", | |
48 | "sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461" | |
49 | ], | |
50 | "version": "==1.25.10" | |
51 | 51 | } |
52 | 52 | }, |
53 | 53 | "develop": { |
67 | 67 | }, |
68 | 68 | "astroid": { |
69 | 69 | "hashes": [ |
70 | "sha256:71ea07f44df9568a75d0f354c49143a4575d90645e9fead6dfb52c26a85ed13a", | |
71 | "sha256:840947ebfa8b58f318d42301cf8c0a20fd794a33b61cc4638e28e9e61ba32f42" | |
72 | ], | |
73 | "version": "==2.3.3" | |
70 | "sha256:2f4078c2a41bf377eea06d71c9d2ba4eb8f6b1af2135bec27bbbb7d8f12bb703", | |
71 | "sha256:bc58d83eb610252fd8de6363e39d4f1d0619c894b0ed24603b881c02e64c7386" | |
72 | ], | |
73 | "version": "==2.4.2" | |
74 | 74 | }, |
75 | 75 | "babel": { |
76 | 76 | "hashes": [ |
81 | 81 | }, |
82 | 82 | "certifi": { |
83 | 83 | "hashes": [ |
84 | "sha256:017c25db2a153ce562900032d5bc68e9f191e44e9a0f762f373977de9df1fbb3", | |
85 | "sha256:25b64c7da4cd7479594d035c08c2d809eb4aab3a26e5a990ea98cc450c320f1f" | |
86 | ], | |
87 | "version": "==2019.11.28" | |
84 | "sha256:5930595817496dd21bb8dc35dad090f1c2cd0adfaf21204bf6732ca5d8ee34d3", | |
85 | "sha256:8fc0819f1f30ba15bdb34cceffb9ef04d99f420f68eb75d901e9560b8749fc41" | |
86 | ], | |
87 | "version": "==2020.6.20" | |
88 | 88 | }, |
89 | 89 | "chardet": { |
90 | 90 | "hashes": [ |
108 | 108 | }, |
109 | 109 | "idna": { |
110 | 110 | "hashes": [ |
111 | "sha256:c357b3f628cf53ae2c4c05627ecc484553142ca23264e593d327bcde5e9c3407", | |
112 | "sha256:ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c" | |
113 | ], | |
114 | "version": "==2.8" | |
111 | "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6", | |
112 | "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0" | |
113 | ], | |
114 | "version": "==2.10" | |
115 | 115 | }, |
116 | 116 | "imagesize": { |
117 | 117 | "hashes": [ |
129 | 129 | }, |
130 | 130 | "jinja2": { |
131 | 131 | "hashes": [ |
132 | "sha256:93187ffbc7808079673ef52771baa950426fd664d3aad1d0fa3e95644360e250", | |
133 | "sha256:b0eaf100007721b5c16c1fc1eecb87409464edc10469ddc9a22a27a99123be49" | |
134 | ], | |
135 | "version": "==2.11.1" | |
132 | "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0", | |
133 | "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035" | |
134 | ], | |
135 | "version": "==2.11.2" | |
136 | 136 | }, |
137 | 137 | "lazy-object-proxy": { |
138 | 138 | "hashes": [ |
207 | 207 | }, |
208 | 208 | "mypy": { |
209 | 209 | "hashes": [ |
210 | "sha256:0a9a45157e532da06fe56adcfef8a74629566b607fa2c1ac0122d1ff995c748a", | |
211 | "sha256:2c35cae79ceb20d47facfad51f952df16c2ae9f45db6cb38405a3da1cf8fc0a7", | |
212 | "sha256:4b9365ade157794cef9685791032521233729cb00ce76b0ddc78749abea463d2", | |
213 | "sha256:53ea810ae3f83f9c9b452582261ea859828a9ed666f2e1ca840300b69322c474", | |
214 | "sha256:634aef60b4ff0f650d3e59d4374626ca6153fcaff96ec075b215b568e6ee3cb0", | |
215 | "sha256:7e396ce53cacd5596ff6d191b47ab0ea18f8e0ec04e15d69728d530e86d4c217", | |
216 | "sha256:7eadc91af8270455e0d73565b8964da1642fe226665dd5c9560067cd64d56749", | |
217 | "sha256:7f672d02fffcbace4db2b05369142e0506cdcde20cea0e07c7c2171c4fd11dd6", | |
218 | "sha256:85baab8d74ec601e86134afe2bcccd87820f79d2f8d5798c889507d1088287bf", | |
219 | "sha256:87c556fb85d709dacd4b4cb6167eecc5bbb4f0a9864b69136a0d4640fdc76a36", | |
220 | "sha256:a6bd44efee4dc8c3324c13785a9dc3519b3ee3a92cada42d2b57762b7053b49b", | |
221 | "sha256:c6d27bd20c3ba60d5b02f20bd28e20091d6286a699174dfad515636cb09b5a72", | |
222 | "sha256:e2bb577d10d09a2d8822a042a23b8d62bc3b269667c9eb8e60a6edfa000211b1", | |
223 | "sha256:f97a605d7c8bc2c6d1172c2f0d5a65b24142e11a58de689046e62c2d632ca8c1" | |
224 | ], | |
225 | "index": "pypi", | |
226 | "version": "==0.761" | |
210 | "sha256:2c6cde8aa3426c1682d35190b59b71f661237d74b053822ea3d748e2c9578a7c", | |
211 | "sha256:3fdda71c067d3ddfb21da4b80e2686b71e9e5c72cca65fa216d207a358827f86", | |
212 | "sha256:5dd13ff1f2a97f94540fd37a49e5d255950ebcdf446fb597463a40d0df3fac8b", | |
213 | "sha256:6731603dfe0ce4352c555c6284c6db0dc935b685e9ce2e4cf220abe1e14386fd", | |
214 | "sha256:6bb93479caa6619d21d6e7160c552c1193f6952f0668cdda2f851156e85186fc", | |
215 | "sha256:81c7908b94239c4010e16642c9102bfc958ab14e36048fa77d0be3289dda76ea", | |
216 | "sha256:9c7a9a7ceb2871ba4bac1cf7217a7dd9ccd44c27c2950edbc6dc08530f32ad4e", | |
217 | "sha256:a4a2cbcfc4cbf45cd126f531dedda8485671545b43107ded25ce952aac6fb308", | |
218 | "sha256:b7fbfabdbcc78c4f6fc4712544b9b0d6bf171069c6e0e3cb82440dd10ced3406", | |
219 | "sha256:c05b9e4fb1d8a41d41dec8786c94f3b95d3c5f528298d769eb8e73d293abc48d", | |
220 | "sha256:d7df6eddb6054d21ca4d3c6249cae5578cb4602951fd2b6ee2f5510ffb098707", | |
221 | "sha256:e0b61738ab504e656d1fe4ff0c0601387a5489ca122d55390ade31f9ca0e252d", | |
222 | "sha256:eff7d4a85e9eea55afa34888dfeaccde99e7520b51f867ac28a48492c0b1130c", | |
223 | "sha256:f05644db6779387ccdb468cc47a44b4356fc2ffa9287135d05b70a98dc83b89a" | |
224 | ], | |
225 | "index": "pypi", | |
226 | "version": "==0.782" | |
227 | 227 | }, |
228 | 228 | "mypy-extensions": { |
229 | 229 | "hashes": [ |
234 | 234 | }, |
235 | 235 | "packaging": { |
236 | 236 | "hashes": [ |
237 | "sha256:170748228214b70b672c581a3dd610ee51f733018650740e98c7df862a583f73", | |
238 | "sha256:e665345f9eef0c621aa0bf2f8d78cf6d21904eef16a93f020240b704a57f1334" | |
239 | ], | |
240 | "version": "==20.1" | |
237 | "sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8", | |
238 | "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181" | |
239 | ], | |
240 | "version": "==20.4" | |
241 | 241 | }, |
242 | 242 | "pefile": { |
243 | 243 | "hashes": [ |
248 | 248 | }, |
249 | 249 | "psutil": { |
250 | 250 | "hashes": [ |
251 | "sha256:094f899ac3ef72422b7e00411b4ed174e3c5a2e04c267db6643937ddba67a05b", | |
252 | "sha256:10b7f75cc8bd676cfc6fa40cd7d5c25b3f45a0e06d43becd7c2d2871cbb5e806", | |
253 | "sha256:1b1575240ca9a90b437e5a40db662acd87bbf181f6aa02f0204978737b913c6b", | |
254 | "sha256:21231ef1c1a89728e29b98a885b8e0a8e00d09018f6da5cdc1f43f988471a995", | |
255 | "sha256:28f771129bfee9fc6b63d83a15d857663bbdcae3828e1cb926e91320a9b5b5cd", | |
256 | "sha256:70387772f84fa5c3bb6a106915a2445e20ac8f9821c5914d7cbde148f4d7ff73", | |
257 | "sha256:b560f5cd86cf8df7bcd258a851ca1ad98f0d5b8b98748e877a0aec4e9032b465", | |
258 | "sha256:b74b43fecce384a57094a83d2778cdfc2e2d9a6afaadd1ebecb2e75e0d34e10d", | |
259 | "sha256:e85f727ffb21539849e6012f47b12f6dd4c44965e56591d8dec6e8bc9ab96f4a", | |
260 | "sha256:fd2e09bb593ad9bdd7429e779699d2d47c1268cbde4dda95fcd1bd17544a0217", | |
261 | "sha256:ffad8eb2ac614518bbe3c0b8eb9dffdb3a8d2e3a7d5da51c5b974fb723a5c5aa" | |
262 | ], | |
263 | "index": "pypi", | |
264 | "version": "==5.6.7" | |
251 | "sha256:0ee3c36428f160d2d8fce3c583a0353e848abb7de9732c50cf3356dd49ad63f8", | |
252 | "sha256:10512b46c95b02842c225f58fa00385c08fa00c68bac7da2d9a58ebe2c517498", | |
253 | "sha256:4080869ed93cce662905b029a1770fe89c98787e543fa7347f075ade761b19d6", | |
254 | "sha256:5e9d0f26d4194479a13d5f4b3798260c20cecf9ac9a461e718eb59ea520a360c", | |
255 | "sha256:66c18ca7680a31bf16ee22b1d21b6397869dda8059dbdb57d9f27efa6615f195", | |
256 | "sha256:68d36986ded5dac7c2dcd42f2682af1db80d4bce3faa126a6145c1637e1b559f", | |
257 | "sha256:90990af1c3c67195c44c9a889184f84f5b2320dce3ee3acbd054e3ba0b4a7beb", | |
258 | "sha256:a5b120bb3c0c71dfe27551f9da2f3209a8257a178ed6c628a819037a8df487f1", | |
259 | "sha256:d8a82162f23c53b8525cf5f14a355f5d1eea86fa8edde27287dd3a98399e4fdf", | |
260 | "sha256:f2018461733b23f308c298653c8903d32aaad7873d25e1d228765e91ae42c3f2", | |
261 | "sha256:ff1977ba1a5f71f89166d5145c3da1cea89a0fdb044075a12c720ee9123ec818" | |
262 | ], | |
263 | "index": "pypi", | |
264 | "version": "==5.7.2" | |
265 | 265 | }, |
266 | 266 | "pygments": { |
267 | 267 | "hashes": [ |
268 | "sha256:2a3fe295e54a20164a9df49c75fa58526d3be48e14aceba6d6b1e8ac0bfd6f1b", | |
269 | "sha256:98c8aa5a9f778fcd1026a17361ddaf7330d1b7c62ae97c3bb0ae73e0b9b6b0fe" | |
270 | ], | |
271 | "version": "==2.5.2" | |
268 | "sha256:647344a061c249a3b74e230c739f434d7ea4d8b1d5f3721bc0f3558049b38f44", | |
269 | "sha256:ff7a40b4860b727ab48fad6360eb351cc1b33cbf9b15a0f689ca5353e9463324" | |
270 | ], | |
271 | "version": "==2.6.1" | |
272 | 272 | }, |
273 | 273 | "pyinstaller": { |
274 | 274 | "hashes": [ |
279 | 279 | }, |
280 | 280 | "pylint": { |
281 | 281 | "hashes": [ |
282 | "sha256:3db5468ad013380e987410a8d6956226963aed94ecb5f9d3a28acca6d9ac36cd", | |
283 | "sha256:886e6afc935ea2590b462664b161ca9a5e40168ea99e5300935f6591ad467df4" | |
284 | ], | |
285 | "index": "pypi", | |
286 | "version": "==2.4.4" | |
282 | "sha256:7dd78437f2d8d019717dbf287772d0b2dbdfd13fc016aa7faa08d67bccc46adc", | |
283 | "sha256:d0ece7d223fe422088b0e8f13fa0a1e8eb745ebffcb8ed53d3e95394b6101a1c" | |
284 | ], | |
285 | "index": "pypi", | |
286 | "version": "==2.5.3" | |
287 | 287 | }, |
288 | 288 | "pyparsing": { |
289 | 289 | "hashes": [ |
290 | "sha256:4c830582a84fb022400b85429791bc551f1f4871c33f23e44f353119e92f969f", | |
291 | "sha256:c342dccb5250c08d45fd6f8b4a559613ca603b57498511740e65cd11a2e7dcec" | |
292 | ], | |
293 | "version": "==2.4.6" | |
290 | "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1", | |
291 | "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b" | |
292 | ], | |
293 | "version": "==2.4.7" | |
294 | 294 | }, |
295 | 295 | "pytz": { |
296 | 296 | "hashes": [ |
297 | "sha256:1c557d7d0e871de1f5ccd5833f60fb2550652da6be2693c1e02300743d21500d", | |
298 | "sha256:b02c06db6cf09c12dd25137e563b31700d3b80fcc4ad23abb7a315f2789819be" | |
299 | ], | |
300 | "version": "==2019.3" | |
297 | "sha256:a494d53b6d39c3c6e44c3bec237336e14305e4f29bbf800b599253057fbb79ed", | |
298 | "sha256:c35965d010ce31b23eeb663ed3cc8c906275d6be1a34393a1d73a41febf4a048" | |
299 | ], | |
300 | "version": "==2020.1" | |
301 | 301 | }, |
302 | 302 | "pywin32-ctypes": { |
303 | 303 | "hashes": [ |
309 | 309 | }, |
310 | 310 | "requests": { |
311 | 311 | "hashes": [ |
312 | "sha256:11e007a8a2aa0323f5a921e9e6a2d7e4e67d9877e85773fba9ba6419025cbeb4", | |
313 | "sha256:9cf5292fcd0f598c671cfc1e0d7d1a7f13bb8085e9a590f48c010551dc6c4b31" | |
314 | ], | |
315 | "index": "pypi", | |
316 | "version": "==2.22.0" | |
312 | "sha256:b3559a131db72c33ee969480840fff4bb6dd111de7dd27c8ee1f820f4f00231b", | |
313 | "sha256:fe75cc94a9443b9246fc7049224f75604b113c36acb93f87b80ed42c44cbb898" | |
314 | ], | |
315 | "index": "pypi", | |
316 | "version": "==2.24.0" | |
317 | 317 | }, |
318 | 318 | "six": { |
319 | 319 | "hashes": [ |
320 | "sha256:236bdbdce46e6e6a3d61a337c0f8b763ca1e8717c03b369e87a7ec7ce1319c0a", | |
321 | "sha256:8f3cd2e254d8f793e7f3d6d9df77b92252b52637291d0f0da013c76ea2724b6c" | |
322 | ], | |
323 | "version": "==1.14.0" | |
320 | "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", | |
321 | "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" | |
322 | ], | |
323 | "version": "==1.15.0" | |
324 | 324 | }, |
325 | 325 | "snowballstemmer": { |
326 | 326 | "hashes": [ |
331 | 331 | }, |
332 | 332 | "sphinx": { |
333 | 333 | "hashes": [ |
334 | "sha256:298537cb3234578b2d954ff18c5608468229e116a9757af3b831c2b2b4819159", | |
335 | "sha256:e6e766b74f85f37a5f3e0773a1e1be8db3fcb799deb58ca6d18b70b0b44542a5" | |
336 | ], | |
337 | "index": "pypi", | |
338 | "version": "==2.3.1" | |
334 | "sha256:b4c750d546ab6d7e05bdff6ac24db8ae3e8b8253a3569b754e445110a0a12b66", | |
335 | "sha256:fc312670b56cb54920d6cc2ced455a22a547910de10b3142276495ced49231cb" | |
336 | ], | |
337 | "index": "pypi", | |
338 | "version": "==2.4.4" | |
339 | 339 | }, |
340 | 340 | "sphinxcontrib-applehelp": { |
341 | 341 | "hashes": [ |
342 | "sha256:edaa0ab2b2bc74403149cb0209d6775c96de797dfd5b5e2a71981309efab3897", | |
343 | "sha256:fb8dee85af95e5c30c91f10e7eb3c8967308518e0f7488a2828ef7bc191d0d5d" | |
344 | ], | |
345 | "version": "==1.0.1" | |
342 | "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a", | |
343 | "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58" | |
344 | ], | |
345 | "version": "==1.0.2" | |
346 | 346 | }, |
347 | 347 | "sphinxcontrib-devhelp": { |
348 | 348 | "hashes": [ |
349 | "sha256:6c64b077937330a9128a4da74586e8c2130262f014689b4b89e2d08ee7294a34", | |
350 | "sha256:9512ecb00a2b0821a146736b39f7aeb90759834b07e81e8cc23a9c70bacb9981" | |
351 | ], | |
352 | "version": "==1.0.1" | |
349 | "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e", | |
350 | "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4" | |
351 | ], | |
352 | "version": "==1.0.2" | |
353 | 353 | }, |
354 | 354 | "sphinxcontrib-htmlhelp": { |
355 | 355 | "hashes": [ |
356 | "sha256:4670f99f8951bd78cd4ad2ab962f798f5618b17675c35c5ac3b2132a14ea8422", | |
357 | "sha256:d4fd39a65a625c9df86d7fa8a2d9f3cd8299a3a4b15db63b50aac9e161d8eff7" | |
358 | ], | |
359 | "version": "==1.0.2" | |
356 | "sha256:3c0bc24a2c41e340ac37c85ced6dafc879ab485c095b1d65d2461ac2f7cca86f", | |
357 | "sha256:e8f5bb7e31b2dbb25b9cc435c8ab7a79787ebf7f906155729338f3156d93659b" | |
358 | ], | |
359 | "version": "==1.0.3" | |
360 | 360 | }, |
361 | 361 | "sphinxcontrib-jsmath": { |
362 | 362 | "hashes": [ |
367 | 367 | }, |
368 | 368 | "sphinxcontrib-qthelp": { |
369 | 369 | "hashes": [ |
370 | "sha256:513049b93031beb1f57d4daea74068a4feb77aa5630f856fcff2e50de14e9a20", | |
371 | "sha256:79465ce11ae5694ff165becda529a600c754f4bc459778778c7017374d4d406f" | |
372 | ], | |
373 | "version": "==1.0.2" | |
370 | "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72", | |
371 | "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6" | |
372 | ], | |
373 | "version": "==1.0.3" | |
374 | 374 | }, |
375 | 375 | "sphinxcontrib-serializinghtml": { |
376 | 376 | "hashes": [ |
377 | "sha256:c0efb33f8052c04fd7a26c0a07f1678e8512e0faec19f4aa8f2473a8b81d5227", | |
378 | "sha256:db6615af393650bf1151a6cd39120c29abaf93cc60db8c48eb2dddbfdc3a9768" | |
379 | ], | |
380 | "version": "==1.1.3" | |
377 | "sha256:eaa0eccc86e982a9b939b2b82d12cc5d013385ba5eadcc7e4fed23f4405f77bc", | |
378 | "sha256:f242a81d423f59617a8e5cf16f5d4d74e28ee9a66f9e5b637a18082991db5a9a" | |
379 | ], | |
380 | "version": "==1.1.4" | |
381 | }, | |
382 | "toml": { | |
383 | "hashes": [ | |
384 | "sha256:926b612be1e5ce0634a2ca03470f95169cf16f939018233a670519cb4ac58b0f", | |
385 | "sha256:bda89d5935c2eac546d648028b9901107a595863cb36bae0c73ac804a9b4ce88" | |
386 | ], | |
387 | "version": "==0.10.1" | |
381 | 388 | }, |
382 | 389 | "typed-ast": { |
383 | 390 | "hashes": [ |
403 | 410 | "sha256:fc0fea399acb12edbf8a628ba8d2312f583bdbdb3335635db062fa98cf71fca4", |
404 | 411 | "sha256:fe460b922ec15dd205595c9b5b99e2f056fd98ae8f9f56b888e7a17dc2b757e7" |
405 | 412 | ], |
413 | "markers": "implementation_name == 'cpython' and python_version < '3.8'", | |
406 | 414 | "version": "==1.4.1" |
407 | 415 | }, |
408 | 416 | "typing-extensions": { |
409 | 417 | "hashes": [ |
410 | "sha256:091ecc894d5e908ac75209f10d5b4f118fbdb2eb1ede6a63544054bb1edb41f2", | |
411 | "sha256:910f4656f54de5993ad9304959ce9bb903f90aadc7c67a0bef07e678014e892d", | |
412 | "sha256:cf8b63fedea4d89bab840ecbb93e75578af28f76f66c35889bd7065f5af88575" | |
413 | ], | |
414 | "version": "==3.7.4.1" | |
418 | "sha256:6e95524d8a547a91e08f404ae485bbb71962de46967e1b71a0cb89af24e761c5", | |
419 | "sha256:79ee589a3caca649a9bfd2a8de4709837400dfa00b6cc81962a1e6a1815969ae", | |
420 | "sha256:f8d2bd89d25bc39dabe7d23df520442fa1d8969b82544370e03d88b5a591c392" | |
421 | ], | |
422 | "version": "==3.7.4.2" | |
415 | 423 | }, |
416 | 424 | "urllib3": { |
417 | 425 | "hashes": [ |
418 | "sha256:2f3db8b19923a873b3e5256dc9c2dedfa883e33d87c690d9c7913e1f40673cdc", | |
419 | "sha256:87716c2d2a7121198ebcb7ce7cccf6ce5e9ba539041cfbaeecfb641dc0bf6acc" | |
420 | ], | |
421 | "version": "==1.25.8" | |
426 | "sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a", | |
427 | "sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461" | |
428 | ], | |
429 | "version": "==1.25.10" | |
422 | 430 | }, |
423 | 431 | "wrapt": { |
424 | 432 | "hashes": [ |
425 | "sha256:565a021fd19419476b9362b05eeaa094178de64f8361e44468f9e9d7843901e1" | |
426 | ], | |
427 | "version": "==1.11.2" | |
433 | "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7" | |
434 | ], | |
435 | "version": "==1.12.1" | |
428 | 436 | } |
429 | 437 | } |
430 | 438 | } |
26 | 26 | :alt: Arch User Repository Package |
27 | 27 | :target: https://aur.archlinux.org/packages/instaloader/ |
28 | 28 | |
29 | .. |downloads| image:: https://img.shields.io/pypi/dm/instaloader.svg | |
29 | .. |downloads| image:: https://pepy.tech/badge/instaloader/month | |
30 | 30 | :alt: PyPI Download Count |
31 | :target: https://pepy.tech/project/instaloader/month | |
31 | 32 | |
32 | 33 | .. badges-end |
33 | 34 | |
48 | 49 | directory accordingly, |
49 | 50 | |
50 | 51 | - allows **fine-grained customization** of filters and where to store |
51 | downloaded media. | |
52 | downloaded media, | |
53 | ||
54 | - automatically **resumes previously-interrupted** download iterations. | |
52 | 55 | |
53 | 56 | :: |
54 | 57 |
16 | 16 | def __main(): |
17 | 17 | with contextlib.suppress(AttributeError, psutil.Error): |
18 | 18 | if psutil.Process().parent().parent().name() == "explorer.exe": |
19 | subprocess.Popen("powershell -NoExit -Command \\\"& {0}\\\"".format(sys.argv[0])) | |
19 | subprocess.Popen("powershell -NoExit -Command \\\"& '{0}'\\\"".format(sys.argv[0])) | |
20 | 20 | return |
21 | 21 | main() |
22 | 22 | |
43 | 43 | f.writelines(lines) |
44 | 44 | |
45 | 45 | # install dependencies and invoke PyInstaller |
46 | commands = ["pip install pipenv==2018.11.26", | |
46 | commands = ["pip install pipenv==2020.6.2", | |
47 | 47 | "pipenv sync --dev", |
48 | 48 | "pipenv run pyinstaller --log-level=DEBUG instaloader.spec"] |
49 | 49 |
0 | /*! | |
1 | * Bootstrap v4.1.3 (https://getbootstrap.com/) | |
2 | * Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) | |
3 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | |
4 | */ | |
5 | !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("jquery")):"function"==typeof define&&define.amd?define(["exports","jquery"],t):t(e.bootstrap={},e.jQuery)}(this,function(e,t){"use strict";function i(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}function s(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),e}function l(r){for(var e=1;e<arguments.length;e++){var o=null!=arguments[e]?arguments[e]:{},t=Object.keys(o);"function"==typeof Object.getOwnPropertySymbols&&(t=t.concat(Object.getOwnPropertySymbols(o).filter(function(e){return Object.getOwnPropertyDescriptor(o,e).enumerable}))),t.forEach(function(e){var t,n,i;t=r,i=o[n=e],n in t?Object.defineProperty(t,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[n]=i})}return r}for(var r,n,o,a,c,u,f,h,d,p,m,g,_,v,y,E,b,w,C,T,S,D,A,I,O,N,k,x,P,L,j,H,M,F,W,R,U,B,q,K,Q,Y,V,z,G,J,Z,X,$,ee,te,ne,ie,re,oe,se,ae,le,ce,ue,fe,he,de,pe,me,ge,_e,ve,ye,Ee,be,we=function(i){var t="transitionend";function e(e){var t=this,n=!1;return i(this).one(l.TRANSITION_END,function(){n=!0}),setTimeout(function(){n||l.triggerTransitionEnd(t)},e),this}var l={TRANSITION_END:"bsTransitionEnd",getUID:function(e){for(;e+=~~(1e6*Math.random()),document.getElementById(e););return e},getSelectorFromElement:function(e){var t=e.getAttribute("data-target");t&&"#"!==t||(t=e.getAttribute("href")||"");try{return document.querySelector(t)?t:null}catch(e){return null}},getTransitionDurationFromElement:function(e){if(!e)return 0;var t=i(e).css("transition-duration");return parseFloat(t)?(t=t.split(",")[0],1e3*parseFloat(t)):0},reflow:function(e){return e.offsetHeight},triggerTransitionEnd:function(e){i(e).trigger(t)},supportsTransitionEnd:function(){return Boolean(t)},isElement:function(e){return(e[0]||e).nodeType},typeCheckConfig:function(e,t,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var r=n[i],o=t[i],s=o&&l.isElement(o)?"element":(a=o,{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase());if(!new RegExp(r).test(s))throw new Error(e.toUpperCase()+': Option "'+i+'" provided type "'+s+'" but expected type "'+r+'".')}var a}};return i.fn.emulateTransitionEnd=e,i.event.special[l.TRANSITION_END]={bindType:t,delegateType:t,handle:function(e){if(i(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}},l}(t=t&&t.hasOwnProperty("default")?t.default:t),Ce=(n="alert",a="."+(o="bs.alert"),c=(r=t).fn[n],u={CLOSE:"close"+a,CLOSED:"closed"+a,CLICK_DATA_API:"click"+a+".data-api"},f="alert",h="fade",d="show",p=function(){function i(e){this._element=e}var e=i.prototype;return e.close=function(e){var t=this._element;e&&(t=this._getRootElement(e)),this._triggerCloseEvent(t).isDefaultPrevented()||this._removeElement(t)},e.dispose=function(){r.removeData(this._element,o),this._element=null},e._getRootElement=function(e){var t=we.getSelectorFromElement(e),n=!1;return t&&(n=document.querySelector(t)),n||(n=r(e).closest("."+f)[0]),n},e._triggerCloseEvent=function(e){var t=r.Event(u.CLOSE);return r(e).trigger(t),t},e._removeElement=function(t){var n=this;if(r(t).removeClass(d),r(t).hasClass(h)){var e=we.getTransitionDurationFromElement(t);r(t).one(we.TRANSITION_END,function(e){return n._destroyElement(t,e)}).emulateTransitionEnd(e)}else this._destroyElement(t)},e._destroyElement=function(e){r(e).detach().trigger(u.CLOSED).remove()},i._jQueryInterface=function(n){return this.each(function(){var e=r(this),t=e.data(o);t||(t=new i(this),e.data(o,t)),"close"===n&&t[n](this)})},i._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}}]),i}(),r(document).on(u.CLICK_DATA_API,'[data-dismiss="alert"]',p._handleDismiss(new p)),r.fn[n]=p._jQueryInterface,r.fn[n].Constructor=p,r.fn[n].noConflict=function(){return r.fn[n]=c,p._jQueryInterface},p),Te=(g="button",v="."+(_="bs.button"),y=".data-api",E=(m=t).fn[g],b="active",w="btn",T='[data-toggle^="button"]',S='[data-toggle="buttons"]',D="input",A=".active",I=".btn",O={CLICK_DATA_API:"click"+v+y,FOCUS_BLUR_DATA_API:(C="focus")+v+y+" blur"+v+y},N=function(){function n(e){this._element=e}var e=n.prototype;return e.toggle=function(){var e=!0,t=!0,n=m(this._element).closest(S)[0];if(n){var i=this._element.querySelector(D);if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains(b))e=!1;else{var r=n.querySelector(A);r&&m(r).removeClass(b)}if(e){if(i.hasAttribute("disabled")||n.hasAttribute("disabled")||i.classList.contains("disabled")||n.classList.contains("disabled"))return;i.checked=!this._element.classList.contains(b),m(i).trigger("change")}i.focus(),t=!1}}t&&this._element.setAttribute("aria-pressed",!this._element.classList.contains(b)),e&&m(this._element).toggleClass(b)},e.dispose=function(){m.removeData(this._element,_),this._element=null},n._jQueryInterface=function(t){return this.each(function(){var e=m(this).data(_);e||(e=new n(this),m(this).data(_,e)),"toggle"===t&&e[t]()})},s(n,null,[{key:"VERSION",get:function(){return"4.1.3"}}]),n}(),m(document).on(O.CLICK_DATA_API,T,function(e){e.preventDefault();var t=e.target;m(t).hasClass(w)||(t=m(t).closest(I)),N._jQueryInterface.call(m(t),"toggle")}).on(O.FOCUS_BLUR_DATA_API,T,function(e){var t=m(e.target).closest(I)[0];m(t).toggleClass(C,/^focus(in)?$/.test(e.type))}),m.fn[g]=N._jQueryInterface,m.fn[g].Constructor=N,m.fn[g].noConflict=function(){return m.fn[g]=E,N._jQueryInterface},N),Se=(x="carousel",L="."+(P="bs.carousel"),j=".data-api",H=(k=t).fn[x],M={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0},F={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean"},W="next",R="prev",U="left",B="right",q={SLIDE:"slide"+L,SLID:"slid"+L,KEYDOWN:"keydown"+L,MOUSEENTER:"mouseenter"+L,MOUSELEAVE:"mouseleave"+L,TOUCHEND:"touchend"+L,LOAD_DATA_API:"load"+L+j,CLICK_DATA_API:"click"+L+j},K="carousel",Q="active",Y="slide",V="carousel-item-right",z="carousel-item-left",G="carousel-item-next",J="carousel-item-prev",Z=".active",X=".active.carousel-item",$=".carousel-item",ee=".carousel-item-next, .carousel-item-prev",te=".carousel-indicators",ne="[data-slide], [data-slide-to]",ie='[data-ride="carousel"]',re=function(){function o(e,t){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this._config=this._getConfig(t),this._element=k(e)[0],this._indicatorsElement=this._element.querySelector(te),this._addEventListeners()}var e=o.prototype;return e.next=function(){this._isSliding||this._slide(W)},e.nextWhenVisible=function(){!document.hidden&&k(this._element).is(":visible")&&"hidden"!==k(this._element).css("visibility")&&this.next()},e.prev=function(){this._isSliding||this._slide(R)},e.pause=function(e){e||(this._isPaused=!0),this._element.querySelector(ee)&&(we.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},e.cycle=function(e){e||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},e.to=function(e){var t=this;this._activeElement=this._element.querySelector(X);var n=this._getItemIndex(this._activeElement);if(!(e>this._items.length-1||e<0))if(this._isSliding)k(this._element).one(q.SLID,function(){return t.to(e)});else{if(n===e)return this.pause(),void this.cycle();var i=n<e?W:R;this._slide(i,this._items[e])}},e.dispose=function(){k(this._element).off(L),k.removeData(this._element,P),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},e._getConfig=function(e){return e=l({},M,e),we.typeCheckConfig(x,e,F),e},e._addEventListeners=function(){var t=this;this._config.keyboard&&k(this._element).on(q.KEYDOWN,function(e){return t._keydown(e)}),"hover"===this._config.pause&&(k(this._element).on(q.MOUSEENTER,function(e){return t.pause(e)}).on(q.MOUSELEAVE,function(e){return t.cycle(e)}),"ontouchstart"in document.documentElement&&k(this._element).on(q.TOUCHEND,function(){t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout(function(e){return t.cycle(e)},500+t._config.interval)}))},e._keydown=function(e){if(!/input|textarea/i.test(e.target.tagName))switch(e.which){case 37:e.preventDefault(),this.prev();break;case 39:e.preventDefault(),this.next()}},e._getItemIndex=function(e){return this._items=e&&e.parentNode?[].slice.call(e.parentNode.querySelectorAll($)):[],this._items.indexOf(e)},e._getItemByDirection=function(e,t){var n=e===W,i=e===R,r=this._getItemIndex(t),o=this._items.length-1;if((i&&0===r||n&&r===o)&&!this._config.wrap)return t;var s=(r+(e===R?-1:1))%this._items.length;return-1===s?this._items[this._items.length-1]:this._items[s]},e._triggerSlideEvent=function(e,t){var n=this._getItemIndex(e),i=this._getItemIndex(this._element.querySelector(X)),r=k.Event(q.SLIDE,{relatedTarget:e,direction:t,from:i,to:n});return k(this._element).trigger(r),r},e._setActiveIndicatorElement=function(e){if(this._indicatorsElement){var t=[].slice.call(this._indicatorsElement.querySelectorAll(Z));k(t).removeClass(Q);var n=this._indicatorsElement.children[this._getItemIndex(e)];n&&k(n).addClass(Q)}},e._slide=function(e,t){var n,i,r,o=this,s=this._element.querySelector(X),a=this._getItemIndex(s),l=t||s&&this._getItemByDirection(e,s),c=this._getItemIndex(l),u=Boolean(this._interval);if(e===W?(n=z,i=G,r=U):(n=V,i=J,r=B),l&&k(l).hasClass(Q))this._isSliding=!1;else if(!this._triggerSlideEvent(l,r).isDefaultPrevented()&&s&&l){this._isSliding=!0,u&&this.pause(),this._setActiveIndicatorElement(l);var f=k.Event(q.SLID,{relatedTarget:l,direction:r,from:a,to:c});if(k(this._element).hasClass(Y)){k(l).addClass(i),we.reflow(l),k(s).addClass(n),k(l).addClass(n);var h=we.getTransitionDurationFromElement(s);k(s).one(we.TRANSITION_END,function(){k(l).removeClass(n+" "+i).addClass(Q),k(s).removeClass(Q+" "+i+" "+n),o._isSliding=!1,setTimeout(function(){return k(o._element).trigger(f)},0)}).emulateTransitionEnd(h)}else k(s).removeClass(Q),k(l).addClass(Q),this._isSliding=!1,k(this._element).trigger(f);u&&this.cycle()}},o._jQueryInterface=function(i){return this.each(function(){var e=k(this).data(P),t=l({},M,k(this).data());"object"==typeof i&&(t=l({},t,i));var n="string"==typeof i?i:t.slide;if(e||(e=new o(this,t),k(this).data(P,e)),"number"==typeof i)e.to(i);else if("string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}else t.interval&&(e.pause(),e.cycle())})},o._dataApiClickHandler=function(e){var t=we.getSelectorFromElement(this);if(t){var n=k(t)[0];if(n&&k(n).hasClass(K)){var i=l({},k(n).data(),k(this).data()),r=this.getAttribute("data-slide-to");r&&(i.interval=!1),o._jQueryInterface.call(k(n),i),r&&k(n).data(P).to(r),e.preventDefault()}}},s(o,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return M}}]),o}(),k(document).on(q.CLICK_DATA_API,ne,re._dataApiClickHandler),k(window).on(q.LOAD_DATA_API,function(){for(var e=[].slice.call(document.querySelectorAll(ie)),t=0,n=e.length;t<n;t++){var i=k(e[t]);re._jQueryInterface.call(i,i.data())}}),k.fn[x]=re._jQueryInterface,k.fn[x].Constructor=re,k.fn[x].noConflict=function(){return k.fn[x]=H,re._jQueryInterface},re),De=(se="collapse",le="."+(ae="bs.collapse"),ce=(oe=t).fn[se],ue={toggle:!0,parent:""},fe={toggle:"boolean",parent:"(string|element)"},he={SHOW:"show"+le,SHOWN:"shown"+le,HIDE:"hide"+le,HIDDEN:"hidden"+le,CLICK_DATA_API:"click"+le+".data-api"},de="show",pe="collapse",me="collapsing",ge="collapsed",_e="width",ve="height",ye=".show, .collapsing",Ee='[data-toggle="collapse"]',be=function(){function a(t,e){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(e),this._triggerArray=oe.makeArray(document.querySelectorAll('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var n=[].slice.call(document.querySelectorAll(Ee)),i=0,r=n.length;i<r;i++){var o=n[i],s=we.getSelectorFromElement(o),a=[].slice.call(document.querySelectorAll(s)).filter(function(e){return e===t});null!==s&&0<a.length&&(this._selector=s,this._triggerArray.push(o))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var e=a.prototype;return e.toggle=function(){oe(this._element).hasClass(de)?this.hide():this.show()},e.show=function(){var e,t,n=this;if(!this._isTransitioning&&!oe(this._element).hasClass(de)&&(this._parent&&0===(e=[].slice.call(this._parent.querySelectorAll(ye)).filter(function(e){return e.getAttribute("data-parent")===n._config.parent})).length&&(e=null),!(e&&(t=oe(e).not(this._selector).data(ae))&&t._isTransitioning))){var i=oe.Event(he.SHOW);if(oe(this._element).trigger(i),!i.isDefaultPrevented()){e&&(a._jQueryInterface.call(oe(e).not(this._selector),"hide"),t||oe(e).data(ae,null));var r=this._getDimension();oe(this._element).removeClass(pe).addClass(me),this._element.style[r]=0,this._triggerArray.length&&oe(this._triggerArray).removeClass(ge).attr("aria-expanded",!0),this.setTransitioning(!0);var o="scroll"+(r[0].toUpperCase()+r.slice(1)),s=we.getTransitionDurationFromElement(this._element);oe(this._element).one(we.TRANSITION_END,function(){oe(n._element).removeClass(me).addClass(pe).addClass(de),n._element.style[r]="",n.setTransitioning(!1),oe(n._element).trigger(he.SHOWN)}).emulateTransitionEnd(s),this._element.style[r]=this._element[o]+"px"}}},e.hide=function(){var e=this;if(!this._isTransitioning&&oe(this._element).hasClass(de)){var t=oe.Event(he.HIDE);if(oe(this._element).trigger(t),!t.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",we.reflow(this._element),oe(this._element).addClass(me).removeClass(pe).removeClass(de);var i=this._triggerArray.length;if(0<i)for(var r=0;r<i;r++){var o=this._triggerArray[r],s=we.getSelectorFromElement(o);if(null!==s)oe([].slice.call(document.querySelectorAll(s))).hasClass(de)||oe(o).addClass(ge).attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[n]="";var a=we.getTransitionDurationFromElement(this._element);oe(this._element).one(we.TRANSITION_END,function(){e.setTransitioning(!1),oe(e._element).removeClass(me).addClass(pe).trigger(he.HIDDEN)}).emulateTransitionEnd(a)}}},e.setTransitioning=function(e){this._isTransitioning=e},e.dispose=function(){oe.removeData(this._element,ae),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},e._getConfig=function(e){return(e=l({},ue,e)).toggle=Boolean(e.toggle),we.typeCheckConfig(se,e,fe),e},e._getDimension=function(){return oe(this._element).hasClass(_e)?_e:ve},e._getParent=function(){var n=this,e=null;we.isElement(this._config.parent)?(e=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(e=this._config.parent[0])):e=document.querySelector(this._config.parent);var t='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',i=[].slice.call(e.querySelectorAll(t));return oe(i).each(function(e,t){n._addAriaAndCollapsedClass(a._getTargetFromElement(t),[t])}),e},e._addAriaAndCollapsedClass=function(e,t){if(e){var n=oe(e).hasClass(de);t.length&&oe(t).toggleClass(ge,!n).attr("aria-expanded",n)}},a._getTargetFromElement=function(e){var t=we.getSelectorFromElement(e);return t?document.querySelector(t):null},a._jQueryInterface=function(i){return this.each(function(){var e=oe(this),t=e.data(ae),n=l({},ue,e.data(),"object"==typeof i&&i?i:{});if(!t&&n.toggle&&/show|hide/.test(i)&&(n.toggle=!1),t||(t=new a(this,n),e.data(ae,t)),"string"==typeof i){if("undefined"==typeof t[i])throw new TypeError('No method named "'+i+'"');t[i]()}})},s(a,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return ue}}]),a}(),oe(document).on(he.CLICK_DATA_API,Ee,function(e){"A"===e.currentTarget.tagName&&e.preventDefault();var n=oe(this),t=we.getSelectorFromElement(this),i=[].slice.call(document.querySelectorAll(t));oe(i).each(function(){var e=oe(this),t=e.data(ae)?"toggle":n.data();be._jQueryInterface.call(e,t)})}),oe.fn[se]=be._jQueryInterface,oe.fn[se].Constructor=be,oe.fn[se].noConflict=function(){return oe.fn[se]=ce,be._jQueryInterface},be),Ae="undefined"!=typeof window&&"undefined"!=typeof document,Ie=["Edge","Trident","Firefox"],Oe=0,Ne=0;Ne<Ie.length;Ne+=1)if(Ae&&0<=navigator.userAgent.indexOf(Ie[Ne])){Oe=1;break}var ke=Ae&&window.Promise?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then(function(){t=!1,e()}))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout(function(){t=!1,e()},Oe))}};function xe(e){return e&&"[object Function]"==={}.toString.call(e)}function Pe(e,t){if(1!==e.nodeType)return[];var n=getComputedStyle(e,null);return t?n[t]:n}function Le(e){return"HTML"===e.nodeName?e:e.parentNode||e.host}function je(e){if(!e)return document.body;switch(e.nodeName){case"HTML":case"BODY":return e.ownerDocument.body;case"#document":return e.body}var t=Pe(e),n=t.overflow,i=t.overflowX,r=t.overflowY;return/(auto|scroll|overlay)/.test(n+r+i)?e:je(Le(e))}var He=Ae&&!(!window.MSInputMethodContext||!document.documentMode),Me=Ae&&/MSIE 10/.test(navigator.userAgent);function Fe(e){return 11===e?He:10===e?Me:He||Me}function We(e){if(!e)return document.documentElement;for(var t=Fe(10)?document.body:null,n=e.offsetParent;n===t&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var i=n&&n.nodeName;return i&&"BODY"!==i&&"HTML"!==i?-1!==["TD","TABLE"].indexOf(n.nodeName)&&"static"===Pe(n,"position")?We(n):n:e?e.ownerDocument.documentElement:document.documentElement}function Re(e){return null!==e.parentNode?Re(e.parentNode):e}function Ue(e,t){if(!(e&&e.nodeType&&t&&t.nodeType))return document.documentElement;var n=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,i=n?e:t,r=n?t:e,o=document.createRange();o.setStart(i,0),o.setEnd(r,0);var s,a,l=o.commonAncestorContainer;if(e!==l&&t!==l||i.contains(r))return"BODY"===(a=(s=l).nodeName)||"HTML"!==a&&We(s.firstElementChild)!==s?We(l):l;var c=Re(e);return c.host?Ue(c.host,t):Ue(e,Re(t).host)}function Be(e){var t="top"===(1<arguments.length&&void 0!==arguments[1]?arguments[1]:"top")?"scrollTop":"scrollLeft",n=e.nodeName;if("BODY"===n||"HTML"===n){var i=e.ownerDocument.documentElement;return(e.ownerDocument.scrollingElement||i)[t]}return e[t]}function qe(e,t){var n="x"===t?"Left":"Top",i="Left"===n?"Right":"Bottom";return parseFloat(e["border"+n+"Width"],10)+parseFloat(e["border"+i+"Width"],10)}function Ke(e,t,n,i){return Math.max(t["offset"+e],t["scroll"+e],n["client"+e],n["offset"+e],n["scroll"+e],Fe(10)?n["offset"+e]+i["margin"+("Height"===e?"Top":"Left")]+i["margin"+("Height"===e?"Bottom":"Right")]:0)}function Qe(){var e=document.body,t=document.documentElement,n=Fe(10)&&getComputedStyle(t);return{height:Ke("Height",e,t,n),width:Ke("Width",e,t,n)}}var Ye=function(){function i(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),e}}(),Ve=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},ze=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(e[i]=n[i])}return e};function Ge(e){return ze({},e,{right:e.left+e.width,bottom:e.top+e.height})}function Je(e){var t={};try{if(Fe(10)){t=e.getBoundingClientRect();var n=Be(e,"top"),i=Be(e,"left");t.top+=n,t.left+=i,t.bottom+=n,t.right+=i}else t=e.getBoundingClientRect()}catch(e){}var r={left:t.left,top:t.top,width:t.right-t.left,height:t.bottom-t.top},o="HTML"===e.nodeName?Qe():{},s=o.width||e.clientWidth||r.right-r.left,a=o.height||e.clientHeight||r.bottom-r.top,l=e.offsetWidth-s,c=e.offsetHeight-a;if(l||c){var u=Pe(e);l-=qe(u,"x"),c-=qe(u,"y"),r.width-=l,r.height-=c}return Ge(r)}function Ze(e,t){var n=2<arguments.length&&void 0!==arguments[2]&&arguments[2],i=Fe(10),r="HTML"===t.nodeName,o=Je(e),s=Je(t),a=je(e),l=Pe(t),c=parseFloat(l.borderTopWidth,10),u=parseFloat(l.borderLeftWidth,10);n&&"HTML"===t.nodeName&&(s.top=Math.max(s.top,0),s.left=Math.max(s.left,0));var f=Ge({top:o.top-s.top-c,left:o.left-s.left-u,width:o.width,height:o.height});if(f.marginTop=0,f.marginLeft=0,!i&&r){var h=parseFloat(l.marginTop,10),d=parseFloat(l.marginLeft,10);f.top-=c-h,f.bottom-=c-h,f.left-=u-d,f.right-=u-d,f.marginTop=h,f.marginLeft=d}return(i&&!n?t.contains(a):t===a&&"BODY"!==a.nodeName)&&(f=function(e,t){var n=2<arguments.length&&void 0!==arguments[2]&&arguments[2],i=Be(t,"top"),r=Be(t,"left"),o=n?-1:1;return e.top+=i*o,e.bottom+=i*o,e.left+=r*o,e.right+=r*o,e}(f,t)),f}function Xe(e){if(!e||!e.parentElement||Fe())return document.documentElement;for(var t=e.parentElement;t&&"none"===Pe(t,"transform");)t=t.parentElement;return t||document.documentElement}function $e(e,t,n,i){var r=4<arguments.length&&void 0!==arguments[4]&&arguments[4],o={top:0,left:0},s=r?Xe(e):Ue(e,t);if("viewport"===i)o=function(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1],n=e.ownerDocument.documentElement,i=Ze(e,n),r=Math.max(n.clientWidth,window.innerWidth||0),o=Math.max(n.clientHeight,window.innerHeight||0),s=t?0:Be(n),a=t?0:Be(n,"left");return Ge({top:s-i.top+i.marginTop,left:a-i.left+i.marginLeft,width:r,height:o})}(s,r);else{var a=void 0;"scrollParent"===i?"BODY"===(a=je(Le(t))).nodeName&&(a=e.ownerDocument.documentElement):a="window"===i?e.ownerDocument.documentElement:i;var l=Ze(a,s,r);if("HTML"!==a.nodeName||function e(t){var n=t.nodeName;return"BODY"!==n&&"HTML"!==n&&("fixed"===Pe(t,"position")||e(Le(t)))}(s))o=l;else{var c=Qe(),u=c.height,f=c.width;o.top+=l.top-l.marginTop,o.bottom=u+l.top,o.left+=l.left-l.marginLeft,o.right=f+l.left}}return o.left+=n,o.top+=n,o.right-=n,o.bottom-=n,o}function et(e,t,i,n,r){var o=5<arguments.length&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf("auto"))return e;var s=$e(i,n,o,r),a={top:{width:s.width,height:t.top-s.top},right:{width:s.right-t.right,height:s.height},bottom:{width:s.width,height:s.bottom-t.bottom},left:{width:t.left-s.left,height:s.height}},l=Object.keys(a).map(function(e){return ze({key:e},a[e],{area:(t=a[e],t.width*t.height)});var t}).sort(function(e,t){return t.area-e.area}),c=l.filter(function(e){var t=e.width,n=e.height;return t>=i.clientWidth&&n>=i.clientHeight}),u=0<c.length?c[0].key:l[0].key,f=e.split("-")[1];return u+(f?"-"+f:"")}function tt(e,t,n){var i=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return Ze(n,i?Xe(t):Ue(t,n),i)}function nt(e){var t=getComputedStyle(e),n=parseFloat(t.marginTop)+parseFloat(t.marginBottom),i=parseFloat(t.marginLeft)+parseFloat(t.marginRight);return{width:e.offsetWidth+i,height:e.offsetHeight+n}}function it(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,function(e){return t[e]})}function rt(e,t,n){n=n.split("-")[0];var i=nt(e),r={width:i.width,height:i.height},o=-1!==["right","left"].indexOf(n),s=o?"top":"left",a=o?"left":"top",l=o?"height":"width",c=o?"width":"height";return r[s]=t[s]+t[l]/2-i[l]/2,r[a]=n===a?t[a]-i[c]:t[it(a)],r}function ot(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function st(e,n,t){return(void 0===t?e:e.slice(0,function(e,t,n){if(Array.prototype.findIndex)return e.findIndex(function(e){return e[t]===n});var i=ot(e,function(e){return e[t]===n});return e.indexOf(i)}(e,"name",t))).forEach(function(e){e.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var t=e.function||e.fn;e.enabled&&xe(t)&&(n.offsets.popper=Ge(n.offsets.popper),n.offsets.reference=Ge(n.offsets.reference),n=t(n,e))}),n}function at(e,n){return e.some(function(e){var t=e.name;return e.enabled&&t===n})}function lt(e){for(var t=[!1,"ms","Webkit","Moz","O"],n=e.charAt(0).toUpperCase()+e.slice(1),i=0;i<t.length;i++){var r=t[i],o=r?""+r+n:e;if("undefined"!=typeof document.body.style[o])return o}return null}function ct(e){var t=e.ownerDocument;return t?t.defaultView:window}function ut(e,t,n,i){n.updateBound=i,ct(e).addEventListener("resize",n.updateBound,{passive:!0});var r=je(e);return function e(t,n,i,r){var o="BODY"===t.nodeName,s=o?t.ownerDocument.defaultView:t;s.addEventListener(n,i,{passive:!0}),o||e(je(s.parentNode),n,i,r),r.push(s)}(r,"scroll",n.updateBound,n.scrollParents),n.scrollElement=r,n.eventsEnabled=!0,n}function ft(){var e,t;this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=(e=this.reference,t=this.state,ct(e).removeEventListener("resize",t.updateBound),t.scrollParents.forEach(function(e){e.removeEventListener("scroll",t.updateBound)}),t.updateBound=null,t.scrollParents=[],t.scrollElement=null,t.eventsEnabled=!1,t))}function ht(e){return""!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function dt(n,i){Object.keys(i).forEach(function(e){var t="";-1!==["width","height","top","right","bottom","left"].indexOf(e)&&ht(i[e])&&(t="px"),n.style[e]=i[e]+t})}function pt(e,t,n){var i=ot(e,function(e){return e.name===t}),r=!!i&&e.some(function(e){return e.name===n&&e.enabled&&e.order<i.order});if(!r){var o="`"+t+"`",s="`"+n+"`";console.warn(s+" modifier is required by "+o+" modifier in order to work, be sure to include it before "+o+"!")}return r}var mt=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"],gt=mt.slice(3);function _t(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1],n=gt.indexOf(e),i=gt.slice(n+1).concat(gt.slice(0,n));return t?i.reverse():i}var vt="flip",yt="clockwise",Et="counterclockwise";function bt(e,r,o,t){var s=[0,0],a=-1!==["right","left"].indexOf(t),n=e.split(/(\+|\-)/).map(function(e){return e.trim()}),i=n.indexOf(ot(n,function(e){return-1!==e.search(/,|\s/)}));n[i]&&-1===n[i].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,c=-1!==i?[n.slice(0,i).concat([n[i].split(l)[0]]),[n[i].split(l)[1]].concat(n.slice(i+1))]:[n];return(c=c.map(function(e,t){var n=(1===t?!a:a)?"height":"width",i=!1;return e.reduce(function(e,t){return""===e[e.length-1]&&-1!==["+","-"].indexOf(t)?(e[e.length-1]=t,i=!0,e):i?(e[e.length-1]+=t,i=!1,e):e.concat(t)},[]).map(function(e){return function(e,t,n,i){var r=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),o=+r[1],s=r[2];if(!o)return e;if(0===s.indexOf("%")){var a=void 0;switch(s){case"%p":a=n;break;case"%":case"%r":default:a=i}return Ge(a)[t]/100*o}if("vh"===s||"vw"===s)return("vh"===s?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*o;return o}(e,n,r,o)})})).forEach(function(n,i){n.forEach(function(e,t){ht(e)&&(s[i]+=e*("-"===n[t-1]?-1:1))})}),s}var wt={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,n=t.split("-")[0],i=t.split("-")[1];if(i){var r=e.offsets,o=r.reference,s=r.popper,a=-1!==["bottom","top"].indexOf(n),l=a?"left":"top",c=a?"width":"height",u={start:Ve({},l,o[l]),end:Ve({},l,o[l]+o[c]-s[c])};e.offsets.popper=ze({},s,u[i])}return e}},offset:{order:200,enabled:!0,fn:function(e,t){var n=t.offset,i=e.placement,r=e.offsets,o=r.popper,s=r.reference,a=i.split("-")[0],l=void 0;return l=ht(+n)?[+n,0]:bt(n,o,s,a),"left"===a?(o.top+=l[0],o.left-=l[1]):"right"===a?(o.top+=l[0],o.left+=l[1]):"top"===a?(o.left+=l[0],o.top-=l[1]):"bottom"===a&&(o.left+=l[0],o.top+=l[1]),e.popper=o,e},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,i){var t=i.boundariesElement||We(e.instance.popper);e.instance.reference===t&&(t=We(t));var n=lt("transform"),r=e.instance.popper.style,o=r.top,s=r.left,a=r[n];r.top="",r.left="",r[n]="";var l=$e(e.instance.popper,e.instance.reference,i.padding,t,e.positionFixed);r.top=o,r.left=s,r[n]=a,i.boundaries=l;var c=i.priority,u=e.offsets.popper,f={primary:function(e){var t=u[e];return u[e]<l[e]&&!i.escapeWithReference&&(t=Math.max(u[e],l[e])),Ve({},e,t)},secondary:function(e){var t="right"===e?"left":"top",n=u[t];return u[e]>l[e]&&!i.escapeWithReference&&(n=Math.min(u[t],l[e]-("right"===e?u.width:u.height))),Ve({},t,n)}};return c.forEach(function(e){var t=-1!==["left","top"].indexOf(e)?"primary":"secondary";u=ze({},u,f[t](e))}),e.offsets.popper=u,e},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,n=t.popper,i=t.reference,r=e.placement.split("-")[0],o=Math.floor,s=-1!==["top","bottom"].indexOf(r),a=s?"right":"bottom",l=s?"left":"top",c=s?"width":"height";return n[a]<o(i[l])&&(e.offsets.popper[l]=o(i[l])-n[c]),n[l]>o(i[a])&&(e.offsets.popper[l]=o(i[a])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){var n;if(!pt(e.instance.modifiers,"arrow","keepTogether"))return e;var i=t.element;if("string"==typeof i){if(!(i=e.instance.popper.querySelector(i)))return e}else if(!e.instance.popper.contains(i))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),e;var r=e.placement.split("-")[0],o=e.offsets,s=o.popper,a=o.reference,l=-1!==["left","right"].indexOf(r),c=l?"height":"width",u=l?"Top":"Left",f=u.toLowerCase(),h=l?"left":"top",d=l?"bottom":"right",p=nt(i)[c];a[d]-p<s[f]&&(e.offsets.popper[f]-=s[f]-(a[d]-p)),a[f]+p>s[d]&&(e.offsets.popper[f]+=a[f]+p-s[d]),e.offsets.popper=Ge(e.offsets.popper);var m=a[f]+a[c]/2-p/2,g=Pe(e.instance.popper),_=parseFloat(g["margin"+u],10),v=parseFloat(g["border"+u+"Width"],10),y=m-e.offsets.popper[f]-_-v;return y=Math.max(Math.min(s[c]-p,y),0),e.arrowElement=i,e.offsets.arrow=(Ve(n={},f,Math.round(y)),Ve(n,h,""),n),e},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(p,m){if(at(p.instance.modifiers,"inner"))return p;if(p.flipped&&p.placement===p.originalPlacement)return p;var g=$e(p.instance.popper,p.instance.reference,m.padding,m.boundariesElement,p.positionFixed),_=p.placement.split("-")[0],v=it(_),y=p.placement.split("-")[1]||"",E=[];switch(m.behavior){case vt:E=[_,v];break;case yt:E=_t(_);break;case Et:E=_t(_,!0);break;default:E=m.behavior}return E.forEach(function(e,t){if(_!==e||E.length===t+1)return p;_=p.placement.split("-")[0],v=it(_);var n,i=p.offsets.popper,r=p.offsets.reference,o=Math.floor,s="left"===_&&o(i.right)>o(r.left)||"right"===_&&o(i.left)<o(r.right)||"top"===_&&o(i.bottom)>o(r.top)||"bottom"===_&&o(i.top)<o(r.bottom),a=o(i.left)<o(g.left),l=o(i.right)>o(g.right),c=o(i.top)<o(g.top),u=o(i.bottom)>o(g.bottom),f="left"===_&&a||"right"===_&&l||"top"===_&&c||"bottom"===_&&u,h=-1!==["top","bottom"].indexOf(_),d=!!m.flipVariations&&(h&&"start"===y&&a||h&&"end"===y&&l||!h&&"start"===y&&c||!h&&"end"===y&&u);(s||f||d)&&(p.flipped=!0,(s||f)&&(_=E[t+1]),d&&(y="end"===(n=y)?"start":"start"===n?"end":n),p.placement=_+(y?"-"+y:""),p.offsets.popper=ze({},p.offsets.popper,rt(p.instance.popper,p.offsets.reference,p.placement)),p=st(p.instance.modifiers,p,"flip"))}),p},behavior:"flip",padding:5,boundariesElement:"viewport"},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,n=t.split("-")[0],i=e.offsets,r=i.popper,o=i.reference,s=-1!==["left","right"].indexOf(n),a=-1===["top","left"].indexOf(n);return r[s?"left":"top"]=o[n]-(a?r[s?"width":"height"]:0),e.placement=it(t),e.offsets.popper=Ge(r),e}},hide:{order:800,enabled:!0,fn:function(e){if(!pt(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference,n=ot(e.instance.modifiers,function(e){return"preventOverflow"===e.name}).boundaries;if(t.bottom<n.top||t.left>n.right||t.top>n.bottom||t.right<n.left){if(!0===e.hide)return e;e.hide=!0,e.attributes["x-out-of-boundaries"]=""}else{if(!1===e.hide)return e;e.hide=!1,e.attributes["x-out-of-boundaries"]=!1}return e}},computeStyle:{order:850,enabled:!0,fn:function(e,t){var n=t.x,i=t.y,r=e.offsets.popper,o=ot(e.instance.modifiers,function(e){return"applyStyle"===e.name}).gpuAcceleration;void 0!==o&&console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var s=void 0!==o?o:t.gpuAcceleration,a=Je(We(e.instance.popper)),l={position:r.position},c={left:Math.floor(r.left),top:Math.round(r.top),bottom:Math.round(r.bottom),right:Math.floor(r.right)},u="bottom"===n?"top":"bottom",f="right"===i?"left":"right",h=lt("transform"),d=void 0,p=void 0;if(p="bottom"===u?-a.height+c.bottom:c.top,d="right"===f?-a.width+c.right:c.left,s&&h)l[h]="translate3d("+d+"px, "+p+"px, 0)",l[u]=0,l[f]=0,l.willChange="transform";else{var m="bottom"===u?-1:1,g="right"===f?-1:1;l[u]=p*m,l[f]=d*g,l.willChange=u+", "+f}var _={"x-placement":e.placement};return e.attributes=ze({},_,e.attributes),e.styles=ze({},l,e.styles),e.arrowStyles=ze({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function(e){var t,n;return dt(e.instance.popper,e.styles),t=e.instance.popper,n=e.attributes,Object.keys(n).forEach(function(e){!1!==n[e]?t.setAttribute(e,n[e]):t.removeAttribute(e)}),e.arrowElement&&Object.keys(e.arrowStyles).length&&dt(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,n,i,r){var o=tt(r,t,e,n.positionFixed),s=et(n.placement,o,t,e,n.modifiers.flip.boundariesElement,n.modifiers.flip.padding);return t.setAttribute("x-placement",s),dt(t,{position:n.positionFixed?"fixed":"absolute"}),n},gpuAcceleration:void 0}}},Ct=function(){function o(e,t){var n=this,i=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,o),this.scheduleUpdate=function(){return requestAnimationFrame(n.update)},this.update=ke(this.update.bind(this)),this.options=ze({},o.Defaults,i),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=e&&e.jquery?e[0]:e,this.popper=t&&t.jquery?t[0]:t,this.options.modifiers={},Object.keys(ze({},o.Defaults.modifiers,i.modifiers)).forEach(function(e){n.options.modifiers[e]=ze({},o.Defaults.modifiers[e]||{},i.modifiers?i.modifiers[e]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(e){return ze({name:e},n.options.modifiers[e])}).sort(function(e,t){return e.order-t.order}),this.modifiers.forEach(function(e){e.enabled&&xe(e.onLoad)&&e.onLoad(n.reference,n.popper,n.options,e,n.state)}),this.update();var r=this.options.eventsEnabled;r&&this.enableEventListeners(),this.state.eventsEnabled=r}return Ye(o,[{key:"update",value:function(){return function(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=tt(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=et(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.positionFixed=this.options.positionFixed,e.offsets.popper=rt(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",e=st(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}.call(this)}},{key:"destroy",value:function(){return function(){return this.state.isDestroyed=!0,at(this.modifiers,"applyStyle")&&(this.popper.removeAttribute("x-placement"),this.popper.style.position="",this.popper.style.top="",this.popper.style.left="",this.popper.style.right="",this.popper.style.bottom="",this.popper.style.willChange="",this.popper.style[lt("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}.call(this)}},{key:"enableEventListeners",value:function(){return function(){this.state.eventsEnabled||(this.state=ut(this.reference,this.options,this.state,this.scheduleUpdate))}.call(this)}},{key:"disableEventListeners",value:function(){return ft.call(this)}}]),o}();Ct.Utils=("undefined"!=typeof window?window:global).PopperUtils,Ct.placements=mt,Ct.Defaults=wt;var Tt,St,Dt,At,It,Ot,Nt,kt,xt,Pt,Lt,jt,Ht,Mt,Ft,Wt,Rt,Ut,Bt,qt,Kt,Qt,Yt,Vt,zt,Gt,Jt,Zt,Xt,$t,en,tn,nn,rn,on,sn,an,ln,cn,un,fn,hn,dn,pn,mn,gn,_n,vn,yn,En,bn,wn,Cn,Tn,Sn,Dn,An,In,On,Nn,kn,xn,Pn,Ln,jn,Hn,Mn,Fn,Wn,Rn,Un,Bn,qn,Kn,Qn,Yn,Vn,zn,Gn,Jn,Zn,Xn,$n,ei,ti,ni,ii,ri,oi,si,ai,li,ci,ui,fi,hi,di,pi,mi,gi,_i,vi,yi,Ei,bi,wi,Ci,Ti,Si,Di,Ai,Ii,Oi,Ni,ki,xi,Pi,Li,ji,Hi,Mi,Fi,Wi,Ri,Ui,Bi=(St="dropdown",At="."+(Dt="bs.dropdown"),It=".data-api",Ot=(Tt=t).fn[St],Nt=new RegExp("38|40|27"),kt={HIDE:"hide"+At,HIDDEN:"hidden"+At,SHOW:"show"+At,SHOWN:"shown"+At,CLICK:"click"+At,CLICK_DATA_API:"click"+At+It,KEYDOWN_DATA_API:"keydown"+At+It,KEYUP_DATA_API:"keyup"+At+It},xt="disabled",Pt="show",Lt="dropup",jt="dropright",Ht="dropleft",Mt="dropdown-menu-right",Ft="position-static",Wt='[data-toggle="dropdown"]',Rt=".dropdown form",Ut=".dropdown-menu",Bt=".navbar-nav",qt=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Kt="top-start",Qt="top-end",Yt="bottom-start",Vt="bottom-end",zt="right-start",Gt="left-start",Jt={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic"},Zt={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string"},Xt=function(){function c(e,t){this._element=e,this._popper=null,this._config=this._getConfig(t),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var e=c.prototype;return e.toggle=function(){if(!this._element.disabled&&!Tt(this._element).hasClass(xt)){var e=c._getParentFromElement(this._element),t=Tt(this._menu).hasClass(Pt);if(c._clearMenus(),!t){var n={relatedTarget:this._element},i=Tt.Event(kt.SHOW,n);if(Tt(e).trigger(i),!i.isDefaultPrevented()){if(!this._inNavbar){if("undefined"==typeof Ct)throw new TypeError("Bootstrap dropdown require Popper.js (https://popper.js.org)");var r=this._element;"parent"===this._config.reference?r=e:we.isElement(this._config.reference)&&(r=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(r=this._config.reference[0])),"scrollParent"!==this._config.boundary&&Tt(e).addClass(Ft),this._popper=new Ct(r,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===Tt(e).closest(Bt).length&&Tt(document.body).children().on("mouseover",null,Tt.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),Tt(this._menu).toggleClass(Pt),Tt(e).toggleClass(Pt).trigger(Tt.Event(kt.SHOWN,n))}}}},e.dispose=function(){Tt.removeData(this._element,Dt),Tt(this._element).off(At),this._element=null,(this._menu=null)!==this._popper&&(this._popper.destroy(),this._popper=null)},e.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},e._addEventListeners=function(){var t=this;Tt(this._element).on(kt.CLICK,function(e){e.preventDefault(),e.stopPropagation(),t.toggle()})},e._getConfig=function(e){return e=l({},this.constructor.Default,Tt(this._element).data(),e),we.typeCheckConfig(St,e,this.constructor.DefaultType),e},e._getMenuElement=function(){if(!this._menu){var e=c._getParentFromElement(this._element);e&&(this._menu=e.querySelector(Ut))}return this._menu},e._getPlacement=function(){var e=Tt(this._element.parentNode),t=Yt;return e.hasClass(Lt)?(t=Kt,Tt(this._menu).hasClass(Mt)&&(t=Qt)):e.hasClass(jt)?t=zt:e.hasClass(Ht)?t=Gt:Tt(this._menu).hasClass(Mt)&&(t=Vt),t},e._detectNavbar=function(){return 0<Tt(this._element).closest(".navbar").length},e._getPopperConfig=function(){var t=this,e={};"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=l({},e.offsets,t._config.offset(e.offsets)||{}),e}:e.offset=this._config.offset;var n={placement:this._getPlacement(),modifiers:{offset:e,flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(n.modifiers.applyStyle={enabled:!1}),n},c._jQueryInterface=function(t){return this.each(function(){var e=Tt(this).data(Dt);if(e||(e=new c(this,"object"==typeof t?t:null),Tt(this).data(Dt,e)),"string"==typeof t){if("undefined"==typeof e[t])throw new TypeError('No method named "'+t+'"');e[t]()}})},c._clearMenus=function(e){if(!e||3!==e.which&&("keyup"!==e.type||9===e.which))for(var t=[].slice.call(document.querySelectorAll(Wt)),n=0,i=t.length;n<i;n++){var r=c._getParentFromElement(t[n]),o=Tt(t[n]).data(Dt),s={relatedTarget:t[n]};if(e&&"click"===e.type&&(s.clickEvent=e),o){var a=o._menu;if(Tt(r).hasClass(Pt)&&!(e&&("click"===e.type&&/input|textarea/i.test(e.target.tagName)||"keyup"===e.type&&9===e.which)&&Tt.contains(r,e.target))){var l=Tt.Event(kt.HIDE,s);Tt(r).trigger(l),l.isDefaultPrevented()||("ontouchstart"in document.documentElement&&Tt(document.body).children().off("mouseover",null,Tt.noop),t[n].setAttribute("aria-expanded","false"),Tt(a).removeClass(Pt),Tt(r).removeClass(Pt).trigger(Tt.Event(kt.HIDDEN,s)))}}}},c._getParentFromElement=function(e){var t,n=we.getSelectorFromElement(e);return n&&(t=document.querySelector(n)),t||e.parentNode},c._dataApiKeydownHandler=function(e){if((/input|textarea/i.test(e.target.tagName)?!(32===e.which||27!==e.which&&(40!==e.which&&38!==e.which||Tt(e.target).closest(Ut).length)):Nt.test(e.which))&&(e.preventDefault(),e.stopPropagation(),!this.disabled&&!Tt(this).hasClass(xt))){var t=c._getParentFromElement(this),n=Tt(t).hasClass(Pt);if((n||27===e.which&&32===e.which)&&(!n||27!==e.which&&32!==e.which)){var i=[].slice.call(t.querySelectorAll(qt));if(0!==i.length){var r=i.indexOf(e.target);38===e.which&&0<r&&r--,40===e.which&&r<i.length-1&&r++,r<0&&(r=0),i[r].focus()}}else{if(27===e.which){var o=t.querySelector(Wt);Tt(o).trigger("focus")}Tt(this).trigger("click")}}},s(c,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return Jt}},{key:"DefaultType",get:function(){return Zt}}]),c}(),Tt(document).on(kt.KEYDOWN_DATA_API,Wt,Xt._dataApiKeydownHandler).on(kt.KEYDOWN_DATA_API,Ut,Xt._dataApiKeydownHandler).on(kt.CLICK_DATA_API+" "+kt.KEYUP_DATA_API,Xt._clearMenus).on(kt.CLICK_DATA_API,Wt,function(e){e.preventDefault(),e.stopPropagation(),Xt._jQueryInterface.call(Tt(this),"toggle")}).on(kt.CLICK_DATA_API,Rt,function(e){e.stopPropagation()}),Tt.fn[St]=Xt._jQueryInterface,Tt.fn[St].Constructor=Xt,Tt.fn[St].noConflict=function(){return Tt.fn[St]=Ot,Xt._jQueryInterface},Xt),qi=(en="modal",nn="."+(tn="bs.modal"),rn=($t=t).fn[en],on={backdrop:!0,keyboard:!0,focus:!0,show:!0},sn={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},an={HIDE:"hide"+nn,HIDDEN:"hidden"+nn,SHOW:"show"+nn,SHOWN:"shown"+nn,FOCUSIN:"focusin"+nn,RESIZE:"resize"+nn,CLICK_DISMISS:"click.dismiss"+nn,KEYDOWN_DISMISS:"keydown.dismiss"+nn,MOUSEUP_DISMISS:"mouseup.dismiss"+nn,MOUSEDOWN_DISMISS:"mousedown.dismiss"+nn,CLICK_DATA_API:"click"+nn+".data-api"},ln="modal-scrollbar-measure",cn="modal-backdrop",un="modal-open",fn="fade",hn="show",dn=".modal-dialog",pn='[data-toggle="modal"]',mn='[data-dismiss="modal"]',gn=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",_n=".sticky-top",vn=function(){function r(e,t){this._config=this._getConfig(t),this._element=e,this._dialog=e.querySelector(dn),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._scrollbarWidth=0}var e=r.prototype;return e.toggle=function(e){return this._isShown?this.hide():this.show(e)},e.show=function(e){var t=this;if(!this._isTransitioning&&!this._isShown){$t(this._element).hasClass(fn)&&(this._isTransitioning=!0);var n=$t.Event(an.SHOW,{relatedTarget:e});$t(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),$t(document.body).addClass(un),this._setEscapeEvent(),this._setResizeEvent(),$t(this._element).on(an.CLICK_DISMISS,mn,function(e){return t.hide(e)}),$t(this._dialog).on(an.MOUSEDOWN_DISMISS,function(){$t(t._element).one(an.MOUSEUP_DISMISS,function(e){$t(e.target).is(t._element)&&(t._ignoreBackdropClick=!0)})}),this._showBackdrop(function(){return t._showElement(e)}))}},e.hide=function(e){var t=this;if(e&&e.preventDefault(),!this._isTransitioning&&this._isShown){var n=$t.Event(an.HIDE);if($t(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var i=$t(this._element).hasClass(fn);if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),$t(document).off(an.FOCUSIN),$t(this._element).removeClass(hn),$t(this._element).off(an.CLICK_DISMISS),$t(this._dialog).off(an.MOUSEDOWN_DISMISS),i){var r=we.getTransitionDurationFromElement(this._element);$t(this._element).one(we.TRANSITION_END,function(e){return t._hideModal(e)}).emulateTransitionEnd(r)}else this._hideModal()}}},e.dispose=function(){$t.removeData(this._element,tn),$t(window,document,this._element,this._backdrop).off(nn),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._scrollbarWidth=null},e.handleUpdate=function(){this._adjustDialog()},e._getConfig=function(e){return e=l({},on,e),we.typeCheckConfig(en,e,sn),e},e._showElement=function(e){var t=this,n=$t(this._element).hasClass(fn);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.scrollTop=0,n&&we.reflow(this._element),$t(this._element).addClass(hn),this._config.focus&&this._enforceFocus();var i=$t.Event(an.SHOWN,{relatedTarget:e}),r=function(){t._config.focus&&t._element.focus(),t._isTransitioning=!1,$t(t._element).trigger(i)};if(n){var o=we.getTransitionDurationFromElement(this._element);$t(this._dialog).one(we.TRANSITION_END,r).emulateTransitionEnd(o)}else r()},e._enforceFocus=function(){var t=this;$t(document).off(an.FOCUSIN).on(an.FOCUSIN,function(e){document!==e.target&&t._element!==e.target&&0===$t(t._element).has(e.target).length&&t._element.focus()})},e._setEscapeEvent=function(){var t=this;this._isShown&&this._config.keyboard?$t(this._element).on(an.KEYDOWN_DISMISS,function(e){27===e.which&&(e.preventDefault(),t.hide())}):this._isShown||$t(this._element).off(an.KEYDOWN_DISMISS)},e._setResizeEvent=function(){var t=this;this._isShown?$t(window).on(an.RESIZE,function(e){return t.handleUpdate(e)}):$t(window).off(an.RESIZE)},e._hideModal=function(){var e=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._isTransitioning=!1,this._showBackdrop(function(){$t(document.body).removeClass(un),e._resetAdjustments(),e._resetScrollbar(),$t(e._element).trigger(an.HIDDEN)})},e._removeBackdrop=function(){this._backdrop&&($t(this._backdrop).remove(),this._backdrop=null)},e._showBackdrop=function(e){var t=this,n=$t(this._element).hasClass(fn)?fn:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className=cn,n&&this._backdrop.classList.add(n),$t(this._backdrop).appendTo(document.body),$t(this._element).on(an.CLICK_DISMISS,function(e){t._ignoreBackdropClick?t._ignoreBackdropClick=!1:e.target===e.currentTarget&&("static"===t._config.backdrop?t._element.focus():t.hide())}),n&&we.reflow(this._backdrop),$t(this._backdrop).addClass(hn),!e)return;if(!n)return void e();var i=we.getTransitionDurationFromElement(this._backdrop);$t(this._backdrop).one(we.TRANSITION_END,e).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){$t(this._backdrop).removeClass(hn);var r=function(){t._removeBackdrop(),e&&e()};if($t(this._element).hasClass(fn)){var o=we.getTransitionDurationFromElement(this._backdrop);$t(this._backdrop).one(we.TRANSITION_END,r).emulateTransitionEnd(o)}else r()}else e&&e()},e._adjustDialog=function(){var e=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&e&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!e&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},e._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},e._checkScrollbar=function(){var e=document.body.getBoundingClientRect();this._isBodyOverflowing=e.left+e.right<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},e._setScrollbar=function(){var r=this;if(this._isBodyOverflowing){var e=[].slice.call(document.querySelectorAll(gn)),t=[].slice.call(document.querySelectorAll(_n));$t(e).each(function(e,t){var n=t.style.paddingRight,i=$t(t).css("padding-right");$t(t).data("padding-right",n).css("padding-right",parseFloat(i)+r._scrollbarWidth+"px")}),$t(t).each(function(e,t){var n=t.style.marginRight,i=$t(t).css("margin-right");$t(t).data("margin-right",n).css("margin-right",parseFloat(i)-r._scrollbarWidth+"px")});var n=document.body.style.paddingRight,i=$t(document.body).css("padding-right");$t(document.body).data("padding-right",n).css("padding-right",parseFloat(i)+this._scrollbarWidth+"px")}},e._resetScrollbar=function(){var e=[].slice.call(document.querySelectorAll(gn));$t(e).each(function(e,t){var n=$t(t).data("padding-right");$t(t).removeData("padding-right"),t.style.paddingRight=n||""});var t=[].slice.call(document.querySelectorAll(""+_n));$t(t).each(function(e,t){var n=$t(t).data("margin-right");"undefined"!=typeof n&&$t(t).css("margin-right",n).removeData("margin-right")});var n=$t(document.body).data("padding-right");$t(document.body).removeData("padding-right"),document.body.style.paddingRight=n||""},e._getScrollbarWidth=function(){var e=document.createElement("div");e.className=ln,document.body.appendChild(e);var t=e.getBoundingClientRect().width-e.clientWidth;return document.body.removeChild(e),t},r._jQueryInterface=function(n,i){return this.each(function(){var e=$t(this).data(tn),t=l({},on,$t(this).data(),"object"==typeof n&&n?n:{});if(e||(e=new r(this,t),$t(this).data(tn,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n](i)}else t.show&&e.show(i)})},s(r,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return on}}]),r}(),$t(document).on(an.CLICK_DATA_API,pn,function(e){var t,n=this,i=we.getSelectorFromElement(this);i&&(t=document.querySelector(i));var r=$t(t).data(tn)?"toggle":l({},$t(t).data(),$t(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||e.preventDefault();var o=$t(t).one(an.SHOW,function(e){e.isDefaultPrevented()||o.one(an.HIDDEN,function(){$t(n).is(":visible")&&n.focus()})});vn._jQueryInterface.call($t(t),r,this)}),$t.fn[en]=vn._jQueryInterface,$t.fn[en].Constructor=vn,$t.fn[en].noConflict=function(){return $t.fn[en]=rn,vn._jQueryInterface},vn),Ki=(En="tooltip",wn="."+(bn="bs.tooltip"),Cn=(yn=t).fn[En],Tn="bs-tooltip",Sn=new RegExp("(^|\\s)"+Tn+"\\S+","g"),In={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!(An={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"}),selector:!(Dn={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)"}),placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent"},Nn="out",kn={HIDE:"hide"+wn,HIDDEN:"hidden"+wn,SHOW:(On="show")+wn,SHOWN:"shown"+wn,INSERTED:"inserted"+wn,CLICK:"click"+wn,FOCUSIN:"focusin"+wn,FOCUSOUT:"focusout"+wn,MOUSEENTER:"mouseenter"+wn,MOUSELEAVE:"mouseleave"+wn},xn="fade",Pn="show",Ln=".tooltip-inner",jn=".arrow",Hn="hover",Mn="focus",Fn="click",Wn="manual",Rn=function(){function i(e,t){if("undefined"==typeof Ct)throw new TypeError("Bootstrap tooltips require Popper.js (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=e,this.config=this._getConfig(t),this.tip=null,this._setListeners()}var e=i.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(e){if(this._isEnabled)if(e){var t=this.constructor.DATA_KEY,n=yn(e.currentTarget).data(t);n||(n=new this.constructor(e.currentTarget,this._getDelegateConfig()),yn(e.currentTarget).data(t,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(yn(this.getTipElement()).hasClass(Pn))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),yn.removeData(this.element,this.constructor.DATA_KEY),yn(this.element).off(this.constructor.EVENT_KEY),yn(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&yn(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,(this._activeTrigger=null)!==this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===yn(this.element).css("display"))throw new Error("Please use show on visible elements");var e=yn.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){yn(this.element).trigger(e);var n=yn.contains(this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!n)return;var i=this.getTipElement(),r=we.getUID(this.constructor.NAME);i.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&yn(i).addClass(xn);var o="function"==typeof this.config.placement?this.config.placement.call(this,i,this.element):this.config.placement,s=this._getAttachment(o);this.addAttachmentClass(s);var a=!1===this.config.container?document.body:yn(document).find(this.config.container);yn(i).data(this.constructor.DATA_KEY,this),yn.contains(this.element.ownerDocument.documentElement,this.tip)||yn(i).appendTo(a),yn(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new Ct(this.element,i,{placement:s,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:jn},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(e){e.originalPlacement!==e.placement&&t._handlePopperPlacementChange(e)},onUpdate:function(e){t._handlePopperPlacementChange(e)}}),yn(i).addClass(Pn),"ontouchstart"in document.documentElement&&yn(document.body).children().on("mouseover",null,yn.noop);var l=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,yn(t.element).trigger(t.constructor.Event.SHOWN),e===Nn&&t._leave(null,t)};if(yn(this.tip).hasClass(xn)){var c=we.getTransitionDurationFromElement(this.tip);yn(this.tip).one(we.TRANSITION_END,l).emulateTransitionEnd(c)}else l()}},e.hide=function(e){var t=this,n=this.getTipElement(),i=yn.Event(this.constructor.Event.HIDE),r=function(){t._hoverState!==On&&n.parentNode&&n.parentNode.removeChild(n),t._cleanTipClass(),t.element.removeAttribute("aria-describedby"),yn(t.element).trigger(t.constructor.Event.HIDDEN),null!==t._popper&&t._popper.destroy(),e&&e()};if(yn(this.element).trigger(i),!i.isDefaultPrevented()){if(yn(n).removeClass(Pn),"ontouchstart"in document.documentElement&&yn(document.body).children().off("mouseover",null,yn.noop),this._activeTrigger[Fn]=!1,this._activeTrigger[Mn]=!1,this._activeTrigger[Hn]=!1,yn(this.tip).hasClass(xn)){var o=we.getTransitionDurationFromElement(n);yn(n).one(we.TRANSITION_END,r).emulateTransitionEnd(o)}else r();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(e){yn(this.getTipElement()).addClass(Tn+"-"+e)},e.getTipElement=function(){return this.tip=this.tip||yn(this.config.template)[0],this.tip},e.setContent=function(){var e=this.getTipElement();this.setElementContent(yn(e.querySelectorAll(Ln)),this.getTitle()),yn(e).removeClass(xn+" "+Pn)},e.setElementContent=function(e,t){var n=this.config.html;"object"==typeof t&&(t.nodeType||t.jquery)?n?yn(t).parent().is(e)||e.empty().append(t):e.text(yn(t).text()):e[n?"html":"text"](t)},e.getTitle=function(){var e=this.element.getAttribute("data-original-title");return e||(e="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),e},e._getAttachment=function(e){return An[e.toUpperCase()]},e._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(e){if("click"===e)yn(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(e){return i.toggle(e)});else if(e!==Wn){var t=e===Hn?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=e===Hn?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;yn(i.element).on(t,i.config.selector,function(e){return i._enter(e)}).on(n,i.config.selector,function(e){return i._leave(e)})}yn(i.element).closest(".modal").on("hide.bs.modal",function(){return i.hide()})}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var e=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==e)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(e,t){var n=this.constructor.DATA_KEY;(t=t||yn(e.currentTarget).data(n))||(t=new this.constructor(e.currentTarget,this._getDelegateConfig()),yn(e.currentTarget).data(n,t)),e&&(t._activeTrigger["focusin"===e.type?Mn:Hn]=!0),yn(t.getTipElement()).hasClass(Pn)||t._hoverState===On?t._hoverState=On:(clearTimeout(t._timeout),t._hoverState=On,t.config.delay&&t.config.delay.show?t._timeout=setTimeout(function(){t._hoverState===On&&t.show()},t.config.delay.show):t.show())},e._leave=function(e,t){var n=this.constructor.DATA_KEY;(t=t||yn(e.currentTarget).data(n))||(t=new this.constructor(e.currentTarget,this._getDelegateConfig()),yn(e.currentTarget).data(n,t)),e&&(t._activeTrigger["focusout"===e.type?Mn:Hn]=!1),t._isWithActiveTrigger()||(clearTimeout(t._timeout),t._hoverState=Nn,t.config.delay&&t.config.delay.hide?t._timeout=setTimeout(function(){t._hoverState===Nn&&t.hide()},t.config.delay.hide):t.hide())},e._isWithActiveTrigger=function(){for(var e in this._activeTrigger)if(this._activeTrigger[e])return!0;return!1},e._getConfig=function(e){return"number"==typeof(e=l({},this.constructor.Default,yn(this.element).data(),"object"==typeof e&&e?e:{})).delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),we.typeCheckConfig(En,e,this.constructor.DefaultType),e},e._getDelegateConfig=function(){var e={};if(this.config)for(var t in this.config)this.constructor.Default[t]!==this.config[t]&&(e[t]=this.config[t]);return e},e._cleanTipClass=function(){var e=yn(this.getTipElement()),t=e.attr("class").match(Sn);null!==t&&t.length&&e.removeClass(t.join(""))},e._handlePopperPlacementChange=function(e){var t=e.instance;this.tip=t.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(e.placement))},e._fixTransition=function(){var e=this.getTipElement(),t=this.config.animation;null===e.getAttribute("x-placement")&&(yn(e).removeClass(xn),this.config.animation=!1,this.hide(),this.show(),this.config.animation=t)},i._jQueryInterface=function(n){return this.each(function(){var e=yn(this).data(bn),t="object"==typeof n&&n;if((e||!/dispose|hide/.test(n))&&(e||(e=new i(this,t),yn(this).data(bn,e)),"string"==typeof n)){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return In}},{key:"NAME",get:function(){return En}},{key:"DATA_KEY",get:function(){return bn}},{key:"Event",get:function(){return kn}},{key:"EVENT_KEY",get:function(){return wn}},{key:"DefaultType",get:function(){return Dn}}]),i}(),yn.fn[En]=Rn._jQueryInterface,yn.fn[En].Constructor=Rn,yn.fn[En].noConflict=function(){return yn.fn[En]=Cn,Rn._jQueryInterface},Rn),Qi=(Bn="popover",Kn="."+(qn="bs.popover"),Qn=(Un=t).fn[Bn],Yn="bs-popover",Vn=new RegExp("(^|\\s)"+Yn+"\\S+","g"),zn=l({},Ki.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),Gn=l({},Ki.DefaultType,{content:"(string|element|function)"}),Jn="fade",Xn=".popover-header",$n=".popover-body",ei={HIDE:"hide"+Kn,HIDDEN:"hidden"+Kn,SHOW:(Zn="show")+Kn,SHOWN:"shown"+Kn,INSERTED:"inserted"+Kn,CLICK:"click"+Kn,FOCUSIN:"focusin"+Kn,FOCUSOUT:"focusout"+Kn,MOUSEENTER:"mouseenter"+Kn,MOUSELEAVE:"mouseleave"+Kn},ti=function(e){var t,n;function i(){return e.apply(this,arguments)||this}n=e,(t=i).prototype=Object.create(n.prototype),(t.prototype.constructor=t).__proto__=n;var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(e){Un(this.getTipElement()).addClass(Yn+"-"+e)},r.getTipElement=function(){return this.tip=this.tip||Un(this.config.template)[0],this.tip},r.setContent=function(){var e=Un(this.getTipElement());this.setElementContent(e.find(Xn),this.getTitle());var t=this._getContent();"function"==typeof t&&(t=t.call(this.element)),this.setElementContent(e.find($n),t),e.removeClass(Jn+" "+Zn)},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var e=Un(this.getTipElement()),t=e.attr("class").match(Vn);null!==t&&0<t.length&&e.removeClass(t.join(""))},i._jQueryInterface=function(n){return this.each(function(){var e=Un(this).data(qn),t="object"==typeof n?n:null;if((e||!/destroy|hide/.test(n))&&(e||(e=new i(this,t),Un(this).data(qn,e)),"string"==typeof n)){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return zn}},{key:"NAME",get:function(){return Bn}},{key:"DATA_KEY",get:function(){return qn}},{key:"Event",get:function(){return ei}},{key:"EVENT_KEY",get:function(){return Kn}},{key:"DefaultType",get:function(){return Gn}}]),i}(Ki),Un.fn[Bn]=ti._jQueryInterface,Un.fn[Bn].Constructor=ti,Un.fn[Bn].noConflict=function(){return Un.fn[Bn]=Qn,ti._jQueryInterface},ti),Yi=(ii="scrollspy",oi="."+(ri="bs.scrollspy"),si=(ni=t).fn[ii],ai={offset:10,method:"auto",target:""},li={offset:"number",method:"string",target:"(string|element)"},ci={ACTIVATE:"activate"+oi,SCROLL:"scroll"+oi,LOAD_DATA_API:"load"+oi+".data-api"},ui="dropdown-item",fi="active",hi='[data-spy="scroll"]',di=".active",pi=".nav, .list-group",mi=".nav-link",gi=".nav-item",_i=".list-group-item",vi=".dropdown",yi=".dropdown-item",Ei=".dropdown-toggle",bi="offset",wi="position",Ci=function(){function n(e,t){var n=this;this._element=e,this._scrollElement="BODY"===e.tagName?window:e,this._config=this._getConfig(t),this._selector=this._config.target+" "+mi+","+this._config.target+" "+_i+","+this._config.target+" "+yi,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,ni(this._scrollElement).on(ci.SCROLL,function(e){return n._process(e)}),this.refresh(),this._process()}var e=n.prototype;return e.refresh=function(){var t=this,e=this._scrollElement===this._scrollElement.window?bi:wi,r="auto"===this._config.method?e:this._config.method,o=r===wi?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map(function(e){var t,n=we.getSelectorFromElement(e);if(n&&(t=document.querySelector(n)),t){var i=t.getBoundingClientRect();if(i.width||i.height)return[ni(t)[r]().top+o,n]}return null}).filter(function(e){return e}).sort(function(e,t){return e[0]-t[0]}).forEach(function(e){t._offsets.push(e[0]),t._targets.push(e[1])})},e.dispose=function(){ni.removeData(this._element,ri),ni(this._scrollElement).off(oi),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},e._getConfig=function(e){if("string"!=typeof(e=l({},ai,"object"==typeof e&&e?e:{})).target){var t=ni(e.target).attr("id");t||(t=we.getUID(ii),ni(e.target).attr("id",t)),e.target="#"+t}return we.typeCheckConfig(ii,e,li),e},e._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},e._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},e._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},e._process=function(){var e=this._getScrollTop()+this._config.offset,t=this._getScrollHeight(),n=this._config.offset+t-this._getOffsetHeight();if(this._scrollHeight!==t&&this.refresh(),n<=e){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&e<this._offsets[0]&&0<this._offsets[0])return this._activeTarget=null,void this._clear();for(var r=this._offsets.length;r--;){this._activeTarget!==this._targets[r]&&e>=this._offsets[r]&&("undefined"==typeof this._offsets[r+1]||e<this._offsets[r+1])&&this._activate(this._targets[r])}}},e._activate=function(t){this._activeTarget=t,this._clear();var e=this._selector.split(",");e=e.map(function(e){return e+'[data-target="'+t+'"],'+e+'[href="'+t+'"]'});var n=ni([].slice.call(document.querySelectorAll(e.join(","))));n.hasClass(ui)?(n.closest(vi).find(Ei).addClass(fi),n.addClass(fi)):(n.addClass(fi),n.parents(pi).prev(mi+", "+_i).addClass(fi),n.parents(pi).prev(gi).children(mi).addClass(fi)),ni(this._scrollElement).trigger(ci.ACTIVATE,{relatedTarget:t})},e._clear=function(){var e=[].slice.call(document.querySelectorAll(this._selector));ni(e).filter(di).removeClass(fi)},n._jQueryInterface=function(t){return this.each(function(){var e=ni(this).data(ri);if(e||(e=new n(this,"object"==typeof t&&t),ni(this).data(ri,e)),"string"==typeof t){if("undefined"==typeof e[t])throw new TypeError('No method named "'+t+'"');e[t]()}})},s(n,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return ai}}]),n}(),ni(window).on(ci.LOAD_DATA_API,function(){for(var e=[].slice.call(document.querySelectorAll(hi)),t=e.length;t--;){var n=ni(e[t]);Ci._jQueryInterface.call(n,n.data())}}),ni.fn[ii]=Ci._jQueryInterface,ni.fn[ii].Constructor=Ci,ni.fn[ii].noConflict=function(){return ni.fn[ii]=si,Ci._jQueryInterface},Ci),Vi=(Di="."+(Si="bs.tab"),Ai=(Ti=t).fn.tab,Ii={HIDE:"hide"+Di,HIDDEN:"hidden"+Di,SHOW:"show"+Di,SHOWN:"shown"+Di,CLICK_DATA_API:"click"+Di+".data-api"},Oi="dropdown-menu",Ni="active",ki="disabled",xi="fade",Pi="show",Li=".dropdown",ji=".nav, .list-group",Hi=".active",Mi="> li > .active",Fi='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',Wi=".dropdown-toggle",Ri="> .dropdown-menu .active",Ui=function(){function i(e){this._element=e}var e=i.prototype;return e.show=function(){var n=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&Ti(this._element).hasClass(Ni)||Ti(this._element).hasClass(ki))){var e,i,t=Ti(this._element).closest(ji)[0],r=we.getSelectorFromElement(this._element);if(t){var o="UL"===t.nodeName?Mi:Hi;i=(i=Ti.makeArray(Ti(t).find(o)))[i.length-1]}var s=Ti.Event(Ii.HIDE,{relatedTarget:this._element}),a=Ti.Event(Ii.SHOW,{relatedTarget:i});if(i&&Ti(i).trigger(s),Ti(this._element).trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){r&&(e=document.querySelector(r)),this._activate(this._element,t);var l=function(){var e=Ti.Event(Ii.HIDDEN,{relatedTarget:n._element}),t=Ti.Event(Ii.SHOWN,{relatedTarget:i});Ti(i).trigger(e),Ti(n._element).trigger(t)};e?this._activate(e,e.parentNode,l):l()}}},e.dispose=function(){Ti.removeData(this._element,Si),this._element=null},e._activate=function(e,t,n){var i=this,r=("UL"===t.nodeName?Ti(t).find(Mi):Ti(t).children(Hi))[0],o=n&&r&&Ti(r).hasClass(xi),s=function(){return i._transitionComplete(e,r,n)};if(r&&o){var a=we.getTransitionDurationFromElement(r);Ti(r).one(we.TRANSITION_END,s).emulateTransitionEnd(a)}else s()},e._transitionComplete=function(e,t,n){if(t){Ti(t).removeClass(Pi+" "+Ni);var i=Ti(t.parentNode).find(Ri)[0];i&&Ti(i).removeClass(Ni),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!1)}if(Ti(e).addClass(Ni),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!0),we.reflow(e),Ti(e).addClass(Pi),e.parentNode&&Ti(e.parentNode).hasClass(Oi)){var r=Ti(e).closest(Li)[0];if(r){var o=[].slice.call(r.querySelectorAll(Wi));Ti(o).addClass(Ni)}e.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var e=Ti(this),t=e.data(Si);if(t||(t=new i(this),e.data(Si,t)),"string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}}]),i}(),Ti(document).on(Ii.CLICK_DATA_API,Fi,function(e){e.preventDefault(),Ui._jQueryInterface.call(Ti(this),"show")}),Ti.fn.tab=Ui._jQueryInterface,Ti.fn.tab.Constructor=Ui,Ti.fn.tab.noConflict=function(){return Ti.fn.tab=Ai,Ui._jQueryInterface},Ui);!function(e){if("undefined"==typeof e)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=e.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||4<=t[0])throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}(t),e.Util=we,e.Alert=Ce,e.Button=Te,e.Carousel=Se,e.Collapse=De,e.Dropdown=Bi,e.Modal=qi,e.Popover=Qi,e.Scrollspy=Yi,e.Tab=Vi,e.Tooltip=Ki,Object.defineProperty(e,"__esModule",{value:!0})}); | |
6 | //# sourceMappingURL=bootstrap.bundle.min.js.map⏎ |
0 | /*! | |
1 | * Bootstrap v4.1.3 (https://getbootstrap.com/) | |
2 | * Copyright 2011-2018 The Bootstrap Authors | |
3 | * Copyright 2011-2018 Twitter, Inc. | |
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | |
5 | */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:500;line-height:1.2;color:inherit}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"\2014 \00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:none}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(2.25rem + 2px);padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label::after,.was-validated .custom-file-input:valid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label::after,.was-validated .custom-file-input:invalid~.custom-file-label::after{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary{color:#007bff;background-color:transparent;background-image:none;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;background-color:transparent;background-image:none;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;background-color:transparent;background-image:none;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;background-color:transparent;background-image:none;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;background-color:transparent;background-image:none;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;background-color:transparent;background-image:none;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;background-color:transparent}.btn-link:hover{color:#0056b3;text-decoration:underline;background-color:transparent;border-color:transparent}.btn-link.focus,.btn-link:focus{text-decoration:underline;border-color:transparent;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media screen and (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media screen and (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-right{right:0;left:auto}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:""}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:0 1 auto;flex:0 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group,.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{height:calc(2.875rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{height:calc(1.8125rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label::before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:"";-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#dee2e6}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:"";background-repeat:no-repeat;background-position:center center;background-size:50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label::after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:75%}.custom-select-lg{height:calc(2.875rem + 2px);padding-top:.375rem;padding-bottom:.375rem;font-size:125%}.custom-file{position:relative;display:inline-block;width:100%;height:calc(2.25rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(2.25rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-label::after{border-color:#80bdff}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:"Browse"}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(2.25rem + 2px);padding:.375rem .75rem;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:2.25rem;padding:.375rem .75rem;line-height:1.5;color:#495057;content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;padding-left:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media screen and (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media screen and (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child){border-radius:0}.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion .card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion .card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion .card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion .card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#0062cc}.badge-secondary{color:#fff;background-color:#6c757d}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#fff;text-decoration:none;background-color:#545b62}.badge-success{color:#fff;background-color:#28a745}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#1e7e34}.badge-info{color:#fff;background-color:#17a2b8}.badge-info[href]:focus,.badge-info[href]:hover{color:#fff;text-decoration:none;background-color:#117a8b}.badge-warning{color:#212529;background-color:#ffc107}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#d39e00}.badge-danger{color:#fff;background-color:#dc3545}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#bd2130}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media screen and (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:not(:disabled):not(.disabled){cursor:pointer}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{color:#000;text-decoration:none;opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-25%);transform:translate(0,-25%)}@media screen and (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - (.5rem * 2))}.modal-dialog-centered::before{display:block;height:calc(100vh - (.5rem * 2));content:""}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - (1.75rem * 2))}.modal-dialog-centered::before{height:calc(100vh - (1.75rem * 2))}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::after,.bs-popover-top .arrow::before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow::before,.bs-popover-top .arrow::before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow::after,.bs-popover-top .arrow::after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::after,.bs-popover-right .arrow::before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow::before,.bs-popover-right .arrow::before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow::after,.bs-popover-right .arrow::after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::after,.bs-popover-bottom .arrow::before{border-width:0 .5rem .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow::before,.bs-popover-bottom .arrow::before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow::after,.bs-popover-bottom .arrow::after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::after,.bs-popover-left .arrow::before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow::before,.bs-popover-left .arrow::before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow::after,.bs-popover-left .arrow::after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;-ms-flex-align:center;align-items:center;width:100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block;transition:-webkit-transform .6s ease;transition:transform .6s ease;transition:transform .6s ease,-webkit-transform .6s ease}@media screen and (prefers-reduced-motion:reduce){.carousel-item-next,.carousel-item-prev,.carousel-item.active{transition:none}}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.active.carousel-item-right,.carousel-item-next{-webkit-transform:translateX(100%);transform:translateX(100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-right,.carousel-item-next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translateX(-100%);transform:translateX(-100%)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.active.carousel-item-left,.carousel-item-prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.carousel-fade .carousel-item{opacity:0;transition-duration:.6s;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{opacity:0}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translateX(0);transform:translateX(0)}@supports ((-webkit-transform-style:preserve-3d) or (transform-style:preserve-3d)){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-prev,.carousel-fade .carousel-item-next,.carousel-fade .carousel-item-prev,.carousel-fade .carousel-item.active{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat center center;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:rgba(255,255,255,.5)}.carousel-indicators li::before{position:absolute;top:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li::after{position:absolute;bottom:-10px;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0062cc!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#545b62!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#1e7e34!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#117a8b!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#d39e00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#bd2130!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}} | |
6 | /*# sourceMappingURL=bootstrap.min.css.map */⏎ |
0 | @import url(bootstrap-4.1.3.min.css); | |
1 | a { | |
2 | color: #008d06; } | |
3 | a:hover, a.current, a.active { | |
4 | color: #f48400; } | |
5 | a.current, a.active { | |
6 | font-weight: 500; } | |
7 | ||
8 | .doc-sidebar a:hover, .modal-body a:hover { | |
9 | text-decoration: none; } | |
10 | ||
11 | code { | |
12 | color: #212529; } | |
13 | ||
14 | .highlight { | |
15 | border-radius: 0.3em; } | |
16 | .highlight pre { | |
17 | padding: 0.7em; | |
18 | color: #fff; } | |
19 | .highlight .c1 { | |
20 | color: #666; } | |
21 | .highlight .k, .highlight .kn, .highlight .ow { | |
22 | color: #008d06; } | |
23 | .highlight .nb, .highlight .ne, .highlight .nf, .highlight .vm { | |
24 | color: #f48400; } | |
25 | .highlight .s1, .highlight .s2, .highlight .sa, .highlight .se, .highlight .si, .highlight .mi { | |
26 | color: #ff7efd; } | |
27 | .highlight .c1, .highlight .nf, .highlight .sa, .highlight .se, .highlight .si { | |
28 | font-style: italic; } | |
29 | .highlight .k, .highlight .kn, .highlight .ow { | |
30 | font-weight: bold; } | |
31 | ||
32 | .doc-content { | |
33 | padding-top: 0.5em; | |
34 | top: 3.5625em; | |
35 | position: fixed; | |
36 | bottom: 0; | |
37 | overflow-y: auto; } | |
38 | ||
39 | .doc-sidebar { | |
40 | position: fixed; | |
41 | padding-top: 0.5em; | |
42 | top: 3.5625em; | |
43 | bottom: 0; | |
44 | right: 0; | |
45 | overflow-y: auto; } | |
46 | .doc-sidebar ul { | |
47 | list-style-type: none; | |
48 | padding-left: 1em; } | |
49 | .doc-sidebar ul.current { | |
50 | padding-left: 0; } | |
51 | .doc-sidebar li { | |
52 | padding-top: 0.2em; | |
53 | padding-bottom: 0.2em; } | |
54 | ||
55 | .admonition { | |
56 | border-radius: 0.3em; | |
57 | border: 1px solid #ccc; | |
58 | background-color: #f8f9fa; } | |
59 | .admonition .admonition-title { | |
60 | color: #ff7efd; } | |
61 | ||
62 | .topic { | |
63 | border-radius: 0.3em; | |
64 | background-color: #f8f9fa; } | |
65 | ||
66 | .nav-link { | |
67 | padding-top: 0; | |
68 | padding-bottom: 0; } | |
69 | ||
70 | .btn-success { | |
71 | background-color: #008d06; | |
72 | border-color: #008d06; } | |
73 | .btn-success:hover { | |
74 | background-color: #f48400; | |
75 | border-color: #f48400; } | |
76 | ||
77 | /*# sourceMappingURL=instaloader.css.map */ |
0 | $(function () { | |
1 | $('[data-toggle="tooltip"]').tooltip(); | |
2 | ||
3 | $('.doc-sidebar > ul > li.current').attr("id", "localtoc"); | |
4 | $('#localtoc ul').addClass("nav flex-column"); | |
5 | $('#localtoc ul li').addClass("nav-item"); | |
6 | $('#localtoc ul li a').addClass("nav-link"); | |
7 | $('.doc-content').scrollspy({target: '#localtoc'}); | |
8 | ||
9 | const top_href = '#' + $('.section:first').attr("id"); | |
10 | $('#localtoc > a.current').attr("href", top_href); | |
11 | ||
12 | $('#navbarToc a').on("click", function () { | |
13 | const href = $(this).attr("href"); | |
14 | if (href === '#') { | |
15 | window.location.href = top_href; | |
16 | } else { | |
17 | window.location.href = href; | |
18 | } | |
19 | $('#navbarToc').modal('hide'); | |
20 | }); | |
21 | });⏎ |
0 | @import 'bootstrap-4.1.3.min.css'; | |
1 | ||
2 | $color_instaloader_main: #008d06; | |
3 | $color_instaloader_accent: #f48400; | |
4 | $color_instaloader_hyper: #ff7efd; | |
5 | $color_normal_text: #212529; | |
6 | $color_light_bg: #f8f9fa; | |
7 | ||
8 | a { | |
9 | color: $color_instaloader_main; | |
10 | ||
11 | &:hover, &.current, &.active { | |
12 | color: $color_instaloader_accent; | |
13 | } | |
14 | ||
15 | &.current, &.active { | |
16 | font-weight: 500; | |
17 | } | |
18 | } | |
19 | ||
20 | .doc-sidebar, .modal-body { | |
21 | a:hover { | |
22 | text-decoration: none | |
23 | } | |
24 | } | |
25 | ||
26 | code { | |
27 | color: $color_normal_text; | |
28 | } | |
29 | ||
30 | .highlight { | |
31 | border-radius: 0.3em; | |
32 | ||
33 | pre { | |
34 | padding: 0.7em; | |
35 | color: #fff; | |
36 | } | |
37 | ||
38 | .c1 { | |
39 | color: #666; | |
40 | } | |
41 | ||
42 | .k, .kn, .ow { | |
43 | color: $color_instaloader_main | |
44 | } | |
45 | ||
46 | .nb, .ne, .nf, .vm { | |
47 | color: $color_instaloader_accent | |
48 | } | |
49 | ||
50 | .s1, .s2, .sa, .se, .si, .mi { | |
51 | color: $color_instaloader_hyper | |
52 | } | |
53 | ||
54 | .c1, .nf, .sa, .se, .si { | |
55 | font-style: italic; | |
56 | } | |
57 | ||
58 | .k, .kn, .ow { | |
59 | font-weight: bold | |
60 | } | |
61 | } | |
62 | ||
63 | .doc-content { | |
64 | padding-top: 0.5em; | |
65 | top: 3.5625em; | |
66 | position: fixed; | |
67 | bottom: 0; | |
68 | overflow-y: auto; | |
69 | } | |
70 | ||
71 | .doc-sidebar { | |
72 | position: fixed; | |
73 | padding-top: 0.5em; | |
74 | top: 3.5625em; | |
75 | bottom: 0; | |
76 | right: 0; | |
77 | overflow-y: auto; | |
78 | ||
79 | ul { | |
80 | list-style-type: none; | |
81 | padding-left: 1em; | |
82 | ||
83 | &.current { | |
84 | padding-left: 0; | |
85 | } | |
86 | } | |
87 | ||
88 | li { | |
89 | padding-top: 0.2em; | |
90 | padding-bottom: 0.2em; | |
91 | ||
92 | } | |
93 | } | |
94 | ||
95 | .admonition { | |
96 | border-radius: 0.3em; | |
97 | border: 1px solid #ccc; | |
98 | background-color: $color_light_bg; | |
99 | ||
100 | .admonition-title { | |
101 | color: $color_instaloader_hyper; | |
102 | } | |
103 | } | |
104 | ||
105 | .topic { | |
106 | border-radius: 0.3em; | |
107 | background-color: $color_light_bg; | |
108 | } | |
109 | ||
110 | .nav-link { | |
111 | padding-top: 0; | |
112 | padding-bottom: 0; | |
113 | } | |
114 | ||
115 | .btn-success { | |
116 | background-color: $color_instaloader_main; | |
117 | border-color: $color_instaloader_main; | |
118 | ||
119 | &:hover { | |
120 | background-color: $color_instaloader_accent; | |
121 | border-color: $color_instaloader_accent; | |
122 | } | |
123 | }⏎ |
0 | :root{--primary: #008306;--light: #f8f9fa;--breakpoint-xs: 0;--breakpoint-sm: 576px;--breakpoint-md: 768px;--breakpoint-lg: 992px;--breakpoint-xl: 1200px;--font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace}*,*::before,*::after{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0 !important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-original-title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:#008306;text-decoration:none;background-color:transparent}a:hover{color:#e57c00;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{padding:0;border-style:none}input[type=radio],input[type=checkbox]{box-sizing:border-box;padding:0}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none !important}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:2.5rem}h2,.h2{font-size:2rem}h3,.h3{font-size:1.75rem}h4,.h4{font-size:1.5rem}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}small,.small{font-size:80%;font-weight:400}mark,.mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:"— "}code{font-size:87.5%;color:#212529;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media(min-width: 576px){.container{max-width:540px}}@media(min-width: 768px){.container{max-width:720px}}@media(min-width: 992px){.container{max-width:960px}}@media(min-width: 1200px){.container{max-width:1140px}}.container-fluid,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col-xl,.col-xl-auto,.col-xl-12,.col-xl-11,.col-xl-10,.col-xl-9,.col-xl-8,.col-xl-7,.col-xl-6,.col-xl-5,.col-xl-4,.col-xl-3,.col-xl-2,.col-xl-1,.col-lg,.col-lg-auto,.col-lg-12,.col-lg-11,.col-lg-10,.col-lg-9,.col-lg-8,.col-lg-7,.col-lg-6,.col-lg-5,.col-lg-4,.col-lg-3,.col-lg-2,.col-lg-1,.col-md,.col-md-auto,.col-md-12,.col-md-11,.col-md-10,.col-md-9,.col-md-8,.col-md-7,.col-md-6,.col-md-5,.col-md-4,.col-md-3,.col-md-2,.col-md-1,.col-sm,.col-sm-auto,.col-sm-12,.col-sm-11,.col-sm-10,.col-sm-9,.col-sm-8,.col-sm-7,.col-sm-6,.col-sm-5,.col-sm-4,.col-sm-3,.col-sm-2,.col-sm-1,.col,.col-auto,.col-12,.col-11,.col-10,.col-9,.col-8,.col-7,.col-6,.col-5,.col-4,.col-3,.col-2,.col-1{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;min-width:0;max-width:100%}.row-cols-1>*{flex:0 0 100%;max-width:100%}.row-cols-2>*{flex:0 0 50%;max-width:50%}.row-cols-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-4>*{flex:0 0 25%;max-width:25%}.row-cols-5>*{flex:0 0 20%;max-width:20%}.row-cols-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto;max-width:100%}.col-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media(min-width: 576px){.col-sm{flex-basis:0;flex-grow:1;min-width:0;max-width:100%}.row-cols-sm-1>*{flex:0 0 100%;max-width:100%}.row-cols-sm-2>*{flex:0 0 50%;max-width:50%}.row-cols-sm-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 25%;max-width:25%}.row-cols-sm-5>*{flex:0 0 20%;max-width:20%}.row-cols-sm-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media(min-width: 768px){.col-md{flex-basis:0;flex-grow:1;min-width:0;max-width:100%}.row-cols-md-1>*{flex:0 0 100%;max-width:100%}.row-cols-md-2>*{flex:0 0 50%;max-width:50%}.row-cols-md-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-md-4>*{flex:0 0 25%;max-width:25%}.row-cols-md-5>*{flex:0 0 20%;max-width:20%}.row-cols-md-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto;max-width:100%}.col-md-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media(min-width: 992px){.col-lg{flex-basis:0;flex-grow:1;min-width:0;max-width:100%}.row-cols-lg-1>*{flex:0 0 100%;max-width:100%}.row-cols-lg-2>*{flex:0 0 50%;max-width:50%}.row-cols-lg-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 25%;max-width:25%}.row-cols-lg-5>*{flex:0 0 20%;max-width:20%}.row-cols-lg-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media(min-width: 1200px){.col-xl{flex-basis:0;flex-grow:1;min-width:0;max-width:100%}.row-cols-xl-1>*{flex:0 0 100%;max-width:100%}.row-cols-xl-2>*{flex:0 0 50%;max-width:50%}.row-cols-xl-3>*{flex:0 0 33.3333333333%;max-width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 25%;max-width:25%}.row-cols-xl-5>*{flex:0 0 20%;max-width:20%}.row-cols-xl-6>*{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.form-control{display:block;width:100%;height:calc(1.5em + 0.75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:-moz-focusring{color:transparent;text-shadow:0 0 0 #495057}.form-control:focus{color:#495057;background-color:#fff;border-color:#03ff0e;outline:0;box-shadow:0 0 0 .2rem rgba(0,131,6,.25)}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;font-size:1rem;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + 0.5rem + 2px);padding:.25rem .5rem;font-size:0.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[size],select.form-control[multiple]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.75rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#28a745;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .custom-select:valid,.custom-select.is-valid{border-color:#28a745;padding-right:calc(0.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .custom-select:valid:focus,.custom-select.is-valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#28a745}.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip,.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip{display:block}.was-validated .custom-control-input:valid~.custom-control-label,.custom-control-input.is-valid~.custom-control-label{color:#28a745}.was-validated .custom-control-input:valid~.custom-control-label::before,.custom-control-input.is-valid~.custom-control-label::before{border-color:#28a745}.was-validated .custom-control-input:valid:checked~.custom-control-label::before,.custom-control-input.is-valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.was-validated .custom-control-input:valid:focus~.custom-control-label::before,.custom-control-input.is-valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before,.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.was-validated .custom-file-input:valid~.custom-file-label,.custom-file-input.is-valid~.custom-file-label{border-color:#28a745}.was-validated .custom-file-input:valid:focus~.custom-file-label,.custom-file-input.is-valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.75rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dc3545;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .custom-select:invalid,.custom-select.is-invalid{border-color:#dc3545;padding-right:calc(0.75em + 2.3125rem);background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23dc3545' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .custom-select:invalid:focus,.custom-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip,.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip{display:block}.was-validated .custom-control-input:invalid~.custom-control-label,.custom-control-input.is-invalid~.custom-control-label{color:#dc3545}.was-validated .custom-control-input:invalid~.custom-control-label::before,.custom-control-input.is-invalid~.custom-control-label::before{border-color:#dc3545}.was-validated .custom-control-input:invalid:checked~.custom-control-label::before,.custom-control-input.is-invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.was-validated .custom-control-input:invalid:focus~.custom-control-label::before,.custom-control-input.is-invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before,.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.was-validated .custom-file-input:invalid~.custom-file-label,.custom-file-input.is-invalid~.custom-file-label{border-color:#dc3545}.was-validated .custom-file-input:invalid:focus~.custom-file-label,.custom-file-input.is-invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media(min-width: 576px){.form-inline label{display:flex;align-items:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:flex;flex:0 0 auto;flex-flow:row wrap;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group,.form-inline .custom-select{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn:focus,.btn.focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,131,6,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#008306;border-color:#008306}.btn-primary:hover{color:#fff;background-color:#005d04;border-color:#005003}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#005d04;border-color:#005003;box-shadow:0 0 0 .2rem rgba(38,150,43,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#008306;border-color:#008306}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#005003;border-color:#004303}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,150,43,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light:focus,.btn-light.focus{color:#212529;background-color:#e2e6ea;border-color:#dae0e5;box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled):active,.btn-light:not(:disabled):not(.disabled).active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled):active:focus,.btn-light:not(:disabled):not(.disabled).active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-outline-primary{color:#008306;border-color:#008306}.btn-outline-primary:hover{color:#fff;background-color:#008306;border-color:#008306}.btn-outline-primary:focus,.btn-outline-primary.focus{box-shadow:0 0 0 .2rem rgba(0,131,6,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#008306;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled):active,.btn-outline-primary:not(:disabled):not(.disabled).active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#008306;border-color:#008306}.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,131,6,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:focus,.btn-outline-light.focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled):active,.btn-outline-light:not(:disabled):not(.disabled).active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled):active:focus,.btn-outline-light:not(:disabled):not(.disabled).active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-link{font-weight:400;color:#008306;text-decoration:none}.btn-link:hover{color:#e57c00;text-decoration:underline}.btn-link:focus,.btn-link.focus{text-decoration:underline}.btn-link:disabled,.btn-link.disabled{color:#6c757d;pointer-events:none}.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-sm{padding:.25rem .5rem;font-size:0.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:hover,.nav-link:focus{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#008306}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding:.5rem 1rem}.navbar .container,.navbar .container-fluid,.navbar .container-sm,.navbar .container-md,.navbar .container-lg,.navbar .container-xl{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:hover,.navbar-toggler:focus{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat center center;background-size:100% 100%}@media(max-width: 575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-xl{padding-right:0;padding-left:0}}@media(min-width: 576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid,.navbar-expand-sm>.container-sm,.navbar-expand-sm>.container-md,.navbar-expand-sm>.container-lg,.navbar-expand-sm>.container-xl{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media(max-width: 767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-md,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-xl{padding-right:0;padding-left:0}}@media(min-width: 768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid,.navbar-expand-md>.container-sm,.navbar-expand-md>.container-md,.navbar-expand-md>.container-lg,.navbar-expand-md>.container-xl{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media(max-width: 991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-xl{padding-right:0;padding-left:0}}@media(min-width: 992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid,.navbar-expand-lg>.container-sm,.navbar-expand-lg>.container-md,.navbar-expand-lg>.container-lg,.navbar-expand-lg>.container-xl{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media(max-width: 1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-xl{padding-right:0;padding-left:0}}@media(min-width: 1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid,.navbar-expand-xl>.container-sm,.navbar-expand-xl>.container-md,.navbar-expand-xl>.container-lg,.navbar-expand-xl>.container-xl{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-sm,.navbar-expand>.container-md,.navbar-expand>.container-lg,.navbar-expand>.container-xl{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid,.navbar-expand>.container-sm,.navbar-expand>.container-md,.navbar-expand>.container-lg,.navbar-expand>.container-xl{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:0.75rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top,.bs-tooltip-auto[x-placement^=top]{padding:.4rem 0}.bs-tooltip-top .arrow,.bs-tooltip-auto[x-placement^=top] .arrow{bottom:0}.bs-tooltip-top .arrow::before,.bs-tooltip-auto[x-placement^=top] .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-right,.bs-tooltip-auto[x-placement^=right]{padding:0 .4rem}.bs-tooltip-right .arrow,.bs-tooltip-auto[x-placement^=right] .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-right .arrow::before,.bs-tooltip-auto[x-placement^=right] .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-bottom,.bs-tooltip-auto[x-placement^=bottom]{padding:.4rem 0}.bs-tooltip-bottom .arrow,.bs-tooltip-auto[x-placement^=bottom] .arrow{top:0}.bs-tooltip-bottom .arrow::before,.bs-tooltip-auto[x-placement^=bottom] .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-left,.bs-tooltip-auto[x-placement^=left]{padding:0 .4rem}.bs-tooltip-left .arrow,.bs-tooltip-auto[x-placement^=left] .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-left .arrow::before,.bs-tooltip-auto[x-placement^=left] .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.bg-primary{background-color:#008306 !important}a.bg-primary:hover,a.bg-primary:focus,button.bg-primary:hover,button.bg-primary:focus{background-color:#005003 !important}.bg-light{background-color:#f8f9fa !important}a.bg-light:hover,a.bg-light:focus,button.bg-light:hover,button.bg-light:focus{background-color:#dae0e5 !important}.bg-white{background-color:#fff !important}.bg-transparent{background-color:transparent !important}.border{border:1px solid #dee2e6 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-right{border-right:1px solid #dee2e6 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-left{border-left:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.border-primary{border-color:#008306 !important}.border-light{border-color:#f8f9fa !important}.border-white{border-color:#fff !important}.rounded-sm{border-radius:.2rem !important}.rounded{border-radius:.25rem !important}.rounded-top{border-top-left-radius:.25rem !important;border-top-right-radius:.25rem !important}.rounded-right{border-top-right-radius:.25rem !important;border-bottom-right-radius:.25rem !important}.rounded-bottom{border-bottom-right-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-left{border-top-left-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-lg{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-0{border-radius:0 !important}.d-none{display:none !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}@media(min-width: 576px){.d-sm-none{display:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}}@media(min-width: 768px){.d-md-none{display:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}}@media(min-width: 992px){.d-lg-none{display:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}}@media(min-width: 1200px){.d-xl-none{display:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}}@media print{.d-print-none{display:none !important}.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-fill{flex:1 1 auto !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}@media(min-width: 576px){.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}}@media(min-width: 768px){.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}}@media(min-width: 992px){.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}}@media(min-width: 1200px){.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.m-0{margin:0 !important}.mt-0,.my-0{margin-top:0 !important}.mr-0,.mx-0{margin-right:0 !important}.mb-0,.my-0{margin-bottom:0 !important}.ml-0,.mx-0{margin-left:0 !important}.m-1{margin:.25rem !important}.mt-1,.my-1{margin-top:.25rem !important}.mr-1,.mx-1{margin-right:.25rem !important}.mb-1,.my-1{margin-bottom:.25rem !important}.ml-1,.mx-1{margin-left:.25rem !important}.m-2{margin:.5rem !important}.mt-2,.my-2{margin-top:.5rem !important}.mr-2,.mx-2{margin-right:.5rem !important}.mb-2,.my-2{margin-bottom:.5rem !important}.ml-2,.mx-2{margin-left:.5rem !important}.m-3{margin:1rem !important}.mt-3,.my-3{margin-top:1rem !important}.mr-3,.mx-3{margin-right:1rem !important}.mb-3,.my-3{margin-bottom:1rem !important}.ml-3,.mx-3{margin-left:1rem !important}.m-4{margin:1.5rem !important}.mt-4,.my-4{margin-top:1.5rem !important}.mr-4,.mx-4{margin-right:1.5rem !important}.mb-4,.my-4{margin-bottom:1.5rem !important}.ml-4,.mx-4{margin-left:1.5rem !important}.m-5{margin:3rem !important}.mt-5,.my-5{margin-top:3rem !important}.mr-5,.mx-5{margin-right:3rem !important}.mb-5,.my-5{margin-bottom:3rem !important}.ml-5,.mx-5{margin-left:3rem !important}.p-0{padding:0 !important}.pt-0,.py-0{padding-top:0 !important}.pr-0,.px-0{padding-right:0 !important}.pb-0,.py-0{padding-bottom:0 !important}.pl-0,.px-0{padding-left:0 !important}.p-1{padding:.25rem !important}.pt-1,.py-1{padding-top:.25rem !important}.pr-1,.px-1{padding-right:.25rem !important}.pb-1,.py-1{padding-bottom:.25rem !important}.pl-1,.px-1{padding-left:.25rem !important}.p-2{padding:.5rem !important}.pt-2,.py-2{padding-top:.5rem !important}.pr-2,.px-2{padding-right:.5rem !important}.pb-2,.py-2{padding-bottom:.5rem !important}.pl-2,.px-2{padding-left:.5rem !important}.p-3{padding:1rem !important}.pt-3,.py-3{padding-top:1rem !important}.pr-3,.px-3{padding-right:1rem !important}.pb-3,.py-3{padding-bottom:1rem !important}.pl-3,.px-3{padding-left:1rem !important}.p-4{padding:1.5rem !important}.pt-4,.py-4{padding-top:1.5rem !important}.pr-4,.px-4{padding-right:1.5rem !important}.pb-4,.py-4{padding-bottom:1.5rem !important}.pl-4,.px-4{padding-left:1.5rem !important}.p-5{padding:3rem !important}.pt-5,.py-5{padding-top:3rem !important}.pr-5,.px-5{padding-right:3rem !important}.pb-5,.py-5{padding-bottom:3rem !important}.pl-5,.px-5{padding-left:3rem !important}.m-n1{margin:-0.25rem !important}.mt-n1,.my-n1{margin-top:-0.25rem !important}.mr-n1,.mx-n1{margin-right:-0.25rem !important}.mb-n1,.my-n1{margin-bottom:-0.25rem !important}.ml-n1,.mx-n1{margin-left:-0.25rem !important}.m-n2{margin:-0.5rem !important}.mt-n2,.my-n2{margin-top:-0.5rem !important}.mr-n2,.mx-n2{margin-right:-0.5rem !important}.mb-n2,.my-n2{margin-bottom:-0.5rem !important}.ml-n2,.mx-n2{margin-left:-0.5rem !important}.m-n3{margin:-1rem !important}.mt-n3,.my-n3{margin-top:-1rem !important}.mr-n3,.mx-n3{margin-right:-1rem !important}.mb-n3,.my-n3{margin-bottom:-1rem !important}.ml-n3,.mx-n3{margin-left:-1rem !important}.m-n4{margin:-1.5rem !important}.mt-n4,.my-n4{margin-top:-1.5rem !important}.mr-n4,.mx-n4{margin-right:-1.5rem !important}.mb-n4,.my-n4{margin-bottom:-1.5rem !important}.ml-n4,.mx-n4{margin-left:-1.5rem !important}.m-n5{margin:-3rem !important}.mt-n5,.my-n5{margin-top:-3rem !important}.mr-n5,.mx-n5{margin-right:-3rem !important}.mb-n5,.my-n5{margin-bottom:-3rem !important}.ml-n5,.mx-n5{margin-left:-3rem !important}.m-auto{margin:auto !important}.mt-auto,.my-auto{margin-top:auto !important}.mr-auto,.mx-auto{margin-right:auto !important}.mb-auto,.my-auto{margin-bottom:auto !important}.ml-auto,.mx-auto{margin-left:auto !important}@media(min-width: 576px){.m-sm-0{margin:0 !important}.mt-sm-0,.my-sm-0{margin-top:0 !important}.mr-sm-0,.mx-sm-0{margin-right:0 !important}.mb-sm-0,.my-sm-0{margin-bottom:0 !important}.ml-sm-0,.mx-sm-0{margin-left:0 !important}.m-sm-1{margin:.25rem !important}.mt-sm-1,.my-sm-1{margin-top:.25rem !important}.mr-sm-1,.mx-sm-1{margin-right:.25rem !important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem !important}.ml-sm-1,.mx-sm-1{margin-left:.25rem !important}.m-sm-2{margin:.5rem !important}.mt-sm-2,.my-sm-2{margin-top:.5rem !important}.mr-sm-2,.mx-sm-2{margin-right:.5rem !important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem !important}.ml-sm-2,.mx-sm-2{margin-left:.5rem !important}.m-sm-3{margin:1rem !important}.mt-sm-3,.my-sm-3{margin-top:1rem !important}.mr-sm-3,.mx-sm-3{margin-right:1rem !important}.mb-sm-3,.my-sm-3{margin-bottom:1rem !important}.ml-sm-3,.mx-sm-3{margin-left:1rem !important}.m-sm-4{margin:1.5rem !important}.mt-sm-4,.my-sm-4{margin-top:1.5rem !important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem !important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem !important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem !important}.m-sm-5{margin:3rem !important}.mt-sm-5,.my-sm-5{margin-top:3rem !important}.mr-sm-5,.mx-sm-5{margin-right:3rem !important}.mb-sm-5,.my-sm-5{margin-bottom:3rem !important}.ml-sm-5,.mx-sm-5{margin-left:3rem !important}.p-sm-0{padding:0 !important}.pt-sm-0,.py-sm-0{padding-top:0 !important}.pr-sm-0,.px-sm-0{padding-right:0 !important}.pb-sm-0,.py-sm-0{padding-bottom:0 !important}.pl-sm-0,.px-sm-0{padding-left:0 !important}.p-sm-1{padding:.25rem !important}.pt-sm-1,.py-sm-1{padding-top:.25rem !important}.pr-sm-1,.px-sm-1{padding-right:.25rem !important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem !important}.pl-sm-1,.px-sm-1{padding-left:.25rem !important}.p-sm-2{padding:.5rem !important}.pt-sm-2,.py-sm-2{padding-top:.5rem !important}.pr-sm-2,.px-sm-2{padding-right:.5rem !important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem !important}.pl-sm-2,.px-sm-2{padding-left:.5rem !important}.p-sm-3{padding:1rem !important}.pt-sm-3,.py-sm-3{padding-top:1rem !important}.pr-sm-3,.px-sm-3{padding-right:1rem !important}.pb-sm-3,.py-sm-3{padding-bottom:1rem !important}.pl-sm-3,.px-sm-3{padding-left:1rem !important}.p-sm-4{padding:1.5rem !important}.pt-sm-4,.py-sm-4{padding-top:1.5rem !important}.pr-sm-4,.px-sm-4{padding-right:1.5rem !important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem !important}.pl-sm-4,.px-sm-4{padding-left:1.5rem !important}.p-sm-5{padding:3rem !important}.pt-sm-5,.py-sm-5{padding-top:3rem !important}.pr-sm-5,.px-sm-5{padding-right:3rem !important}.pb-sm-5,.py-sm-5{padding-bottom:3rem !important}.pl-sm-5,.px-sm-5{padding-left:3rem !important}.m-sm-n1{margin:-0.25rem !important}.mt-sm-n1,.my-sm-n1{margin-top:-0.25rem !important}.mr-sm-n1,.mx-sm-n1{margin-right:-0.25rem !important}.mb-sm-n1,.my-sm-n1{margin-bottom:-0.25rem !important}.ml-sm-n1,.mx-sm-n1{margin-left:-0.25rem !important}.m-sm-n2{margin:-0.5rem !important}.mt-sm-n2,.my-sm-n2{margin-top:-0.5rem !important}.mr-sm-n2,.mx-sm-n2{margin-right:-0.5rem !important}.mb-sm-n2,.my-sm-n2{margin-bottom:-0.5rem !important}.ml-sm-n2,.mx-sm-n2{margin-left:-0.5rem !important}.m-sm-n3{margin:-1rem !important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem !important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem !important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem !important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem !important}.m-sm-n4{margin:-1.5rem !important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem !important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem !important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem !important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem !important}.m-sm-n5{margin:-3rem !important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem !important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem !important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem !important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem !important}.m-sm-auto{margin:auto !important}.mt-sm-auto,.my-sm-auto{margin-top:auto !important}.mr-sm-auto,.mx-sm-auto{margin-right:auto !important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto !important}.ml-sm-auto,.mx-sm-auto{margin-left:auto !important}}@media(min-width: 768px){.m-md-0{margin:0 !important}.mt-md-0,.my-md-0{margin-top:0 !important}.mr-md-0,.mx-md-0{margin-right:0 !important}.mb-md-0,.my-md-0{margin-bottom:0 !important}.ml-md-0,.mx-md-0{margin-left:0 !important}.m-md-1{margin:.25rem !important}.mt-md-1,.my-md-1{margin-top:.25rem !important}.mr-md-1,.mx-md-1{margin-right:.25rem !important}.mb-md-1,.my-md-1{margin-bottom:.25rem !important}.ml-md-1,.mx-md-1{margin-left:.25rem !important}.m-md-2{margin:.5rem !important}.mt-md-2,.my-md-2{margin-top:.5rem !important}.mr-md-2,.mx-md-2{margin-right:.5rem !important}.mb-md-2,.my-md-2{margin-bottom:.5rem !important}.ml-md-2,.mx-md-2{margin-left:.5rem !important}.m-md-3{margin:1rem !important}.mt-md-3,.my-md-3{margin-top:1rem !important}.mr-md-3,.mx-md-3{margin-right:1rem !important}.mb-md-3,.my-md-3{margin-bottom:1rem !important}.ml-md-3,.mx-md-3{margin-left:1rem !important}.m-md-4{margin:1.5rem !important}.mt-md-4,.my-md-4{margin-top:1.5rem !important}.mr-md-4,.mx-md-4{margin-right:1.5rem !important}.mb-md-4,.my-md-4{margin-bottom:1.5rem !important}.ml-md-4,.mx-md-4{margin-left:1.5rem !important}.m-md-5{margin:3rem !important}.mt-md-5,.my-md-5{margin-top:3rem !important}.mr-md-5,.mx-md-5{margin-right:3rem !important}.mb-md-5,.my-md-5{margin-bottom:3rem !important}.ml-md-5,.mx-md-5{margin-left:3rem !important}.p-md-0{padding:0 !important}.pt-md-0,.py-md-0{padding-top:0 !important}.pr-md-0,.px-md-0{padding-right:0 !important}.pb-md-0,.py-md-0{padding-bottom:0 !important}.pl-md-0,.px-md-0{padding-left:0 !important}.p-md-1{padding:.25rem !important}.pt-md-1,.py-md-1{padding-top:.25rem !important}.pr-md-1,.px-md-1{padding-right:.25rem !important}.pb-md-1,.py-md-1{padding-bottom:.25rem !important}.pl-md-1,.px-md-1{padding-left:.25rem !important}.p-md-2{padding:.5rem !important}.pt-md-2,.py-md-2{padding-top:.5rem !important}.pr-md-2,.px-md-2{padding-right:.5rem !important}.pb-md-2,.py-md-2{padding-bottom:.5rem !important}.pl-md-2,.px-md-2{padding-left:.5rem !important}.p-md-3{padding:1rem !important}.pt-md-3,.py-md-3{padding-top:1rem !important}.pr-md-3,.px-md-3{padding-right:1rem !important}.pb-md-3,.py-md-3{padding-bottom:1rem !important}.pl-md-3,.px-md-3{padding-left:1rem !important}.p-md-4{padding:1.5rem !important}.pt-md-4,.py-md-4{padding-top:1.5rem !important}.pr-md-4,.px-md-4{padding-right:1.5rem !important}.pb-md-4,.py-md-4{padding-bottom:1.5rem !important}.pl-md-4,.px-md-4{padding-left:1.5rem !important}.p-md-5{padding:3rem !important}.pt-md-5,.py-md-5{padding-top:3rem !important}.pr-md-5,.px-md-5{padding-right:3rem !important}.pb-md-5,.py-md-5{padding-bottom:3rem !important}.pl-md-5,.px-md-5{padding-left:3rem !important}.m-md-n1{margin:-0.25rem !important}.mt-md-n1,.my-md-n1{margin-top:-0.25rem !important}.mr-md-n1,.mx-md-n1{margin-right:-0.25rem !important}.mb-md-n1,.my-md-n1{margin-bottom:-0.25rem !important}.ml-md-n1,.mx-md-n1{margin-left:-0.25rem !important}.m-md-n2{margin:-0.5rem !important}.mt-md-n2,.my-md-n2{margin-top:-0.5rem !important}.mr-md-n2,.mx-md-n2{margin-right:-0.5rem !important}.mb-md-n2,.my-md-n2{margin-bottom:-0.5rem !important}.ml-md-n2,.mx-md-n2{margin-left:-0.5rem !important}.m-md-n3{margin:-1rem !important}.mt-md-n3,.my-md-n3{margin-top:-1rem !important}.mr-md-n3,.mx-md-n3{margin-right:-1rem !important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem !important}.ml-md-n3,.mx-md-n3{margin-left:-1rem !important}.m-md-n4{margin:-1.5rem !important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem !important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem !important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem !important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem !important}.m-md-n5{margin:-3rem !important}.mt-md-n5,.my-md-n5{margin-top:-3rem !important}.mr-md-n5,.mx-md-n5{margin-right:-3rem !important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem !important}.ml-md-n5,.mx-md-n5{margin-left:-3rem !important}.m-md-auto{margin:auto !important}.mt-md-auto,.my-md-auto{margin-top:auto !important}.mr-md-auto,.mx-md-auto{margin-right:auto !important}.mb-md-auto,.my-md-auto{margin-bottom:auto !important}.ml-md-auto,.mx-md-auto{margin-left:auto !important}}@media(min-width: 992px){.m-lg-0{margin:0 !important}.mt-lg-0,.my-lg-0{margin-top:0 !important}.mr-lg-0,.mx-lg-0{margin-right:0 !important}.mb-lg-0,.my-lg-0{margin-bottom:0 !important}.ml-lg-0,.mx-lg-0{margin-left:0 !important}.m-lg-1{margin:.25rem !important}.mt-lg-1,.my-lg-1{margin-top:.25rem !important}.mr-lg-1,.mx-lg-1{margin-right:.25rem !important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem !important}.ml-lg-1,.mx-lg-1{margin-left:.25rem !important}.m-lg-2{margin:.5rem !important}.mt-lg-2,.my-lg-2{margin-top:.5rem !important}.mr-lg-2,.mx-lg-2{margin-right:.5rem !important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem !important}.ml-lg-2,.mx-lg-2{margin-left:.5rem !important}.m-lg-3{margin:1rem !important}.mt-lg-3,.my-lg-3{margin-top:1rem !important}.mr-lg-3,.mx-lg-3{margin-right:1rem !important}.mb-lg-3,.my-lg-3{margin-bottom:1rem !important}.ml-lg-3,.mx-lg-3{margin-left:1rem !important}.m-lg-4{margin:1.5rem !important}.mt-lg-4,.my-lg-4{margin-top:1.5rem !important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem !important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem !important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem !important}.m-lg-5{margin:3rem !important}.mt-lg-5,.my-lg-5{margin-top:3rem !important}.mr-lg-5,.mx-lg-5{margin-right:3rem !important}.mb-lg-5,.my-lg-5{margin-bottom:3rem !important}.ml-lg-5,.mx-lg-5{margin-left:3rem !important}.p-lg-0{padding:0 !important}.pt-lg-0,.py-lg-0{padding-top:0 !important}.pr-lg-0,.px-lg-0{padding-right:0 !important}.pb-lg-0,.py-lg-0{padding-bottom:0 !important}.pl-lg-0,.px-lg-0{padding-left:0 !important}.p-lg-1{padding:.25rem !important}.pt-lg-1,.py-lg-1{padding-top:.25rem !important}.pr-lg-1,.px-lg-1{padding-right:.25rem !important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem !important}.pl-lg-1,.px-lg-1{padding-left:.25rem !important}.p-lg-2{padding:.5rem !important}.pt-lg-2,.py-lg-2{padding-top:.5rem !important}.pr-lg-2,.px-lg-2{padding-right:.5rem !important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem !important}.pl-lg-2,.px-lg-2{padding-left:.5rem !important}.p-lg-3{padding:1rem !important}.pt-lg-3,.py-lg-3{padding-top:1rem !important}.pr-lg-3,.px-lg-3{padding-right:1rem !important}.pb-lg-3,.py-lg-3{padding-bottom:1rem !important}.pl-lg-3,.px-lg-3{padding-left:1rem !important}.p-lg-4{padding:1.5rem !important}.pt-lg-4,.py-lg-4{padding-top:1.5rem !important}.pr-lg-4,.px-lg-4{padding-right:1.5rem !important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem !important}.pl-lg-4,.px-lg-4{padding-left:1.5rem !important}.p-lg-5{padding:3rem !important}.pt-lg-5,.py-lg-5{padding-top:3rem !important}.pr-lg-5,.px-lg-5{padding-right:3rem !important}.pb-lg-5,.py-lg-5{padding-bottom:3rem !important}.pl-lg-5,.px-lg-5{padding-left:3rem !important}.m-lg-n1{margin:-0.25rem !important}.mt-lg-n1,.my-lg-n1{margin-top:-0.25rem !important}.mr-lg-n1,.mx-lg-n1{margin-right:-0.25rem !important}.mb-lg-n1,.my-lg-n1{margin-bottom:-0.25rem !important}.ml-lg-n1,.mx-lg-n1{margin-left:-0.25rem !important}.m-lg-n2{margin:-0.5rem !important}.mt-lg-n2,.my-lg-n2{margin-top:-0.5rem !important}.mr-lg-n2,.mx-lg-n2{margin-right:-0.5rem !important}.mb-lg-n2,.my-lg-n2{margin-bottom:-0.5rem !important}.ml-lg-n2,.mx-lg-n2{margin-left:-0.5rem !important}.m-lg-n3{margin:-1rem !important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem !important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem !important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem !important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem !important}.m-lg-n4{margin:-1.5rem !important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem !important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem !important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem !important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem !important}.m-lg-n5{margin:-3rem !important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem !important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem !important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem !important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem !important}.m-lg-auto{margin:auto !important}.mt-lg-auto,.my-lg-auto{margin-top:auto !important}.mr-lg-auto,.mx-lg-auto{margin-right:auto !important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto !important}.ml-lg-auto,.mx-lg-auto{margin-left:auto !important}}@media(min-width: 1200px){.m-xl-0{margin:0 !important}.mt-xl-0,.my-xl-0{margin-top:0 !important}.mr-xl-0,.mx-xl-0{margin-right:0 !important}.mb-xl-0,.my-xl-0{margin-bottom:0 !important}.ml-xl-0,.mx-xl-0{margin-left:0 !important}.m-xl-1{margin:.25rem !important}.mt-xl-1,.my-xl-1{margin-top:.25rem !important}.mr-xl-1,.mx-xl-1{margin-right:.25rem !important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem !important}.ml-xl-1,.mx-xl-1{margin-left:.25rem !important}.m-xl-2{margin:.5rem !important}.mt-xl-2,.my-xl-2{margin-top:.5rem !important}.mr-xl-2,.mx-xl-2{margin-right:.5rem !important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem !important}.ml-xl-2,.mx-xl-2{margin-left:.5rem !important}.m-xl-3{margin:1rem !important}.mt-xl-3,.my-xl-3{margin-top:1rem !important}.mr-xl-3,.mx-xl-3{margin-right:1rem !important}.mb-xl-3,.my-xl-3{margin-bottom:1rem !important}.ml-xl-3,.mx-xl-3{margin-left:1rem !important}.m-xl-4{margin:1.5rem !important}.mt-xl-4,.my-xl-4{margin-top:1.5rem !important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem !important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem !important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem !important}.m-xl-5{margin:3rem !important}.mt-xl-5,.my-xl-5{margin-top:3rem !important}.mr-xl-5,.mx-xl-5{margin-right:3rem !important}.mb-xl-5,.my-xl-5{margin-bottom:3rem !important}.ml-xl-5,.mx-xl-5{margin-left:3rem !important}.p-xl-0{padding:0 !important}.pt-xl-0,.py-xl-0{padding-top:0 !important}.pr-xl-0,.px-xl-0{padding-right:0 !important}.pb-xl-0,.py-xl-0{padding-bottom:0 !important}.pl-xl-0,.px-xl-0{padding-left:0 !important}.p-xl-1{padding:.25rem !important}.pt-xl-1,.py-xl-1{padding-top:.25rem !important}.pr-xl-1,.px-xl-1{padding-right:.25rem !important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem !important}.pl-xl-1,.px-xl-1{padding-left:.25rem !important}.p-xl-2{padding:.5rem !important}.pt-xl-2,.py-xl-2{padding-top:.5rem !important}.pr-xl-2,.px-xl-2{padding-right:.5rem !important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem !important}.pl-xl-2,.px-xl-2{padding-left:.5rem !important}.p-xl-3{padding:1rem !important}.pt-xl-3,.py-xl-3{padding-top:1rem !important}.pr-xl-3,.px-xl-3{padding-right:1rem !important}.pb-xl-3,.py-xl-3{padding-bottom:1rem !important}.pl-xl-3,.px-xl-3{padding-left:1rem !important}.p-xl-4{padding:1.5rem !important}.pt-xl-4,.py-xl-4{padding-top:1.5rem !important}.pr-xl-4,.px-xl-4{padding-right:1.5rem !important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem !important}.pl-xl-4,.px-xl-4{padding-left:1.5rem !important}.p-xl-5{padding:3rem !important}.pt-xl-5,.py-xl-5{padding-top:3rem !important}.pr-xl-5,.px-xl-5{padding-right:3rem !important}.pb-xl-5,.py-xl-5{padding-bottom:3rem !important}.pl-xl-5,.px-xl-5{padding-left:3rem !important}.m-xl-n1{margin:-0.25rem !important}.mt-xl-n1,.my-xl-n1{margin-top:-0.25rem !important}.mr-xl-n1,.mx-xl-n1{margin-right:-0.25rem !important}.mb-xl-n1,.my-xl-n1{margin-bottom:-0.25rem !important}.ml-xl-n1,.mx-xl-n1{margin-left:-0.25rem !important}.m-xl-n2{margin:-0.5rem !important}.mt-xl-n2,.my-xl-n2{margin-top:-0.5rem !important}.mr-xl-n2,.mx-xl-n2{margin-right:-0.5rem !important}.mb-xl-n2,.my-xl-n2{margin-bottom:-0.5rem !important}.ml-xl-n2,.mx-xl-n2{margin-left:-0.5rem !important}.m-xl-n3{margin:-1rem !important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem !important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem !important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem !important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem !important}.m-xl-n4{margin:-1.5rem !important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem !important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem !important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem !important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem !important}.m-xl-n5{margin:-3rem !important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem !important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem !important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem !important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem !important}.m-xl-auto{margin:auto !important}.mt-xl-auto,.my-xl-auto{margin-top:auto !important}.mr-xl-auto,.mx-xl-auto{margin-right:auto !important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto !important}.ml-xl-auto,.mx-xl-auto{margin-left:auto !important}}.highlight{border-radius:.3em;background-color:#212529;color:#f8f9fa}.highlight pre{padding:.7em;color:#f8f9fa}.highlight .c1{color:#adb5bd;background-color:#212529}.highlight .k,.highlight .kc,.highlight .kn,.highlight .ow{color:#00ac07}.highlight .nb,.highlight .ne,.highlight .nf,.highlight .vm{color:#ff8c04}.highlight .s1,.highlight .s2,.highlight .sa,.highlight .se,.highlight .si,.highlight .mi{color:#ff7efd}.highlight .c1,.highlight .nf,.highlight .sa,.highlight .se,.highlight .si{font-style:italic}.highlight .k,.highlight .kn,.highlight .ow{font-weight:bold}@media(min-width: 768px){.instaloaderdoc-sidebar{padding-right:0;border-right:1px solid #dee2e6 !important}}@media(max-width: 991.98px){.instaloaderdoc-sidebar{border-bottom:1px solid #dee2e6 !important}}@media(min-width: 768px){.instaloaderdoc-sidebar>nav{height:100vh;overflow-y:auto;padding-top:.5rem}@supports((position: -webkit-sticky) or (position: sticky)){.instaloaderdoc-sidebar>nav{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}}.instaloaderdoc-sidebar>nav ul{list-style-type:none;padding-left:0}.instaloaderdoc-sidebar>nav li{padding-top:.2em;padding-bottom:.2em}.instaloaderdoc-sidebar>nav li.toctree-l2.current>ul{padding-left:1em}.instaloaderdoc-sidebar>nav a.current,.instaloaderdoc-sidebar>nav a.active,.instaloaderdoc-sidebar>nav li.current>a{color:#b26000;font-weight:500}.instaloaderdoc-sidebar>nav a.current:hover,.instaloaderdoc-sidebar>nav a.active:hover,.instaloaderdoc-sidebar>nav li.current>a:hover{color:#e57c00}.instaloaderdoc-sidebar>nav a:hover{text-decoration:none}.admonition,.topic{border-radius:.3em;border:1px solid #ced4da;background-color:#f8f9fa}ul.simple>li>p{margin-bottom:0}.nav-link{padding-top:0;padding-bottom:0} |
0 | !function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=2)}([function(t,e){t.exports=jQuery},function(t,e,n){ | |
1 | /*! | |
2 | * Bootstrap util.js v4.5.0 (https://getbootstrap.com/) | |
3 | * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) | |
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | |
5 | */ | |
6 | t.exports=function(t){"use strict";function e(e){var r=this,i=!1;return t(this).one(n.TRANSITION_END,(function(){i=!0})),setTimeout((function(){i||n.triggerTransitionEnd(r)}),e),this}t=t&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t;var n={TRANSITION_END:"bsTransitionEnd",getUID:function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(e){if(!e)return 0;var n=t(e).css("transition-duration"),r=t(e).css("transition-delay"),i=parseFloat(n),o=parseFloat(r);return i||o?(n=n.split(",")[0],r=r.split(",")[0],1e3*(parseFloat(n)+parseFloat(r))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(e){t(e).trigger("transitionend")},supportsTransitionEnd:function(){return Boolean("transitionend")},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,r){for(var i in r)if(Object.prototype.hasOwnProperty.call(r,i)){var o=r[i],s=e[i],a=s&&n.isElement(s)?"element":null==(l=s)?""+l:{}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(a))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+a+'" but expected type "'+o+'".')}var l},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){var e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?n.findShadowRoot(t.parentNode):null},jQueryDetection:function(){if(void 0===t)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1===e[0]&&9===e[1]&&e[2]<1||e[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};return n.jQueryDetection(),t.fn.emulateTransitionEnd=e,t.event.special[n.TRANSITION_END]={bindType:"transitionend",delegateType:"transitionend",handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}},n}(n(0))},function(t,e,n){n(3),t.exports=n(9)},function(t,e,n){"use strict";var r=this&&this.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(e,"__esModule",{value:!0});var i=r(n(0));n(1),n(4),n(7),n(8),i.default((function(){i.default("a.reference[title]").attr("data-toggle","tooltip"),i.default("a.headerlink[title]").attr("data-toggle","tooltip"),i.default('[data-toggle="tooltip"]').tooltip(),i.default(".instaloaderdoc-sidebar > nav > ul > li.current").attr("id","localtoc"),i.default("#localtoc ul").addClass("nav flex-column"),i.default("#localtoc ul li").addClass("nav-item"),i.default("#localtoc ul li a").addClass("nav-link"),i.default("body").scrollspy({target:"#localtoc"});var t="#"+i.default(".section:first").attr("id");i.default("#localtoc > a.current").attr("href",t)}))},function(t,e,n){ | |
7 | /*! | |
8 | * Bootstrap tooltip.js v4.5.0 (https://getbootstrap.com/) | |
9 | * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) | |
10 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | |
11 | */ | |
12 | t.exports=function(t,e,n){"use strict";function r(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function i(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function o(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function s(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?o(Object(n),!0).forEach((function(e){i(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}t=t&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t,e=e&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e,n=n&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n;var a=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],l={"*":["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:[]},c=/^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/gi,f=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;function u(t,e,n){if(0===t.length)return t;if(n&&"function"==typeof n)return n(t);for(var r=(new window.DOMParser).parseFromString(t,"text/html"),i=Object.keys(e),o=[].slice.call(r.body.querySelectorAll("*")),s=function(t,n){var r=o[t],s=r.nodeName.toLowerCase();if(-1===i.indexOf(r.nodeName.toLowerCase()))return r.parentNode.removeChild(r),"continue";var l=[].slice.call(r.attributes),u=[].concat(e["*"]||[],e[s]||[]);l.forEach((function(t){(function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===a.indexOf(n)||Boolean(t.nodeValue.match(c)||t.nodeValue.match(f));for(var r=e.filter((function(t){return t instanceof RegExp})),i=0,o=r.length;i<o;i++)if(n.match(r[i]))return!0;return!1})(t,u)||r.removeAttribute(t.nodeName)}))},l=0,u=o.length;l<u;l++)s(l);return r.body.innerHTML}var h="tooltip",p=".bs.tooltip",d=t.fn[h],g=new RegExp("(^|\\s)bs-tooltip\\S+","g"),m=["sanitize","whiteList","sanitizeFn"],v={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},b={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},y={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",sanitize:!0,sanitizeFn:null,whiteList:l,popperConfig:null},_={HIDE:"hide"+p,HIDDEN:"hidden"+p,SHOW:"show"+p,SHOWN:"shown"+p,INSERTED:"inserted"+p,CLICK:"click"+p,FOCUSIN:"focusin"+p,FOCUSOUT:"focusout"+p,MOUSEENTER:"mouseenter"+p,MOUSELEAVE:"mouseleave"+p},w=function(){function i(t,n){if(void 0===e)throw new TypeError("Bootstrap's tooltips require Popper.js (https://popper.js.org/)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(n),this.tip=null,this._setListeners()}var o,a,l,c=i.prototype;return c.enable=function(){this._isEnabled=!0},c.disable=function(){this._isEnabled=!1},c.toggleEnabled=function(){this._isEnabled=!this._isEnabled},c.toggle=function(e){if(this._isEnabled)if(e){var n=this.constructor.DATA_KEY,r=t(e.currentTarget).data(n);r||(r=new this.constructor(e.currentTarget,this._getDelegateConfig()),t(e.currentTarget).data(n,r)),r._activeTrigger.click=!r._activeTrigger.click,r._isWithActiveTrigger()?r._enter(null,r):r._leave(null,r)}else{if(t(this.getTipElement()).hasClass("show"))return void this._leave(null,this);this._enter(null,this)}},c.dispose=function(){clearTimeout(this._timeout),t.removeData(this.element,this.constructor.DATA_KEY),t(this.element).off(this.constructor.EVENT_KEY),t(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&t(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},c.show=function(){var r=this;if("none"===t(this.element).css("display"))throw new Error("Please use show on visible elements");var i=t.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){t(this.element).trigger(i);var o=n.findShadowRoot(this.element),s=t.contains(null!==o?o:this.element.ownerDocument.documentElement,this.element);if(i.isDefaultPrevented()||!s)return;var a=this.getTipElement(),l=n.getUID(this.constructor.NAME);a.setAttribute("id",l),this.element.setAttribute("aria-describedby",l),this.setContent(),this.config.animation&&t(a).addClass("fade");var c="function"==typeof this.config.placement?this.config.placement.call(this,a,this.element):this.config.placement,f=this._getAttachment(c);this.addAttachmentClass(f);var u=this._getContainer();t(a).data(this.constructor.DATA_KEY,this),t.contains(this.element.ownerDocument.documentElement,this.tip)||t(a).appendTo(u),t(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new e(this.element,a,this._getPopperConfig(f)),t(a).addClass("show"),"ontouchstart"in document.documentElement&&t(document.body).children().on("mouseover",null,t.noop);var h=function(){r.config.animation&&r._fixTransition();var e=r._hoverState;r._hoverState=null,t(r.element).trigger(r.constructor.Event.SHOWN),"out"===e&&r._leave(null,r)};if(t(this.tip).hasClass("fade")){var p=n.getTransitionDurationFromElement(this.tip);t(this.tip).one(n.TRANSITION_END,h).emulateTransitionEnd(p)}else h()}},c.hide=function(e){var r=this,i=this.getTipElement(),o=t.Event(this.constructor.Event.HIDE),s=function(){"show"!==r._hoverState&&i.parentNode&&i.parentNode.removeChild(i),r._cleanTipClass(),r.element.removeAttribute("aria-describedby"),t(r.element).trigger(r.constructor.Event.HIDDEN),null!==r._popper&&r._popper.destroy(),e&&e()};if(t(this.element).trigger(o),!o.isDefaultPrevented()){if(t(i).removeClass("show"),"ontouchstart"in document.documentElement&&t(document.body).children().off("mouseover",null,t.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,t(this.tip).hasClass("fade")){var a=n.getTransitionDurationFromElement(i);t(i).one(n.TRANSITION_END,s).emulateTransitionEnd(a)}else s();this._hoverState=""}},c.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},c.isWithContent=function(){return Boolean(this.getTitle())},c.addAttachmentClass=function(e){t(this.getTipElement()).addClass("bs-tooltip-"+e)},c.getTipElement=function(){return this.tip=this.tip||t(this.config.template)[0],this.tip},c.setContent=function(){var e=this.getTipElement();this.setElementContent(t(e.querySelectorAll(".tooltip-inner")),this.getTitle()),t(e).removeClass("fade show")},c.setElementContent=function(e,n){"object"!=typeof n||!n.nodeType&&!n.jquery?this.config.html?(this.config.sanitize&&(n=u(n,this.config.whiteList,this.config.sanitizeFn)),e.html(n)):e.text(n):this.config.html?t(n).parent().is(e)||e.empty().append(n):e.text(t(n).text())},c.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},c._getPopperConfig=function(t){var e=this;return s(s({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),this.config.popperConfig)},c._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=s(s({},e.offsets),t.config.offset(e.offsets,t.element)||{}),e}:e.offset=this.config.offset,e},c._getContainer=function(){return!1===this.config.container?document.body:n.isElement(this.config.container)?t(this.config.container):t(document).find(this.config.container)},c._getAttachment=function(t){return b[t.toUpperCase()]},c._setListeners=function(){var e=this;this.config.trigger.split(" ").forEach((function(n){if("click"===n)t(e.element).on(e.constructor.Event.CLICK,e.config.selector,(function(t){return e.toggle(t)}));else if("manual"!==n){var r="hover"===n?e.constructor.Event.MOUSEENTER:e.constructor.Event.FOCUSIN,i="hover"===n?e.constructor.Event.MOUSELEAVE:e.constructor.Event.FOCUSOUT;t(e.element).on(r,e.config.selector,(function(t){return e._enter(t)})).on(i,e.config.selector,(function(t){return e._leave(t)}))}})),this._hideModalHandler=function(){e.element&&e.hide()},t(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=s(s({},this.config),{},{trigger:"manual",selector:""}):this._fixTitle()},c._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},c._enter=function(e,n){var r=this.constructor.DATA_KEY;(n=n||t(e.currentTarget).data(r))||(n=new this.constructor(e.currentTarget,this._getDelegateConfig()),t(e.currentTarget).data(r,n)),e&&(n._activeTrigger["focusin"===e.type?"focus":"hover"]=!0),t(n.getTipElement()).hasClass("show")||"show"===n._hoverState?n._hoverState="show":(clearTimeout(n._timeout),n._hoverState="show",n.config.delay&&n.config.delay.show?n._timeout=setTimeout((function(){"show"===n._hoverState&&n.show()}),n.config.delay.show):n.show())},c._leave=function(e,n){var r=this.constructor.DATA_KEY;(n=n||t(e.currentTarget).data(r))||(n=new this.constructor(e.currentTarget,this._getDelegateConfig()),t(e.currentTarget).data(r,n)),e&&(n._activeTrigger["focusout"===e.type?"focus":"hover"]=!1),n._isWithActiveTrigger()||(clearTimeout(n._timeout),n._hoverState="out",n.config.delay&&n.config.delay.hide?n._timeout=setTimeout((function(){"out"===n._hoverState&&n.hide()}),n.config.delay.hide):n.hide())},c._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},c._getConfig=function(e){var r=t(this.element).data();return Object.keys(r).forEach((function(t){-1!==m.indexOf(t)&&delete r[t]})),"number"==typeof(e=s(s(s({},this.constructor.Default),r),"object"==typeof e&&e?e:{})).delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),n.typeCheckConfig(h,e,this.constructor.DefaultType),e.sanitize&&(e.template=u(e.template,e.whiteList,e.sanitizeFn)),e},c._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},c._cleanTipClass=function(){var e=t(this.getTipElement()),n=e.attr("class").match(g);null!==n&&n.length&&e.removeClass(n.join(""))},c._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},c._fixTransition=function(){var e=this.getTipElement(),n=this.config.animation;null===e.getAttribute("x-placement")&&(t(e).removeClass("fade"),this.config.animation=!1,this.hide(),this.show(),this.config.animation=n)},i._jQueryInterface=function(e){return this.each((function(){var n=t(this).data("bs.tooltip"),r="object"==typeof e&&e;if((n||!/dispose|hide/.test(e))&&(n||(n=new i(this,r),t(this).data("bs.tooltip",n)),"string"==typeof e)){if(void 0===n[e])throw new TypeError('No method named "'+e+'"');n[e]()}}))},o=i,l=[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return y}},{key:"NAME",get:function(){return h}},{key:"DATA_KEY",get:function(){return"bs.tooltip"}},{key:"Event",get:function(){return _}},{key:"EVENT_KEY",get:function(){return p}},{key:"DefaultType",get:function(){return v}}],(a=null)&&r(o.prototype,a),l&&r(o,l),i}();return t.fn[h]=w._jQueryInterface,t.fn[h].Constructor=w,t.fn[h].noConflict=function(){return t.fn[h]=d,w._jQueryInterface},w}(n(0),n(5),n(1))},function(t,e,n){"use strict";n.r(e),function(t){ | |
13 | /**! | |
14 | * @fileOverview Kickass library to create and place poppers near their reference elements. | |
15 | * @version 1.16.1 | |
16 | * @license | |
17 | * Copyright (c) 2016 Federico Zivolo and contributors | |
18 | * | |
19 | * Permission is hereby granted, free of charge, to any person obtaining a copy | |
20 | * of this software and associated documentation files (the "Software"), to deal | |
21 | * in the Software without restriction, including without limitation the rights | |
22 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
23 | * copies of the Software, and to permit persons to whom the Software is | |
24 | * furnished to do so, subject to the following conditions: | |
25 | * | |
26 | * The above copyright notice and this permission notice shall be included in all | |
27 | * copies or substantial portions of the Software. | |
28 | * | |
29 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
30 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
31 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
32 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
33 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
34 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |
35 | * SOFTWARE. | |
36 | */ | |
37 | var n="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator,r=function(){for(var t=["Edge","Trident","Firefox"],e=0;e<t.length;e+=1)if(n&&navigator.userAgent.indexOf(t[e])>=0)return 1;return 0}();var i=n&&window.Promise?function(t){var e=!1;return function(){e||(e=!0,window.Promise.resolve().then((function(){e=!1,t()})))}}:function(t){var e=!1;return function(){e||(e=!0,setTimeout((function(){e=!1,t()}),r))}};function o(t){return t&&"[object Function]"==={}.toString.call(t)}function s(t,e){if(1!==t.nodeType)return[];var n=t.ownerDocument.defaultView.getComputedStyle(t,null);return e?n[e]:n}function a(t){return"HTML"===t.nodeName?t:t.parentNode||t.host}function l(t){if(!t)return document.body;switch(t.nodeName){case"HTML":case"BODY":return t.ownerDocument.body;case"#document":return t.body}var e=s(t),n=e.overflow,r=e.overflowX,i=e.overflowY;return/(auto|scroll|overlay)/.test(n+i+r)?t:l(a(t))}function c(t){return t&&t.referenceNode?t.referenceNode:t}var f=n&&!(!window.MSInputMethodContext||!document.documentMode),u=n&&/MSIE 10/.test(navigator.userAgent);function h(t){return 11===t?f:10===t?u:f||u}function p(t){if(!t)return document.documentElement;for(var e=h(10)?document.body:null,n=t.offsetParent||null;n===e&&t.nextElementSibling;)n=(t=t.nextElementSibling).offsetParent;var r=n&&n.nodeName;return r&&"BODY"!==r&&"HTML"!==r?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===s(n,"position")?p(n):n:t?t.ownerDocument.documentElement:document.documentElement}function d(t){return null!==t.parentNode?d(t.parentNode):t}function g(t,e){if(!(t&&t.nodeType&&e&&e.nodeType))return document.documentElement;var n=t.compareDocumentPosition(e)&Node.DOCUMENT_POSITION_FOLLOWING,r=n?t:e,i=n?e:t,o=document.createRange();o.setStart(r,0),o.setEnd(i,0);var s,a,l=o.commonAncestorContainer;if(t!==l&&e!==l||r.contains(i))return"BODY"===(a=(s=l).nodeName)||"HTML"!==a&&p(s.firstElementChild)!==s?p(l):l;var c=d(t);return c.host?g(c.host,e):g(t,d(e).host)}function m(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top",n="top"===e?"scrollTop":"scrollLeft",r=t.nodeName;if("BODY"===r||"HTML"===r){var i=t.ownerDocument.documentElement,o=t.ownerDocument.scrollingElement||i;return o[n]}return t[n]}function v(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=m(e,"top"),i=m(e,"left"),o=n?-1:1;return t.top+=r*o,t.bottom+=r*o,t.left+=i*o,t.right+=i*o,t}function b(t,e){var n="x"===e?"Left":"Top",r="Left"===n?"Right":"Bottom";return parseFloat(t["border"+n+"Width"])+parseFloat(t["border"+r+"Width"])}function y(t,e,n,r){return Math.max(e["offset"+t],e["scroll"+t],n["client"+t],n["offset"+t],n["scroll"+t],h(10)?parseInt(n["offset"+t])+parseInt(r["margin"+("Height"===t?"Top":"Left")])+parseInt(r["margin"+("Height"===t?"Bottom":"Right")]):0)}function _(t){var e=t.body,n=t.documentElement,r=h(10)&&getComputedStyle(n);return{height:y("Height",e,n,r),width:y("Width",e,n,r)}}var w=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},E=function(){function t(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}return function(e,n,r){return n&&t(e.prototype,n),r&&t(e,r),e}}(),O=function(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t},T=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t};function C(t){return T({},t,{right:t.left+t.width,bottom:t.top+t.height})}function S(t){var e={};try{if(h(10)){e=t.getBoundingClientRect();var n=m(t,"top"),r=m(t,"left");e.top+=n,e.left+=r,e.bottom+=n,e.right+=r}else e=t.getBoundingClientRect()}catch(t){}var i={left:e.left,top:e.top,width:e.right-e.left,height:e.bottom-e.top},o="HTML"===t.nodeName?_(t.ownerDocument):{},a=o.width||t.clientWidth||i.width,l=o.height||t.clientHeight||i.height,c=t.offsetWidth-a,f=t.offsetHeight-l;if(c||f){var u=s(t);c-=b(u,"x"),f-=b(u,"y"),i.width-=c,i.height-=f}return C(i)}function j(t,e){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=h(10),i="HTML"===e.nodeName,o=S(t),a=S(e),c=l(t),f=s(e),u=parseFloat(f.borderTopWidth),p=parseFloat(f.borderLeftWidth);n&&i&&(a.top=Math.max(a.top,0),a.left=Math.max(a.left,0));var d=C({top:o.top-a.top-u,left:o.left-a.left-p,width:o.width,height:o.height});if(d.marginTop=0,d.marginLeft=0,!r&&i){var g=parseFloat(f.marginTop),m=parseFloat(f.marginLeft);d.top-=u-g,d.bottom-=u-g,d.left-=p-m,d.right-=p-m,d.marginTop=g,d.marginLeft=m}return(r&&!n?e.contains(c):e===c&&"BODY"!==c.nodeName)&&(d=v(d,e)),d}function D(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=t.ownerDocument.documentElement,r=j(t,n),i=Math.max(n.clientWidth,window.innerWidth||0),o=Math.max(n.clientHeight,window.innerHeight||0),s=e?0:m(n),a=e?0:m(n,"left"),l={top:s-r.top+r.marginTop,left:a-r.left+r.marginLeft,width:i,height:o};return C(l)}function x(t){var e=t.nodeName;if("BODY"===e||"HTML"===e)return!1;if("fixed"===s(t,"position"))return!0;var n=a(t);return!!n&&x(n)}function A(t){if(!t||!t.parentElement||h())return document.documentElement;for(var e=t.parentElement;e&&"none"===s(e,"transform");)e=e.parentElement;return e||document.documentElement}function P(t,e,n,r){var i=arguments.length>4&&void 0!==arguments[4]&&arguments[4],o={top:0,left:0},s=i?A(t):g(t,c(e));if("viewport"===r)o=D(s,i);else{var f=void 0;"scrollParent"===r?"BODY"===(f=l(a(e))).nodeName&&(f=t.ownerDocument.documentElement):f="window"===r?t.ownerDocument.documentElement:r;var u=j(f,s,i);if("HTML"!==f.nodeName||x(s))o=u;else{var h=_(t.ownerDocument),p=h.height,d=h.width;o.top+=u.top-u.marginTop,o.bottom=p+u.top,o.left+=u.left-u.marginLeft,o.right=d+u.left}}var m="number"==typeof(n=n||0);return o.left+=m?n:n.left||0,o.top+=m?n:n.top||0,o.right-=m?n:n.right||0,o.bottom-=m?n:n.bottom||0,o}function N(t){return t.width*t.height}function k(t,e,n,r,i){var o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===t.indexOf("auto"))return t;var s=P(n,r,o,i),a={top:{width:s.width,height:e.top-s.top},right:{width:s.right-e.right,height:s.height},bottom:{width:s.width,height:s.bottom-e.bottom},left:{width:e.left-s.left,height:s.height}},l=Object.keys(a).map((function(t){return T({key:t},a[t],{area:N(a[t])})})).sort((function(t,e){return e.area-t.area})),c=l.filter((function(t){var e=t.width,r=t.height;return e>=n.clientWidth&&r>=n.clientHeight})),f=c.length>0?c[0].key:l[0].key,u=t.split("-")[1];return f+(u?"-"+u:"")}function F(t,e,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,i=r?A(e):g(e,c(n));return j(n,i,r)}function L(t){var e=t.ownerDocument.defaultView.getComputedStyle(t),n=parseFloat(e.marginTop||0)+parseFloat(e.marginBottom||0),r=parseFloat(e.marginLeft||0)+parseFloat(e.marginRight||0);return{width:t.offsetWidth+r,height:t.offsetHeight+n}}function I(t){var e={left:"right",right:"left",bottom:"top",top:"bottom"};return t.replace(/left|right|bottom|top/g,(function(t){return e[t]}))}function M(t,e,n){n=n.split("-")[0];var r=L(t),i={width:r.width,height:r.height},o=-1!==["right","left"].indexOf(n),s=o?"top":"left",a=o?"left":"top",l=o?"height":"width",c=o?"width":"height";return i[s]=e[s]+e[l]/2-r[l]/2,i[a]=n===a?e[a]-r[c]:e[I(a)],i}function H(t,e){return Array.prototype.find?t.find(e):t.filter(e)[0]}function R(t,e,n){return(void 0===n?t:t.slice(0,function(t,e,n){if(Array.prototype.findIndex)return t.findIndex((function(t){return t[e]===n}));var r=H(t,(function(t){return t[e]===n}));return t.indexOf(r)}(t,"name",n))).forEach((function(t){t.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var n=t.function||t.fn;t.enabled&&o(n)&&(e.offsets.popper=C(e.offsets.popper),e.offsets.reference=C(e.offsets.reference),e=n(e,t))})),e}function B(){if(!this.state.isDestroyed){var t={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};t.offsets.reference=F(this.state,this.popper,this.reference,this.options.positionFixed),t.placement=k(this.options.placement,t.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),t.originalPlacement=t.placement,t.positionFixed=this.options.positionFixed,t.offsets.popper=M(this.popper,t.offsets.reference,t.placement),t.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",t=R(this.modifiers,t),this.state.isCreated?this.options.onUpdate(t):(this.state.isCreated=!0,this.options.onCreate(t))}}function W(t,e){return t.some((function(t){var n=t.name;return t.enabled&&n===e}))}function q(t){for(var e=[!1,"ms","Webkit","Moz","O"],n=t.charAt(0).toUpperCase()+t.slice(1),r=0;r<e.length;r++){var i=e[r],o=i?""+i+n:t;if(void 0!==document.body.style[o])return o}return null}function U(){return this.state.isDestroyed=!0,W(this.modifiers,"applyStyle")&&(this.popper.removeAttribute("x-placement"),this.popper.style.position="",this.popper.style.top="",this.popper.style.left="",this.popper.style.right="",this.popper.style.bottom="",this.popper.style.willChange="",this.popper.style[q("transform")]=""),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function Y(t){var e=t.ownerDocument;return e?e.defaultView:window}function Q(t,e,n,r){n.updateBound=r,Y(t).addEventListener("resize",n.updateBound,{passive:!0});var i=l(t);return function t(e,n,r,i){var o="BODY"===e.nodeName,s=o?e.ownerDocument.defaultView:e;s.addEventListener(n,r,{passive:!0}),o||t(l(s.parentNode),n,r,i),i.push(s)}(i,"scroll",n.updateBound,n.scrollParents),n.scrollElement=i,n.eventsEnabled=!0,n}function V(){this.state.eventsEnabled||(this.state=Q(this.reference,this.options,this.state,this.scheduleUpdate))}function z(){var t,e;this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=(t=this.reference,e=this.state,Y(t).removeEventListener("resize",e.updateBound),e.scrollParents.forEach((function(t){t.removeEventListener("scroll",e.updateBound)})),e.updateBound=null,e.scrollParents=[],e.scrollElement=null,e.eventsEnabled=!1,e))}function K(t){return""!==t&&!isNaN(parseFloat(t))&&isFinite(t)}function G(t,e){Object.keys(e).forEach((function(n){var r="";-1!==["width","height","top","right","bottom","left"].indexOf(n)&&K(e[n])&&(r="px"),t.style[n]=e[n]+r}))}var J=n&&/Firefox/i.test(navigator.userAgent);function $(t,e,n){var r=H(t,(function(t){return t.name===e})),i=!!r&&t.some((function(t){return t.name===n&&t.enabled&&t.order<r.order}));if(!i){var o="`"+e+"`",s="`"+n+"`";console.warn(s+" modifier is required by "+o+" modifier in order to work, be sure to include it before "+o+"!")}return i}var X=["auto-start","auto","auto-end","top-start","top","top-end","right-start","right","right-end","bottom-end","bottom","bottom-start","left-end","left","left-start"],Z=X.slice(3);function tt(t){var e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=Z.indexOf(t),r=Z.slice(n+1).concat(Z.slice(0,n));return e?r.reverse():r}var et="flip",nt="clockwise",rt="counterclockwise";function it(t,e,n,r){var i=[0,0],o=-1!==["right","left"].indexOf(r),s=t.split(/(\+|\-)/).map((function(t){return t.trim()})),a=s.indexOf(H(s,(function(t){return-1!==t.search(/,|\s/)})));s[a]&&-1===s[a].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var l=/\s*,\s*|\s+/,c=-1!==a?[s.slice(0,a).concat([s[a].split(l)[0]]),[s[a].split(l)[1]].concat(s.slice(a+1))]:[s];return(c=c.map((function(t,r){var i=(1===r?!o:o)?"height":"width",s=!1;return t.reduce((function(t,e){return""===t[t.length-1]&&-1!==["+","-"].indexOf(e)?(t[t.length-1]=e,s=!0,t):s?(t[t.length-1]+=e,s=!1,t):t.concat(e)}),[]).map((function(t){return function(t,e,n,r){var i=t.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),o=+i[1],s=i[2];if(!o)return t;if(0===s.indexOf("%")){var a=void 0;switch(s){case"%p":a=n;break;case"%":case"%r":default:a=r}return C(a)[e]/100*o}if("vh"===s||"vw"===s){return("vh"===s?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*o}return o}(t,i,e,n)}))}))).forEach((function(t,e){t.forEach((function(n,r){K(n)&&(i[e]+=n*("-"===t[r-1]?-1:1))}))})),i}var ot={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(t){var e=t.placement,n=e.split("-")[0],r=e.split("-")[1];if(r){var i=t.offsets,o=i.reference,s=i.popper,a=-1!==["bottom","top"].indexOf(n),l=a?"left":"top",c=a?"width":"height",f={start:O({},l,o[l]),end:O({},l,o[l]+o[c]-s[c])};t.offsets.popper=T({},s,f[r])}return t}},offset:{order:200,enabled:!0,fn:function(t,e){var n=e.offset,r=t.placement,i=t.offsets,o=i.popper,s=i.reference,a=r.split("-")[0],l=void 0;return l=K(+n)?[+n,0]:it(n,o,s,a),"left"===a?(o.top+=l[0],o.left-=l[1]):"right"===a?(o.top+=l[0],o.left+=l[1]):"top"===a?(o.left+=l[0],o.top-=l[1]):"bottom"===a&&(o.left+=l[0],o.top+=l[1]),t.popper=o,t},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(t,e){var n=e.boundariesElement||p(t.instance.popper);t.instance.reference===n&&(n=p(n));var r=q("transform"),i=t.instance.popper.style,o=i.top,s=i.left,a=i[r];i.top="",i.left="",i[r]="";var l=P(t.instance.popper,t.instance.reference,e.padding,n,t.positionFixed);i.top=o,i.left=s,i[r]=a,e.boundaries=l;var c=e.priority,f=t.offsets.popper,u={primary:function(t){var n=f[t];return f[t]<l[t]&&!e.escapeWithReference&&(n=Math.max(f[t],l[t])),O({},t,n)},secondary:function(t){var n="right"===t?"left":"top",r=f[n];return f[t]>l[t]&&!e.escapeWithReference&&(r=Math.min(f[n],l[t]-("right"===t?f.width:f.height))),O({},n,r)}};return c.forEach((function(t){var e=-1!==["left","top"].indexOf(t)?"primary":"secondary";f=T({},f,u[e](t))})),t.offsets.popper=f,t},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(t){var e=t.offsets,n=e.popper,r=e.reference,i=t.placement.split("-")[0],o=Math.floor,s=-1!==["top","bottom"].indexOf(i),a=s?"right":"bottom",l=s?"left":"top",c=s?"width":"height";return n[a]<o(r[l])&&(t.offsets.popper[l]=o(r[l])-n[c]),n[l]>o(r[a])&&(t.offsets.popper[l]=o(r[a])),t}},arrow:{order:500,enabled:!0,fn:function(t,e){var n;if(!$(t.instance.modifiers,"arrow","keepTogether"))return t;var r=e.element;if("string"==typeof r){if(!(r=t.instance.popper.querySelector(r)))return t}else if(!t.instance.popper.contains(r))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),t;var i=t.placement.split("-")[0],o=t.offsets,a=o.popper,l=o.reference,c=-1!==["left","right"].indexOf(i),f=c?"height":"width",u=c?"Top":"Left",h=u.toLowerCase(),p=c?"left":"top",d=c?"bottom":"right",g=L(r)[f];l[d]-g<a[h]&&(t.offsets.popper[h]-=a[h]-(l[d]-g)),l[h]+g>a[d]&&(t.offsets.popper[h]+=l[h]+g-a[d]),t.offsets.popper=C(t.offsets.popper);var m=l[h]+l[f]/2-g/2,v=s(t.instance.popper),b=parseFloat(v["margin"+u]),y=parseFloat(v["border"+u+"Width"]),_=m-t.offsets.popper[h]-b-y;return _=Math.max(Math.min(a[f]-g,_),0),t.arrowElement=r,t.offsets.arrow=(O(n={},h,Math.round(_)),O(n,p,""),n),t},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(t,e){if(W(t.instance.modifiers,"inner"))return t;if(t.flipped&&t.placement===t.originalPlacement)return t;var n=P(t.instance.popper,t.instance.reference,e.padding,e.boundariesElement,t.positionFixed),r=t.placement.split("-")[0],i=I(r),o=t.placement.split("-")[1]||"",s=[];switch(e.behavior){case et:s=[r,i];break;case nt:s=tt(r);break;case rt:s=tt(r,!0);break;default:s=e.behavior}return s.forEach((function(a,l){if(r!==a||s.length===l+1)return t;r=t.placement.split("-")[0],i=I(r);var c=t.offsets.popper,f=t.offsets.reference,u=Math.floor,h="left"===r&&u(c.right)>u(f.left)||"right"===r&&u(c.left)<u(f.right)||"top"===r&&u(c.bottom)>u(f.top)||"bottom"===r&&u(c.top)<u(f.bottom),p=u(c.left)<u(n.left),d=u(c.right)>u(n.right),g=u(c.top)<u(n.top),m=u(c.bottom)>u(n.bottom),v="left"===r&&p||"right"===r&&d||"top"===r&&g||"bottom"===r&&m,b=-1!==["top","bottom"].indexOf(r),y=!!e.flipVariations&&(b&&"start"===o&&p||b&&"end"===o&&d||!b&&"start"===o&&g||!b&&"end"===o&&m),_=!!e.flipVariationsByContent&&(b&&"start"===o&&d||b&&"end"===o&&p||!b&&"start"===o&&m||!b&&"end"===o&&g),w=y||_;(h||v||w)&&(t.flipped=!0,(h||v)&&(r=s[l+1]),w&&(o=function(t){return"end"===t?"start":"start"===t?"end":t}(o)),t.placement=r+(o?"-"+o:""),t.offsets.popper=T({},t.offsets.popper,M(t.instance.popper,t.offsets.reference,t.placement)),t=R(t.instance.modifiers,t,"flip"))})),t},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(t){var e=t.placement,n=e.split("-")[0],r=t.offsets,i=r.popper,o=r.reference,s=-1!==["left","right"].indexOf(n),a=-1===["top","left"].indexOf(n);return i[s?"left":"top"]=o[n]-(a?i[s?"width":"height"]:0),t.placement=I(e),t.offsets.popper=C(i),t}},hide:{order:800,enabled:!0,fn:function(t){if(!$(t.instance.modifiers,"hide","preventOverflow"))return t;var e=t.offsets.reference,n=H(t.instance.modifiers,(function(t){return"preventOverflow"===t.name})).boundaries;if(e.bottom<n.top||e.left>n.right||e.top>n.bottom||e.right<n.left){if(!0===t.hide)return t;t.hide=!0,t.attributes["x-out-of-boundaries"]=""}else{if(!1===t.hide)return t;t.hide=!1,t.attributes["x-out-of-boundaries"]=!1}return t}},computeStyle:{order:850,enabled:!0,fn:function(t,e){var n=e.x,r=e.y,i=t.offsets.popper,o=H(t.instance.modifiers,(function(t){return"applyStyle"===t.name})).gpuAcceleration;void 0!==o&&console.warn("WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!");var s=void 0!==o?o:e.gpuAcceleration,a=p(t.instance.popper),l=S(a),c={position:i.position},f=function(t,e){var n=t.offsets,r=n.popper,i=n.reference,o=Math.round,s=Math.floor,a=function(t){return t},l=o(i.width),c=o(r.width),f=-1!==["left","right"].indexOf(t.placement),u=-1!==t.placement.indexOf("-"),h=e?f||u||l%2==c%2?o:s:a,p=e?o:a;return{left:h(l%2==1&&c%2==1&&!u&&e?r.left-1:r.left),top:p(r.top),bottom:p(r.bottom),right:h(r.right)}}(t,window.devicePixelRatio<2||!J),u="bottom"===n?"top":"bottom",h="right"===r?"left":"right",d=q("transform"),g=void 0,m=void 0;if(m="bottom"===u?"HTML"===a.nodeName?-a.clientHeight+f.bottom:-l.height+f.bottom:f.top,g="right"===h?"HTML"===a.nodeName?-a.clientWidth+f.right:-l.width+f.right:f.left,s&&d)c[d]="translate3d("+g+"px, "+m+"px, 0)",c[u]=0,c[h]=0,c.willChange="transform";else{var v="bottom"===u?-1:1,b="right"===h?-1:1;c[u]=m*v,c[h]=g*b,c.willChange=u+", "+h}var y={"x-placement":t.placement};return t.attributes=T({},y,t.attributes),t.styles=T({},c,t.styles),t.arrowStyles=T({},t.offsets.arrow,t.arrowStyles),t},gpuAcceleration:!0,x:"bottom",y:"right"},applyStyle:{order:900,enabled:!0,fn:function(t){var e,n;return G(t.instance.popper,t.styles),e=t.instance.popper,n=t.attributes,Object.keys(n).forEach((function(t){!1!==n[t]?e.setAttribute(t,n[t]):e.removeAttribute(t)})),t.arrowElement&&Object.keys(t.arrowStyles).length&&G(t.arrowElement,t.arrowStyles),t},onLoad:function(t,e,n,r,i){var o=F(i,e,t,n.positionFixed),s=k(n.placement,o,e,t,n.modifiers.flip.boundariesElement,n.modifiers.flip.padding);return e.setAttribute("x-placement",s),G(e,{position:n.positionFixed?"fixed":"absolute"}),n},gpuAcceleration:void 0}}},st=function(){function t(e,n){var r=this,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};w(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(r.update)},this.update=i(this.update.bind(this)),this.options=T({},t.Defaults,s),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=e&&e.jquery?e[0]:e,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys(T({},t.Defaults.modifiers,s.modifiers)).forEach((function(e){r.options.modifiers[e]=T({},t.Defaults.modifiers[e]||{},s.modifiers?s.modifiers[e]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(t){return T({name:t},r.options.modifiers[t])})).sort((function(t,e){return t.order-e.order})),this.modifiers.forEach((function(t){t.enabled&&o(t.onLoad)&&t.onLoad(r.reference,r.popper,r.options,t,r.state)})),this.update();var a=this.options.eventsEnabled;a&&this.enableEventListeners(),this.state.eventsEnabled=a}return E(t,[{key:"update",value:function(){return B.call(this)}},{key:"destroy",value:function(){return U.call(this)}},{key:"enableEventListeners",value:function(){return V.call(this)}},{key:"disableEventListeners",value:function(){return z.call(this)}}]),t}();st.Utils=("undefined"!=typeof window?window:t).PopperUtils,st.placements=X,st.Defaults=ot,e.default=st}.call(this,n(6))},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){ | |
38 | /*! | |
39 | * Bootstrap scrollspy.js v4.5.0 (https://getbootstrap.com/) | |
40 | * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) | |
41 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | |
42 | */ | |
43 | t.exports=function(t,e){"use strict";function n(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function o(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?i(Object(n),!0).forEach((function(e){r(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}t=t&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t,e=e&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e;var s="scrollspy",a=t.fn[s],l={offset:10,method:"auto",target:""},c={offset:"number",method:"string",target:"(string|element)"},f=function(){function r(e,n){var r=this;this._element=e,this._scrollElement="BODY"===e.tagName?window:e,this._config=this._getConfig(n),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,t(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return r._process(t)})),this.refresh(),this._process()}var i,a,f,u=r.prototype;return u.refresh=function(){var n=this,r=this._scrollElement===this._scrollElement.window?"offset":"position",i="auto"===this._config.method?r:this._config.method,o="position"===i?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(n){var r,s=e.getSelectorFromElement(n);if(s&&(r=document.querySelector(s)),r){var a=r.getBoundingClientRect();if(a.width||a.height)return[t(r)[i]().top+o,s]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]})).forEach((function(t){n._offsets.push(t[0]),n._targets.push(t[1])}))},u.dispose=function(){t.removeData(this._element,"bs.scrollspy"),t(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},u._getConfig=function(n){if("string"!=typeof(n=o(o({},l),"object"==typeof n&&n?n:{})).target&&e.isElement(n.target)){var r=t(n.target).attr("id");r||(r=e.getUID(s),t(n.target).attr("id",r)),n.target="#"+r}return e.typeCheckConfig(s,n,c),n},u._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},u._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},u._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},u._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var r=this._targets[this._targets.length-1];this._activeTarget!==r&&this._activate(r)}else{if(this._activeTarget&&t<this._offsets[0]&&this._offsets[0]>0)return this._activeTarget=null,void this._clear();for(var i=this._offsets.length;i--;)this._activeTarget!==this._targets[i]&&t>=this._offsets[i]&&(void 0===this._offsets[i+1]||t<this._offsets[i+1])&&this._activate(this._targets[i])}},u._activate=function(e){this._activeTarget=e,this._clear();var n=this._selector.split(",").map((function(t){return t+'[data-target="'+e+'"],'+t+'[href="'+e+'"]'})),r=t([].slice.call(document.querySelectorAll(n.join(","))));r.hasClass("dropdown-item")?(r.closest(".dropdown").find(".dropdown-toggle").addClass("active"),r.addClass("active")):(r.addClass("active"),r.parents(".nav, .list-group").prev(".nav-link, .list-group-item").addClass("active"),r.parents(".nav, .list-group").prev(".nav-item").children(".nav-link").addClass("active")),t(this._scrollElement).trigger("activate.bs.scrollspy",{relatedTarget:e})},u._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter((function(t){return t.classList.contains("active")})).forEach((function(t){return t.classList.remove("active")}))},r._jQueryInterface=function(e){return this.each((function(){var n=t(this).data("bs.scrollspy");if(n||(n=new r(this,"object"==typeof e&&e),t(this).data("bs.scrollspy",n)),"string"==typeof e){if(void 0===n[e])throw new TypeError('No method named "'+e+'"');n[e]()}}))},i=r,f=[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return l}}],(a=null)&&n(i.prototype,a),f&&n(i,f),r}();return t(window).on("load.bs.scrollspy.data-api",(function(){for(var e=[].slice.call(document.querySelectorAll('[data-spy="scroll"]')),n=e.length;n--;){var r=t(e[n]);f._jQueryInterface.call(r,r.data())}})),t.fn[s]=f._jQueryInterface,t.fn[s].Constructor=f,t.fn[s].noConflict=function(){return t.fn[s]=a,f._jQueryInterface},f}(n(0),n(1))},function(t,e,n){ | |
44 | /*! | |
45 | * Bootstrap collapse.js v4.5.0 (https://getbootstrap.com/) | |
46 | * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) | |
47 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | |
48 | */ | |
49 | t.exports=function(t,e){"use strict";function n(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,r.key,r)}}function r(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function i(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),n.push.apply(n,r)}return n}function o(t){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?i(Object(n),!0).forEach((function(e){r(t,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):i(Object(n)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(n,e))}))}return t}t=t&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t,e=e&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e;var s="collapse",a="bs.collapse",l=t.fn[s],c={toggle:!0,parent:""},f={toggle:"boolean",parent:"(string|element)"},u=function(){function r(t,n){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(n),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var r=[].slice.call(document.querySelectorAll('[data-toggle="collapse"]')),i=0,o=r.length;i<o;i++){var s=r[i],a=e.getSelectorFromElement(s),l=[].slice.call(document.querySelectorAll(a)).filter((function(e){return e===t}));null!==a&&l.length>0&&(this._selector=a,this._triggerArray.push(s))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var i,l,u,h=r.prototype;return h.toggle=function(){t(this._element).hasClass("show")?this.hide():this.show()},h.show=function(){var n,i,o=this;if(!(this._isTransitioning||t(this._element).hasClass("show")||(this._parent&&0===(n=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof o._config.parent?t.getAttribute("data-parent")===o._config.parent:t.classList.contains("collapse")}))).length&&(n=null),n&&(i=t(n).not(this._selector).data(a))&&i._isTransitioning))){var s=t.Event("show.bs.collapse");if(t(this._element).trigger(s),!s.isDefaultPrevented()){n&&(r._jQueryInterface.call(t(n).not(this._selector),"hide"),i||t(n).data(a,null));var l=this._getDimension();t(this._element).removeClass("collapse").addClass("collapsing"),this._element.style[l]=0,this._triggerArray.length&&t(this._triggerArray).removeClass("collapsed").attr("aria-expanded",!0),this.setTransitioning(!0);var c="scroll"+(l[0].toUpperCase()+l.slice(1)),f=e.getTransitionDurationFromElement(this._element);t(this._element).one(e.TRANSITION_END,(function(){t(o._element).removeClass("collapsing").addClass("collapse show"),o._element.style[l]="",o.setTransitioning(!1),t(o._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(f),this._element.style[l]=this._element[c]+"px"}}},h.hide=function(){var n=this;if(!this._isTransitioning&&t(this._element).hasClass("show")){var r=t.Event("hide.bs.collapse");if(t(this._element).trigger(r),!r.isDefaultPrevented()){var i=this._getDimension();this._element.style[i]=this._element.getBoundingClientRect()[i]+"px",e.reflow(this._element),t(this._element).addClass("collapsing").removeClass("collapse show");var o=this._triggerArray.length;if(o>0)for(var s=0;s<o;s++){var a=this._triggerArray[s],l=e.getSelectorFromElement(a);null!==l&&(t([].slice.call(document.querySelectorAll(l))).hasClass("show")||t(a).addClass("collapsed").attr("aria-expanded",!1))}this.setTransitioning(!0),this._element.style[i]="";var c=e.getTransitionDurationFromElement(this._element);t(this._element).one(e.TRANSITION_END,(function(){n.setTransitioning(!1),t(n._element).removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")})).emulateTransitionEnd(c)}}},h.setTransitioning=function(t){this._isTransitioning=t},h.dispose=function(){t.removeData(this._element,a),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},h._getConfig=function(t){return(t=o(o({},c),t)).toggle=Boolean(t.toggle),e.typeCheckConfig(s,t,f),t},h._getDimension=function(){return t(this._element).hasClass("width")?"width":"height"},h._getParent=function(){var n,i=this;e.isElement(this._config.parent)?(n=this._config.parent,void 0!==this._config.parent.jquery&&(n=this._config.parent[0])):n=document.querySelector(this._config.parent);var o='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',s=[].slice.call(n.querySelectorAll(o));return t(s).each((function(t,e){i._addAriaAndCollapsedClass(r._getTargetFromElement(e),[e])})),n},h._addAriaAndCollapsedClass=function(e,n){var r=t(e).hasClass("show");n.length&&t(n).toggleClass("collapsed",!r).attr("aria-expanded",r)},r._getTargetFromElement=function(t){var n=e.getSelectorFromElement(t);return n?document.querySelector(n):null},r._jQueryInterface=function(e){return this.each((function(){var n=t(this),i=n.data(a),s=o(o(o({},c),n.data()),"object"==typeof e&&e?e:{});if(!i&&s.toggle&&"string"==typeof e&&/show|hide/.test(e)&&(s.toggle=!1),i||(i=new r(this,s),n.data(a,i)),"string"==typeof e){if(void 0===i[e])throw new TypeError('No method named "'+e+'"');i[e]()}}))},i=r,u=[{key:"VERSION",get:function(){return"4.5.0"}},{key:"Default",get:function(){return c}}],(l=null)&&n(i.prototype,l),u&&n(i,u),r}();return t(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',(function(n){"A"===n.currentTarget.tagName&&n.preventDefault();var r=t(this),i=e.getSelectorFromElement(this),o=[].slice.call(document.querySelectorAll(i));t(o).each((function(){var e=t(this),n=e.data(a)?"toggle":r.data();u._jQueryInterface.call(e,n)}))})),t.fn[s]=u._jQueryInterface,t.fn[s].Constructor=u,t.fn[s].noConflict=function(){return t.fn[s]=l,u._jQueryInterface},u}(n(0),n(1))},function(t,e,n){}]);⏎ |
0 | 0 | {% extends "!layout.html" %} |
1 | ||
2 | 1 | {% set html5_doctype = True %} |
3 | ||
4 | {% set script_files = script_files + ['_static/bootstrap-4.1.3.bundle.min.js', '_static/instaloader.js'] %} | |
5 | ||
2 | {% set script_files = script_files + ['_static/instaloaderdoc.js'] %} | |
6 | 3 | {% block htmltitle %} |
7 | 4 | {% if pagename == "index" %} |
8 | 5 | <title>{{ title|striptags|e }}</title> |
10 | 7 | <title>{{ title|striptags|e }}{{ titlesuffix }}</title> |
11 | 8 | {% endif %} |
12 | 9 | {% endblock %} |
13 | ||
14 | 10 | {% block extrahead %} |
15 | 11 | {{ super() }} |
16 | 12 | <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> |
21 | 17 | <link rel="canonical" href="https://instaloader.github.io/{{ pagename }}.html"/> |
22 | 18 | {% endif %} |
23 | 19 | {% endblock %} |
24 | ||
25 | 20 | {% block header %} |
26 | <nav class="navbar navbar-expand-sm navbar-light bg-light fixed-top border-bottom"> | |
21 | <nav class="navbar navbar-light navbar-expand bg-light border-bottom"> | |
27 | 22 | <a class="navbar-brand" href="{{ pathto(master_doc) }}"> |
28 | 23 | <img src="{{ pathto('_static/' + logo, 1) }}" width="30" height="30" class="d-inline-block align-top" alt="logo"> |
29 | Instaloader | |
24 | <span class="ml-3">Instaloader</span> | |
30 | 25 | </a> |
31 | 26 | <ul class="navbar-nav mr-auto"> |
32 | <li class="nav-item ml-0 ml-sm-2 ml-md-0"> | |
33 | <a target="_blank" class="nav-link" | |
27 | <li class="nav-item ml-0 ml-sm-2"> | |
28 | <a class="nav-link" | |
34 | 29 | href="https://github.com/instaloader/instaloader/releases/tag/v{{ current_release }}" |
35 | title="Released on {{ current_release_date }}" data-toggle="tooltip">v<b>{{ current_release }}</b></a> | |
30 | title="Released on {{ current_release_date }}" data-toggle="tooltip"> | |
31 | v<b>{{ current_release }}</b> | |
32 | </a> | |
36 | 33 | </li> |
37 | 34 | </ul> |
38 | <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarLinks" | |
39 | aria-controls="navbarLinks" aria-expanded="false" aria-label="Toggle navigation"> | |
35 | <ul class="navbar-nav ml-auto d-none d-sm-flex"> | |
36 | <li class="nav-item"> | |
37 | <a class="nav-link" href="https://github.com/instaloader/instaloader/issues"> | |
38 | Issues | |
39 | </a> | |
40 | </li> | |
41 | <li class="nav-item"> | |
42 | <a class="nav-link" href="https://github.com/instaloader/instaloader/releases"> | |
43 | Releases | |
44 | </a> | |
45 | </li> | |
46 | <li class="nav-item"> | |
47 | <a class="nav-link" href="https://github.com/instaloader/instaloader"> | |
48 | GitHub | |
49 | </a> | |
50 | </li> | |
51 | </ul> | |
52 | <button class="d-inline-block d-md-none btn btn-outline-primary btn-sm" type="button" | |
53 | data-toggle="collapse" data-target="#instaloaderdocSidebar" aria-controls="instaloaderdocSidebar" | |
54 | aria-expanded="false" aria-label="Toggle navigation"> | |
40 | 55 | <span class="navbar-toggler-icon"></span> |
41 | 56 | </button> |
42 | <div class="collapse navbar-collapse" id="navbarLinks"> | |
43 | <ul class="navbar-nav ml-auto"> | |
44 | <li class="nav-item"> | |
45 | <a target="_blank" class="nav-link" href="https://github.com/instaloader/instaloader/issues">Issues</a> | |
46 | </li> | |
47 | <li class="nav-item"> | |
48 | <a target="_blank" class="nav-link" href="https://github.com/instaloader/instaloader/releases">Releases</a> | |
49 | </li> | |
50 | <li class="nav-item"> | |
51 | <a target="_blank" class="nav-link" href="https://github.com/instaloader/instaloader">GitHub</a> | |
52 | </li> | |
53 | </ul> | |
54 | <form class="form-inline" action="search.html" method="get"> | |
55 | <div class="input-group my-2 my-sm-0 ml-2"> | |
56 | <input class="form-control" type="search" placeholder="Search" aria-label="Search" name="q"> | |
57 | <div class="input-group-append"> | |
58 | <button class="btn btn-success btn-small" type="submit">Go</button> | |
59 | </div> | |
60 | </div> | |
61 | </form> | |
62 | </div> | |
63 | {% if pagename != "index" %} | |
64 | <button type="button" class="btn btn-success d-md-none btn-small ml-2" data-toggle="modal" | |
65 | data-target="#navbarToc"> | |
66 | TOC | |
67 | </button> | |
68 | {% endif %} | |
69 | 57 | </nav> |
70 | {% if pagename != "index" %} | |
71 | <div class="modal fade" id="navbarToc" tabindex="-1" role="dialog" | |
72 | aria-hidden="true" aria-labelledby="navbarTocTitle"> | |
73 | <div class="modal-dialog modal-dialog-centered" role="document"> | |
74 | <div class="modal-content"> | |
75 | <div class="modal-header"> | |
76 | <h5 class="modal-title" id="navbarTocTitle">Contents</h5> | |
77 | <button type="button" class="close" data-dismiss="modal" aria-label="Close"> | |
78 | <span aria-hidden="true">×</span> | |
79 | </button> | |
80 | </div> | |
81 | <div class="modal-body"> | |
82 | {{ toctree(maxdepth=-1) }} | |
83 | </div> | |
84 | </div> | |
85 | </div> | |
86 | </div> | |
87 | {% endif %} | |
88 | 58 | {% endblock %} |
89 | ||
90 | 59 | {% block relbar1 %}{% endblock %} |
91 | 60 | {% block relbar2 %}{% endblock %} |
92 | 61 | {% block footer %}{% endblock %} |
93 | 62 | {% block content %} |
94 | <div class="container-fluid row"> | |
95 | <div class="col-12 {% if pagename != "index" %}col-md-9 col-xl-10{% endif %} doc-content"> | |
96 | {% block body %}{% endblock %} | |
63 | <div class="container-fluid"> | |
64 | <div class="row"> | |
65 | <div class="instaloaderdoc-sidebar collapse d-md-block col-md-3 col-xl-2 bg-light" | |
66 | id="instaloaderdocSidebar"> | |
67 | <nav role="navigation" aria-label="Table of Contents"> | |
68 | <form action="{{ pathto('search') }}" method="get" role="search" class="border-bottom mr-2 pb-2 mb-2 px-1"> | |
69 | <label class="sr-only" for="searchQueryInput">Search</label> | |
70 | <input type="search" name="q" id="searchQueryInput" class="form-control my-2" | |
71 | placeholder="Search..." aria-label="Search"> | |
72 | </form> | |
73 | <h4>Contents</h4> | |
74 | {{ toctree(maxdepth=-1) }} | |
75 | </nav> | |
76 | </div> | |
77 | <main class="col-12 col-md-9 col-xl-10 pt-2" role="main"> | |
78 | {% block body %}{% endblock %} | |
79 | </main> | |
97 | 80 | </div> |
98 | {% if pagename != "index" %} | |
99 | <div class="d-none col-md-3 col-xl-2 bg-light doc-sidebar d-md-flex flex-column border-left"> | |
100 | ||
101 | <h3>{{ _('Table of Contents') }}</h3> | |
102 | {{ toctree(maxdepth=-1) }} | |
103 | ||
104 | <div class="d-flex justify-content-between small mt-auto mb-2"> | |
105 | <a class="reference internal{% if pagename == "genindex" %} current{% endif %}" href="genindex.html">Index</a> | |
106 | {% if pagename != "genindex" and pagename != "search" %} | |
107 | <a class="reference external" | |
108 | href="https://github.com/instaloader/instaloader/edit/master/docs/{{ pagename }}.rst">Edit this page</a> | |
109 | {% endif %} | |
110 | </div> | |
111 | </div> | |
112 | {% endif %} | |
113 | 81 | </div> |
114 | {% endblock %}⏎ | |
82 | {% endblock %} |
11 | 11 | |
12 | 12 | .. highlight:: python |
13 | 13 | |
14 | .. contents:: | |
15 | :backlinks: none | |
16 | ||
17 | 14 | Instaloader exposes its internally used methods and structures as a Python |
18 | module, making it a **powerful and intuitive Python API for Instagram**, | |
15 | module, making it a powerful and intuitive Python API for Instagram, | |
19 | 16 | allowing to further customize obtaining media and metadata. |
20 | 17 | |
21 | 18 | Start with getting an instance of :class:`Instaloader`:: |
84 | 81 | - :meth:`Profile.get_followers` |
85 | 82 | Profiles that follow given user. |
86 | 83 | |
87 | - :attr:`Post.owner_profile`, :attr:`Story.owner_profile` and :attr:`StoryItem.owner_profile` | |
84 | - :attr:`Post.owner_profile`, :attr:`Story.owner_profile`, :attr:`StoryItem.owner_profile` | |
88 | 85 | Owner profile of particular object. |
89 | 86 | |
90 | 87 | - :meth:`Post.get_likes` |
91 | 88 | Profiles that liked a given :class:`Post` |
92 | 89 | |
93 | - :attr:`PostComment.owner` attribute for comment in :meth:`Post.get_comments` | |
90 | - :attr:`PostComment.owner` | |
94 | 91 | Profile of a Post comment. |
95 | 92 | |
96 | A reference of the many methods provided by the :mod:`instaloader` module is | |
97 | provided in the remainder of this document. | |
93 | For a list of a few code examples that use the Instaloader module, see | |
94 | :ref:`codesnippets`. | |
98 | 95 | |
99 | For a list of real code examples using the Instaloader module for advanced | |
100 | tasks, see :ref:`codesnippets`. | |
96 | The reference of the classes and functions provided by the :mod:`instaloader` module is | |
97 | divided into the following subsections: | |
101 | 98 | |
102 | ``Instaloader`` (Main Class) | |
103 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
99 | .. toctree:: | |
100 | :maxdepth: 2 | |
104 | 101 | |
105 | .. autoclass:: Instaloader | |
106 | :no-show-inheritance: | |
107 | ||
108 | Instagram Structures | |
109 | ^^^^^^^^^^^^^^^^^^^^ | |
110 | ||
111 | Posts | |
112 | """"" | |
113 | ||
114 | .. autoclass:: Post | |
115 | :no-show-inheritance: | |
116 | ||
117 | Additionally, the following trivial structures are defined: | |
118 | ||
119 | .. autoclass:: PostSidecarNode | |
120 | :no-show-inheritance: | |
121 | ||
122 | .. autoclass:: PostComment | |
123 | :no-show-inheritance: | |
124 | ||
125 | .. autoclass:: PostCommentAnswer | |
126 | :no-show-inheritance: | |
127 | ||
128 | .. autoclass:: PostLocation | |
129 | :no-show-inheritance: | |
130 | ||
131 | User Stories | |
132 | """""""""""" | |
133 | ||
134 | .. autoclass:: Story | |
135 | :no-show-inheritance: | |
136 | ||
137 | .. autoclass:: StoryItem | |
138 | :no-show-inheritance: | |
139 | ||
140 | Highlights | |
141 | """""""""" | |
142 | ||
143 | .. autoclass:: Highlight | |
144 | :no-show-inheritance: | |
145 | :inherited-members: | |
146 | ||
147 | Bases: :class:`Story` | |
148 | ||
149 | .. versionadded:: 4.1 | |
150 | ||
151 | Profiles | |
152 | """""""" | |
153 | ||
154 | .. autoclass:: Profile | |
155 | :no-show-inheritance: | |
156 | ||
157 | Hashtags | |
158 | """""""" | |
159 | ||
160 | .. autoclass:: Hashtag | |
161 | :no-show-inheritance: | |
162 | ||
163 | .. versionadded:: 4.4 | |
164 | ||
165 | TopSearchResults | |
166 | """""""""""""""" | |
167 | ||
168 | .. autoclass:: TopSearchResults | |
169 | :no-show-inheritance: | |
170 | ||
171 | .. versionadded:: 4.3 | |
172 | ||
173 | Loading and Saving | |
174 | """""""""""""""""" | |
175 | ||
176 | :class:`Post`, :class:`StoryItem`, :class:`Profile` and :class:`Hashtag` can be saved and loaded | |
177 | to/from JSON files. | |
178 | ||
179 | .. autofunction:: load_structure_from_file | |
180 | ||
181 | .. autofunction:: save_structure_to_file | |
182 | ||
183 | Exceptions | |
184 | ^^^^^^^^^^ | |
185 | ||
186 | .. currentmodule:: instaloader.exceptions | |
187 | ||
188 | .. autoexception:: InstaloaderException | |
189 | :no-show-inheritance: | |
190 | ||
191 | .. autoexception:: ConnectionException | |
192 | ||
193 | .. currentmodule:: instaloader | |
194 | ||
195 | .. autoexception:: QueryReturnedBadRequestException | |
196 | ||
197 | .. autoexception:: QueryReturnedForbiddenException | |
198 | ||
199 | .. autoexception:: ProfileNotExistsException | |
200 | ||
201 | .. autoexception:: ProfileHasNoPicsException | |
202 | ||
203 | .. autoexception:: PrivateProfileNotFollowedException | |
204 | ||
205 | .. autoexception:: LoginRequiredException | |
206 | ||
207 | .. autoexception:: TwoFactorAuthRequiredException | |
208 | ||
209 | .. versionadded:: 4.2 | |
210 | ||
211 | .. autoexception:: InvalidArgumentException | |
212 | ||
213 | .. autoexception:: BadResponseException | |
214 | ||
215 | .. autoexception:: BadCredentialsException | |
216 | ||
217 | .. autoexception:: PostChangedException | |
218 | ||
219 | .. autoexception:: QueryReturnedNotFoundException | |
220 | ||
221 | .. versionchanged:: 4.3 | |
222 | QueryReturnedNotFoundException now inherits ConnectionException | |
223 | to retry on 404 errors. | |
224 | ||
225 | ||
226 | .. autoexception:: TooManyRequestsException | |
227 | ||
228 | ``InstaloaderContext`` (Low-level functions) | |
229 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
230 | ||
231 | .. autoclass:: InstaloaderContext | |
232 | :no-show-inheritance: | |
102 | module/instaloader | |
103 | module/structures | |
104 | module/nodeiterator | |
105 | module/instaloadercontext | |
106 | module/exceptions |
76 | 76 | instructs Instaloader to also **download the user's stories**, |
77 | 77 | |
78 | 78 | - :option:`--highlights` |
79 | to **download highlights of each profile that is downloaded**, | |
79 | to **download the highlights of that profile**, | |
80 | 80 | |
81 | 81 | - :option:`--tagged` |
82 | 82 | to **download posts where the user is tagged**, and |
85 | 85 | to **download IGTV videos**. |
86 | 86 | |
87 | 87 | - ``"#hashtag"`` |
88 | Posts with a certain **hashtag** (the quotes are usually necessary), | |
88 | Posts with a certain **hashtag** (the quotes are usually necessary). | |
89 | 89 | |
90 | 90 | - ``%location id`` |
91 | 91 | Posts tagged with a given location; the location ID is the numerical ID |
97 | 97 | |
98 | 98 | - ``:stories`` |
99 | 99 | The currently-visible **stories** of your followees (requires |
100 | :option:`--login`), | |
100 | :option:`--login`). | |
101 | 101 | |
102 | 102 | - ``:feed`` |
103 | Your **feed** (requires :option:`--login`), | |
103 | Your **feed** (requires :option:`--login`). | |
104 | 104 | |
105 | 105 | - ``:saved`` |
106 | Posts which are marked as **saved** (requires :option:`--login`), | |
106 | Posts which are marked as **saved** (requires :option:`--login`). | |
107 | 107 | |
108 | 108 | - ``@profile`` |
109 | 109 | All profiles that are followed by ``profile``, i.e. the *followees* of |
110 | 110 | ``profile`` (requires :option:`--login`). |
111 | 111 | |
112 | 112 | - ``-post`` |
113 | Replace **post** with the post's shortcode to download single post. Must be preceeded by ``--`` in | |
113 | Replace **post** with the post's shortcode to download single post. Must be preceded by ``--`` in | |
114 | 114 | the argument list to not be mistaken as an option flag:: |
115 | 115 | |
116 | 116 | instaloader -- -B_K4CykAOtf |
195 | 195 | .. py:currentmodule:: instaloader |
196 | 196 | |
197 | 197 | The options :option:`--post-filter` and :option:`--storyitem-filter` |
198 | allows to specify criteria that posts or story items have to | |
198 | allow to specify criteria that posts or story items have to | |
199 | 199 | meet to be downloaded. If not given, all posts are downloaded. |
200 | 200 | |
201 | 201 | The filter string must be a |
207 | 207 | :option:`--post-filter` and :option:`--storyitem-filter`: |
208 | 208 | |
209 | 209 | - :attr:`~Post.owner_username` (str), :attr:`~Post.owner_id` (int) |
210 | Owner profile username / userid. | |
210 | Owner profile username / user ID. | |
211 | 211 | |
212 | 212 | - :attr:`~Post.date_utc` (datetime), :attr:`~Post.date_local` (datetime) |
213 | 213 | Creation timestamp. Since :class:`~datetime.datetime` objects can be created |
216 | 216 | instaloader --post-filter="date_utc <= datetime(2018, 5, 31)" target |
217 | 217 | |
218 | 218 | - :attr:`~Post.is_video` (bool) |
219 | Post/StoryItem is a video. For example, you may skip videos:: | |
219 | Whether Post/StoryItem is a video. For example, you may skip videos:: | |
220 | 220 | |
221 | 221 | instaloader --post-filter="not is_video" target |
222 | 222 | |
233 | 233 | instaloader --login=your_username --post-filter=viewer_has_liked :feed |
234 | 234 | |
235 | 235 | - :attr:`~Post.likes` (int), :attr:`~Post.comments` (int) |
236 | Likes count / Comments count. You might only want to download posts that | |
237 | either you liked or were liked by many others**:: | |
236 | Likes count / comments count. You might only want to download posts that | |
237 | were either liked by yourself or by many others:: | |
238 | 238 | |
239 | 239 | instaloader --login=your_username --post-filter="likes>100 or viewer_has_liked" profile |
240 | 240 | |
264 | 264 | You can customize what metadata to save for each Post or StoryItem with |
265 | 265 | :option:`--post-metadata-txt` and :option:`--storyitem-metadata-txt`. The |
266 | 266 | default is ``--post-metadata-txt={caption}`` and no storyitem metadata txt. |
267 | These strings are formatted similar as in the :ref:`filename-specification` and | |
267 | These strings are formatted similar as the path patterns described in :ref:`filename-specification` and | |
268 | 268 | the result is saved in text files, unless it is empty. |
269 | 269 | |
270 | 270 | Specifying these options multiple times results in output having multiple lines, |
298 | 298 | |
299 | 299 | instaloader --login=your_username |
300 | 300 | |
301 | Then use the same parameter in your cronjob to load the session and download | |
301 | Then use the same username in your cronjob to load the session and download | |
302 | 302 | the given targets:: |
303 | 303 | |
304 | instaloader --login=your_username --quiet <target> [...] | |
304 | instaloader --login=your_username --quiet target [...] | |
305 | 305 | |
306 | 306 | Instaloader saves the session file to |
307 | 307 | ``~/.config/instaloader/session-YOUR-USERNAME``. See |
316 | 316 | powerful and intuitive Python API for Instagram, allowing to further customize |
317 | 317 | obtaining media and metadata. |
318 | 318 | |
319 | Also see :ref:`codesnippets`, where we collect example scripts that use | |
320 | Instaloader to achieve more complex tasks. | |
319 | Also see :ref:`codesnippets`, where we collect a few example scripts that use | |
320 | Instaloader for simple tasks that cannot be done with the command line | |
321 | interface. |
35 | 35 | Re-Download the given object |
36 | 36 | |
37 | 37 | - ``+args.txt`` |
38 | Read targets (and options) from given textfile. See :option:`+args.txt`. | |
38 | Read targets (and options) from given text file. See :option:`+args.txt`. | |
39 | 39 | |
40 | 40 | What to Download of each Post |
41 | 41 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
58 | 58 | |
59 | 59 | .. option:: --geotags, -G |
60 | 60 | |
61 | **Download geotags** when available. Geotags are stored as a text file with | |
61 | Download geotags when available. Geotags are stored as a text file with | |
62 | 62 | the location's name and a Google Maps link. This requires an additional |
63 | 63 | request to the Instagram server for each picture. Requires :option:`--login`. |
64 | 64 | |
93 | 93 | What to Download of each Profile |
94 | 94 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
95 | 95 | |
96 | .. option:: --profile-pic-only, -P | |
97 | ||
98 | .. deprecated:: 4.1 | |
99 | Use :option:`--no-posts`. | |
100 | ||
101 | Only download profile picture. | |
102 | ||
103 | 96 | .. option:: --no-posts |
104 | 97 | |
105 | 98 | Do not download regular posts. |
112 | 105 | |
113 | 106 | .. option:: --stories, -s |
114 | 107 | |
115 | Also **download stories** of each profile that is downloaded. Requires | |
108 | Also download stories of each profile that is downloaded. Requires | |
116 | 109 | :option:`--login`. |
117 | 110 | |
118 | 111 | .. option:: --highlights |
119 | 112 | |
120 | Also **download highlights** of each profile that is downloaded. Requires | |
113 | Also download highlights of each profile that is downloaded. Requires | |
121 | 114 | :option:`--login`. |
122 | 115 | |
123 | 116 | .. versionadded:: 4.1 |
133 | 126 | Also download IGTV videos. |
134 | 127 | |
135 | 128 | .. versionadded:: 4.3 |
136 | ||
137 | .. option:: --stories-only | |
138 | ||
139 | .. deprecated:: 4.1 | |
140 | Use :option:`--stories` :option:`--no-posts`. | |
141 | ||
142 | Rather than downloading regular posts of each specified profile, only | |
143 | download stories. Requires :option:`--login`. Does not imply | |
144 | :option:`--no-profile-pic`. | |
145 | ||
146 | .. note:: | |
147 | ||
148 | If possible, use ``:stories`` target rather than :option:`--stories-only` | |
149 | with all your followees. ``:stories`` uses fewer API requests. | |
150 | 129 | |
151 | 130 | Which Posts to Download |
152 | 131 | ^^^^^^^^^^^^^^^^^^^^^^^ |
181 | 160 | Login (Download Private Profiles) |
182 | 161 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
183 | 162 | |
184 | Instaloader can **login to Instagram**. This allows downloading private | |
163 | Instaloader can login to Instagram. This allows downloading private | |
185 | 164 | profiles. To login, pass the :option:`--login` option. Your session cookie (not your |
186 | 165 | password!) will be saved to a local file to be reused next time you want |
187 | 166 | Instaloader to login. |
222 | 201 | ``#hashtag`` or the profile name. Defaults to ``{date_utc}_UTC``. |
223 | 202 | See :ref:`filename-specification` for a list of supported tokens. |
224 | 203 | |
204 | .. option:: --resume-prefix prefix | |
205 | ||
206 | For many targets, Instaloader is capable of resuming a previously-aborted | |
207 | download loop. To do so, it creates a JSON file within the target directory | |
208 | when interrupted. This option controls the prefix for filenames that are | |
209 | used to save the information to resume an interrupted download. The default | |
210 | prefix is ``iterator``. | |
211 | ||
212 | Resuming an interrupted download is supported for most, but not all targets. | |
213 | JSON files with resume information are always compressed, regardless of | |
214 | :option:`--no-compress-json`. | |
215 | ||
216 | This feature is turned off entirely with :option:`--no-resume`. | |
217 | ||
218 | .. versionadded:: 4.5 | |
219 | ||
220 | .. option:: --no-resume | |
221 | ||
222 | Do not resume a previously-aborted download iteration, and do not save such | |
223 | information when interrupted. | |
224 | ||
225 | .. versionadded:: 4.5 | |
226 | ||
225 | 227 | .. option:: --user-agent USER_AGENT |
226 | 228 | |
227 | 229 | User Agent to use for HTTP requests. Per default, Instaloader pretends being |
233 | 235 | to ``3``. If a connection fails, it can be manually skipped by hitting |
234 | 236 | :kbd:`Control-c`. Set this to ``0`` to retry infinitely. |
235 | 237 | |
236 | .. option:: --commit-mode | |
237 | ||
238 | Tries to ensure downloaded images avoid corruption in case of unexpected | |
239 | interruption. If the last picture is corrupted, Instaloader will fix the | |
240 | picture the next time it is run. | |
241 | ||
242 | .. versionadded:: 4.2 | |
243 | ||
244 | .. warning:: | |
245 | We discourage from using the "commit mode" due to its bugs when being used | |
246 | with other command line options (e.g. :issue:`257` with | |
247 | :option:`--fast-update` and :issue:`483` with :option:`--tagged`). | |
248 | ||
249 | 238 | .. option:: --request-timeout N |
250 | 239 | |
251 | 240 | Seconds to wait before timing out a connection request. |
265 | 254 | |
266 | 255 | Read arguments from file `args.txt`, a shortcut to provide arguments from |
267 | 256 | file rather than command-line. This provides a convenient way to hide login |
268 | info from CLI, and can also be used to simplify managment of long arguments. | |
257 | info from CLI, and can also be used to simplify management of long arguments. | |
269 | 258 | |
270 | 259 | .. note:: |
271 | 260 | |
272 | 261 | Text file should separate arguments with line breaks. |
273 | 262 | |
274 | args.txt example:: | |
275 | ||
276 | --login=MYUSERNAME | |
277 | --password=MYPASSWORD | |
278 | --fast-update | |
279 | profile1 | |
280 | profile2 | |
281 | ||
282 | .. versionadded:: 4.1 | |
263 | args.txt example:: | |
264 | ||
265 | --login=MYUSERNAME | |
266 | --password=MYPASSWORD | |
267 | --fast-update | |
268 | profile1 | |
269 | profile2 | |
270 | ||
271 | .. versionadded:: 4.1 |
0 | from io import BytesIO | |
1 | ||
2 | from requests import get | |
3 | from PIL import Image, ImageDraw | |
4 | from instaloader import * | |
5 | ||
6 | L = Instaloader() | |
7 | ||
8 | # Load Post instance | |
9 | post = load_structure_from_file(L.context, '2017-10-01_18-53-03_UTC.json.xz') | |
10 | # or post = Post.from_shortcode(L.context, SHORTCODE) | |
11 | ||
12 | # Render caption | |
13 | image = Image.open(BytesIO(get(post.url).content)) | |
14 | draw = ImageDraw.Draw(image) | |
15 | color = 'rgb(0, 0, 0)' # black color | |
16 | draw.text((300,100), post.caption.encode('latin1', errors='ignore'), fill=color) | |
17 | ||
18 | # Save image | |
19 | image.save('test.jpg') |
1 | 1 | |
2 | 2 | L = instaloader.Instaloader() |
3 | 3 | |
4 | USER = 'your_account' | |
4 | USER = "your_account" | |
5 | 5 | PROFILE = USER |
6 | 6 | |
7 | # Your preferred way of logging in: | |
7 | # Load session previously saved with `instaloader -l USERNAME`: | |
8 | 8 | L.load_session_from_file(USER) |
9 | 9 | |
10 | 10 | profile = instaloader.Profile.from_username(L.context, PROFILE) |
11 | 11 | |
12 | 12 | likes = set() |
13 | print('Fetching likes of all posts of profile {}.'.format(profile.username)) | |
13 | print("Fetching likes of all posts of profile {}.".format(profile.username)) | |
14 | 14 | for post in profile.get_posts(): |
15 | 15 | print(post) |
16 | 16 | likes = likes | set(post.get_likes()) |
17 | 17 | |
18 | print('Fetching followers of profile {}.'.format(profile.username)) | |
18 | print("Fetching followers of profile {}.".format(profile.username)) | |
19 | 19 | followers = set(profile.get_followers()) |
20 | 20 | |
21 | 21 | ghosts = followers - likes |
22 | 22 | |
23 | print('Storing ghosts into file.') | |
24 | with open('/YOUR PATH/inactive-users.txt', 'w') as f: | |
23 | print("Storing ghosts into file.") | |
24 | with open("inactive-users.txt", 'w') as f: | |
25 | 25 | for ghost in ghosts: |
26 | 26 | print(ghost.username, file=f) |
8 | 8 | UNTIL = datetime(2020, 5, 11) # closer to today, not inclusive |
9 | 9 | |
10 | 10 | k = 0 # initiate k |
11 | k_list = [] # uncomment this to tune k | |
11 | #k_list = [] # uncomment this to tune k | |
12 | 12 | |
13 | 13 | for post in posts: |
14 | 14 | postdate = post.date |
23 | 23 | continue |
24 | 24 | else: |
25 | 25 | L.download_post(post, "#urbanphotography") |
26 | k = 0 # set k to 0 | |
27 | 26 | # if you want to tune k, uncomment below to get your k max |
28 | 27 | #k_list.append(k) |
28 | k = 0 # set k to 0 | |
29 | ||
29 | 30 | #max(k_list) |
41 | 41 | :func:`~itertools.takewhile` makes the assumption that the post iterator returns |
42 | 42 | posts in exact chronological order. As discussed in :issue:`666`, the following |
43 | 43 | approach fits for an **almost chronological order**, where up to *k* older posts |
44 | are inserted into an otherwise chronological order, such as an Hashtag feed. | |
44 | are inserted into an otherwise chronological order, such as a Hashtag feed. | |
45 | 45 | |
46 | 46 | .. literalinclude:: codesnippets/666_historical_hashtag_data.py |
47 | 47 | |
49 | 49 | ------------------------------------ |
50 | 50 | |
51 | 51 | To obtain a list of your inactive followers, i.e. followers that did not like |
52 | any of your pictures, into a file you can use this approach. | |
52 | any of your pictures, you can use this approach. | |
53 | 53 | |
54 | 54 | .. literalinclude:: codesnippets/120_ghost_followers.py |
55 | 55 | |
77 | 77 | Only one Post per User |
78 | 78 | ---------------------- |
79 | 79 | |
80 | To download only the one most recent post from each user, this snippet creates a | |
81 | :class:`set` that contains the users of which a post has already been | |
82 | downloaded. While iterating the posts, it checks whether the post's owner | |
83 | already is in the set. If not, the post is downloaded from Instagram and the | |
84 | user is added to that set. | |
80 | To download only the single most recent post per user within a hashtag feed, | |
81 | this snippet uses a :class:`set` that contains the users of whom a post has | |
82 | already been downloaded. For each post, it checks whether the post's creator is | |
83 | already contained in that set. If not, the post is downloaded from Instagram and | |
84 | the user is added to that set. | |
85 | 85 | |
86 | 86 | .. literalinclude:: codesnippets/113_only_one_per_user.py |
87 | 87 | |
93 | 93 | Top X Posts of User |
94 | 94 | ------------------- |
95 | 95 | |
96 | With Instaloader, it is easy to download the few most-liked pictres of a user. | |
96 | With Instaloader, it is easy to download the few most-liked pictures of a user. | |
97 | 97 | |
98 | 98 | .. literalinclude:: codesnippets/194_top_x_of_user.py |
99 | 99 | |
100 | 100 | Discussed in :issue:`194`. |
101 | ||
102 | Upgrade Images by Local Copies | |
103 | ------------------------------ | |
104 | ||
105 | The following script finds local versions of images fetched by Instaloader, in | |
106 | order to upgrade the downloaded images by locally-found versions with better | |
107 | quality. It uses image hashing to identify similar images. | |
108 | ||
109 | `updgrade-instaloader-images.py <https://gist.github.com/pavelkryukov/15f93d19a99428a284a8bcec27e0187b>`__ (external link to GitHub Gist) | |
110 | ||
111 | Discussed in :issue:`46`. | |
112 | ||
113 | Add Captions to Images | |
114 | ---------------------- | |
115 | ||
116 | Instaloader does not modify the downloaded JPEG file. However, one could combine | |
117 | it with an imaging library such as Pillow or PIL to render the caption on | |
118 | Instagram pictures. The following shows an approach. | |
119 | ||
120 | .. literalinclude:: codesnippets/110_pil_captions.py | |
121 | ||
122 | See also :attr:`Post.caption`, :attr:`Post.url`, :meth:`Post.from_shortcode`, | |
123 | :func:`load_structure_from_file`. | |
124 | ||
125 | Discussed in :issue:`110`. | |
126 | 101 | |
127 | 102 | Metadata JSON Files |
128 | 103 | ------------------- |
48 | 48 | |
49 | 49 | intersphinx_mapping = {'python': ('https://docs.python.org/3', None), |
50 | 50 | 'requests': ('https://requests.kennethreitz.org/en/master/', None)} |
51 | ||
52 | nitpick_ignore = [('py:class', 'typing.Tuple')] | |
51 | 53 | |
52 | 54 | current_release = subprocess.check_output(["git", "describe", "--abbrev=0"]).decode("ascii")[1:-1] |
53 | 55 | date_format = "%e %b %Y" if platform.system() != "Windows" else "%d %b %Y" |
371 | 373 | |
372 | 374 | def setup(app): |
373 | 375 | typing.TYPE_CHECKING = True |
374 | app.add_stylesheet("instaloader.css") | |
376 | app.add_stylesheet("instaloaderdoc.css") | |
375 | 377 | app.connect('autodoc-process-signature', sphinx_autodoc_typehints.process_signature) |
376 | 378 | app.connect('autodoc-process-docstring', sphinx_autodoc_typehints.process_docstring) |
31 | 31 | |
32 | 32 | - Include all **error messages and tracebacks** in the report. |
33 | 33 | |
34 | - If not obvious, describe **which behavior you expected** | |
34 | - Even if it seems obvious, describe **which behavior you expected** | |
35 | 35 | instead of what actually happened. |
36 | 36 | |
37 | 37 | - If we have closed an issue apparently inadvertently or inappropriately, please |
38 | 38 | |
39 | 39 | - allows **fine-grained customization** of filters and where to store |
40 | 40 | downloaded media, |
41 | ||
42 | - automatically **resumes previously-interrupted** download iterations, | |
41 | 43 | |
42 | 44 | - is free `open source <https://github.com/instaloader/instaloader>`__ |
43 | 45 | software written in Python. |
4 | 4 | |
5 | 5 | .. highlight:: none |
6 | 6 | |
7 | **To install Instaloader**, | |
7 | To **install Instaloader**, | |
8 | 8 | |
9 | 9 | #. Ensure that you have `Python <https://www.python.org/>`__, at least |
10 | version 3.5 and `pip <https://pypi.python.org/pypi/pip>`__ | |
11 | installed | |
10 | version 3.5, and `pip <https://pypi.python.org/pypi/pip>`__ | |
11 | installed. | |
12 | 12 | |
13 | 13 | #. Then, install Instaloader using:: |
14 | 14 | |
15 | 15 | pip3 install instaloader |
16 | 16 | |
17 | **To upgrade Instaloader**, do:: | |
17 | To **upgrade Instaloader** to its current version, do:: | |
18 | 18 | |
19 | 19 | pip3 install --upgrade instaloader |
20 | 20 | |
21 | 21 | |
22 | **Alternative methods for installing Instaloader:** | |
22 | **Alternative methods** for installing Instaloader: | |
23 | 23 | |
24 | 24 | - If you do not want to use pip, even though it is highly recommended, |
25 | 25 | and prefer to **install Instaloader manually**, |
26 | 26 | `Download the Source <https://github.com/instaloader/instaloader/releases/latest>`__, |
27 | extract the Zip or Tarball and execute ``instaloader.py`` from there. | |
27 | extract the Zip or Tarball and run ``setup.py`` from there. | |
28 | 28 | |
29 | 29 | - On **Arch Linux**, you may install Instaloader using the |
30 | 30 | `Instaloader AUR package <https://aur.archlinux.org/packages/instaloader/>`__. |
32 | 32 | - On **Windows 10**, you may download the standalone executable from the |
33 | 33 | `current release page <https://github.com/instaloader/instaloader/releases/latest>`__. |
34 | 34 | |
35 | - To test the most current pre-release or development version of Instaloader:: | |
35 | - On **Android**, you can use Instaloader with `Termux <https://play.google.com/store/apps/details?id=com.termux>`__ | |
36 | after typing ``pkg install python`` and ``pip3 install instaloader``. | |
37 | ||
38 | - To test the most current **pre-release** version of Instaloader:: | |
36 | 39 | |
37 | 40 | pip3 install --pre instaloader |
0 | Exceptions | |
1 | ^^^^^^^^^^ | |
2 | ||
3 | .. module:: instaloader | |
4 | :noindex: | |
5 | ||
6 | .. highlight:: python | |
7 | ||
8 | .. currentmodule:: instaloader.exceptions | |
9 | ||
10 | .. autoexception:: InstaloaderException | |
11 | :no-show-inheritance: | |
12 | ||
13 | .. autoexception:: ConnectionException | |
14 | ||
15 | .. currentmodule:: instaloader | |
16 | ||
17 | .. autoexception:: QueryReturnedBadRequestException | |
18 | ||
19 | .. autoexception:: QueryReturnedForbiddenException | |
20 | ||
21 | .. autoexception:: ProfileNotExistsException | |
22 | ||
23 | .. autoexception:: ProfileHasNoPicsException | |
24 | ||
25 | .. autoexception:: PrivateProfileNotFollowedException | |
26 | ||
27 | .. autoexception:: LoginRequiredException | |
28 | ||
29 | .. autoexception:: TwoFactorAuthRequiredException | |
30 | ||
31 | .. versionadded:: 4.2 | |
32 | ||
33 | .. autoexception:: InvalidArgumentException | |
34 | ||
35 | .. autoexception:: BadResponseException | |
36 | ||
37 | .. autoexception:: BadCredentialsException | |
38 | ||
39 | .. autoexception:: PostChangedException | |
40 | ||
41 | .. autoexception:: QueryReturnedNotFoundException | |
42 | ||
43 | .. versionchanged:: 4.3 | |
44 | QueryReturnedNotFoundException now inherits ConnectionException | |
45 | to retry on 404 errors. | |
46 | ||
47 | ||
48 | .. autoexception:: TooManyRequestsException |
0 | ``Instaloader`` (Main Class) | |
1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
2 | ||
3 | .. module:: instaloader | |
4 | :noindex: | |
5 | ||
6 | .. highlight:: python | |
7 | ||
8 | .. autoclass:: Instaloader | |
9 | :no-show-inheritance:⏎ |
0 | ``InstaloaderContext`` (Low-level functions) | |
1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | |
2 | ||
3 | .. module:: instaloader | |
4 | :noindex: | |
5 | ||
6 | .. highlight:: python | |
7 | ||
8 | .. contents:: | |
9 | :backlinks: none | |
10 | ||
11 | ``InstaloaderContext`` | |
12 | """""""""""""""""""""" | |
13 | ||
14 | .. autoclass:: InstaloaderContext | |
15 | :no-show-inheritance: | |
16 | ||
17 | ``RateController`` | |
18 | """""""""""""""""" | |
19 | ||
20 | .. autoclass:: RateController | |
21 | :no-show-inheritance: | |
22 | ||
23 | .. versionadded:: 4.5 |
0 | Resumable Iterations | |
1 | ^^^^^^^^^^^^^^^^^^^^ | |
2 | ||
3 | .. module:: instaloader | |
4 | :noindex: | |
5 | ||
6 | .. highlight:: python | |
7 | ||
8 | .. contents:: | |
9 | :backlinks: none | |
10 | ||
11 | For many download targets, Instaloader is able to resume a | |
12 | previously-interrupted iteration. It provides an interruptible | |
13 | Iterator :class:`NodeIterator` and a context manager | |
14 | :func:`resumable_iteration`, which we both present here. | |
15 | ||
16 | .. versionadded:: 4.5 | |
17 | ||
18 | ``NodeIterator`` | |
19 | """""""""""""""" | |
20 | ||
21 | .. autoclass:: NodeIterator | |
22 | :no-show-inheritance: | |
23 | ||
24 | .. autoclass:: FrozenNodeIterator | |
25 | :no-show-inheritance: | |
26 | ||
27 | ``resumable_iteration`` | |
28 | """"""""""""""""""""""" | |
29 | ||
30 | .. autofunction:: resumable_iteration⏎ |
0 | Instagram Structures | |
1 | ^^^^^^^^^^^^^^^^^^^^ | |
2 | ||
3 | .. module:: instaloader | |
4 | :noindex: | |
5 | ||
6 | .. highlight:: python | |
7 | ||
8 | .. contents:: | |
9 | :backlinks: none | |
10 | ||
11 | Posts | |
12 | """"" | |
13 | ||
14 | .. autoclass:: Post | |
15 | :no-show-inheritance: | |
16 | ||
17 | Additionally, the following trivial structures are defined: | |
18 | ||
19 | .. autoclass:: PostSidecarNode | |
20 | :no-show-inheritance: | |
21 | ||
22 | .. autoclass:: PostComment | |
23 | :no-show-inheritance: | |
24 | ||
25 | .. autoclass:: PostCommentAnswer | |
26 | :no-show-inheritance: | |
27 | ||
28 | .. autoclass:: PostLocation | |
29 | :no-show-inheritance: | |
30 | ||
31 | User Stories | |
32 | """""""""""" | |
33 | ||
34 | .. autoclass:: Story | |
35 | :no-show-inheritance: | |
36 | ||
37 | .. autoclass:: StoryItem | |
38 | :no-show-inheritance: | |
39 | ||
40 | Highlights | |
41 | """""""""" | |
42 | ||
43 | .. autoclass:: Highlight | |
44 | :no-show-inheritance: | |
45 | :inherited-members: | |
46 | ||
47 | Bases: :class:`Story` | |
48 | ||
49 | .. versionadded:: 4.1 | |
50 | ||
51 | Profiles | |
52 | """""""" | |
53 | ||
54 | .. autoclass:: Profile | |
55 | :no-show-inheritance: | |
56 | ||
57 | Hashtags | |
58 | """""""" | |
59 | ||
60 | .. autoclass:: Hashtag | |
61 | :no-show-inheritance: | |
62 | ||
63 | .. versionadded:: 4.4 | |
64 | ||
65 | TopSearchResults | |
66 | """""""""""""""" | |
67 | ||
68 | .. autoclass:: TopSearchResults | |
69 | :no-show-inheritance: | |
70 | ||
71 | .. versionadded:: 4.3 | |
72 | ||
73 | Loading and Saving | |
74 | """""""""""""""""" | |
75 | ||
76 | :class:`Post`, :class:`StoryItem`, :class:`Profile`, :class:`Hashtag` and | |
77 | :class:`FrozenNodeIterator` can be saved and loaded to/from JSON files. | |
78 | ||
79 | .. autofunction:: load_structure_from_file | |
80 | ||
81 | .. autofunction:: save_structure_to_file |
4 | 4 | |
5 | 5 | .. highlight:: python |
6 | 6 | |
7 | 429 - Too Many Requests | |
8 | ----------------------- | |
7 | 429 Too Many Requests | |
8 | --------------------- | |
9 | 9 | |
10 | 10 | Instaloader has a logic to keep track of its requests to Instagram and to obey |
11 | their rate limits. Since they are nowhere documented, we try them out | |
12 | experimentally. We have a daily cron job running to confirm that Instaloader | |
13 | still stays within the rate limits. Nevertheless, the rate control logic assumes | |
14 | that | |
11 | their rate limits. The rate controller assumes that | |
15 | 12 | |
16 | - at one time, Instaloader is the only application that consumes requests. I.e. | |
13 | - at one time, Instaloader is the only application that consumes requests, i.e. | |
17 | 14 | neither the Instagram browser interface, nor a mobile app, nor another |
18 | Instaloader instance is running in parallel, | |
15 | Instaloader instance is running in parallel, and | |
19 | 16 | |
20 | 17 | - no requests had been consumed when Instaloader starts. |
21 | 18 | |
22 | 19 | The latter one implies that restarting or reinstantiating Instaloader often |
23 | within short time is prone to cause a 429. When a request is denied with a 429, | |
20 | within short time is prone to cause a 429. | |
21 | ||
22 | Since the behavior of the rate controller might change between different | |
23 | versions of Instaloader, make sure to use the current version of Instaloader, | |
24 | especially when encountering many 429 errors. | |
25 | ||
26 | If a request is denied with a 429, | |
24 | 27 | Instaloader retries the request as soon as the temporary ban is assumed to be |
25 | 28 | expired. In case the retry continuously fails for some reason, which should not |
26 | happen in normal conditions, consider adjusting the | |
29 | happen under normal conditions, consider adjusting the | |
27 | 30 | :option:`--max-connection-attempts` option. |
28 | 31 | |
29 | 32 | There have been observations that services, that in their nature offer |
30 | promiscious IP addresses, such as cloud, VPN and public proxy services, might be | |
33 | promiscuous IP addresses, such as cloud, VPN and public proxy services, might be | |
31 | 34 | subject to significantly stricter limits for anonymous access. However, |
32 | 35 | logged-in accesses (see :option:`--login`) do not seem to be affected. |
36 | ||
37 | Instaloader allows to adjust the rate controlling behavior by overriding | |
38 | :class:`instaloader.RateController`. | |
33 | 39 | |
34 | 40 | Too many queries in the last time |
35 | 41 | --------------------------------- |
36 | 42 | |
37 | 43 | **"Too many queries in the last time"** is not an error. It is a notice that the |
38 | 44 | rate limit has almost been reached, according to Instaloader's own rate |
39 | accounting mechanism. We regularly adjust this mechanism to match Instagram's | |
40 | current rate limiting. | |
45 | accounting mechanism. | |
46 | ||
47 | Instaloader allows to adjust the rate controlling behavior by overriding | |
48 | :class:`instaloader.RateController`. | |
41 | 49 | |
42 | 50 | Private but not followed |
43 | 51 | ------------------------ |
45 | 53 | You have to follow a private account to access most of its associated |
46 | 54 | information. |
47 | 55 | |
48 | Login Error | |
56 | Login error | |
49 | 57 | ----------- |
50 | 58 | |
51 | 59 | Instaloader's login *should* work fine, both with and without |
54 | 62 | pointing the user to an URL to be opened in a browser. |
55 | 63 | |
56 | 64 | Nevertheless, in :issue:`92` and :issue:`615` users reported problems with |
57 | logging in. We recommend to always keep the sessionfile which Instaloader | |
58 | creates when using :option:`--login`. If a sessionfile is present, | |
59 | :option:`--login` does not make make use of the failure-prone login procedure. | |
60 | Also, sessionfiles usually do not expire and can be copied between different | |
61 | computers without any problems. | |
65 | logging in. We recommend to always keep the session file which Instaloader | |
66 | creates when using :option:`--login`. If a session file is present, | |
67 | :option:`--login` does not make use of the failure-prone login procedure. | |
68 | Also, session files usually do not expire. | |
62 | 69 | |
63 | If you do not have a sessionfile present, you may use the following script | |
70 | If you do not have a session file present, you may use the following script | |
64 | 71 | (:example:`615_import_firefox_session.py`) to workaround login problems by |
65 | 72 | importing the session cookies from Firefox and bypassing Instaloader's login and |
66 | 73 | so still use Instaloader's logged-in functionality. |
77 | 84 | |
78 | 85 | #. Then, ``instaloader -l USERNAME`` should work fine. |
79 | 86 | |
80 | This script also supports specifying a cookiefile path, which may be useful if | |
87 | This script also supports specifying a cookie file path, which may be useful if | |
81 | 88 | you use multiple Firefox profiles or if your operating system has the directory |
82 | structure differently set up. Also, you can specify an alternative sessionfile | |
89 | structure differently set up. Also, you can specify an alternative session file | |
83 | 90 | path. |
0 | 0 | """Download pictures (or videos) along with their captions and other metadata from Instagram.""" |
1 | 1 | |
2 | 2 | |
3 | __version__ = '4.4.5' | |
3 | __version__ = '4.5.5' | |
4 | 4 | |
5 | 5 | |
6 | 6 | try: |
13 | 13 | |
14 | 14 | from .exceptions import * |
15 | 15 | from .instaloader import Instaloader |
16 | from .instaloadercontext import InstaloaderContext | |
16 | from .instaloadercontext import InstaloaderContext, RateController | |
17 | from .nodeiterator import NodeIterator, FrozenNodeIterator, resumable_iteration | |
17 | 18 | from .structures import (Hashtag, Highlight, Post, PostSidecarNode, PostComment, PostCommentAnswer, PostLocation, |
18 | 19 | Profile, Story, StoryItem, TopSearchResults, load_structure_from_file, save_structure_to_file) |
221 | 221 | # Instaloader did at least save a session file |
222 | 222 | instaloader.context.log("No targets were specified, thus nothing has been downloaded.") |
223 | 223 | else: |
224 | # Instloader did not do anything | |
224 | # Instaloader did not do anything | |
225 | 225 | instaloader.context.log("usage:" + usage_string()) |
226 | 226 | |
227 | 227 | |
228 | 228 | def main(): |
229 | 229 | parser = ArgumentParser(description=__doc__, add_help=False, usage=usage_string(), |
230 | epilog="Report issues at https://github.com/instaloader/instaloader/issues. " | |
231 | "The complete documentation can be found at " | |
230 | epilog="The complete documentation can be found at " | |
232 | 231 | "https://instaloader.github.io/.", |
233 | 232 | fromfile_prefix_chars='+') |
234 | 233 | |
350 | 349 | '--dirname-pattern. {profile} is replaced by the profile name,' |
351 | 350 | '{target} is replaced by the target you specified, i.e. either :feed' |
352 | 351 | '#hashtag or the profile name. Defaults to \'{date_utc}_UTC\'') |
352 | g_how.add_argument('--resume-prefix', metavar='PREFIX', | |
353 | help='Prefix for filenames that are used to save the information to resume an interrupted ' | |
354 | 'download.') | |
355 | g_how.add_argument('--no-resume', action='store_true', | |
356 | help='Do not resume a previously-aborted download iteration, and do not save such information ' | |
357 | 'when interrupted.') | |
358 | g_how.add_argument('--use-aged-resume-files', action='store_true', help=SUPPRESS) | |
353 | 359 | g_how.add_argument('--user-agent', |
354 | 360 | help='User Agent to use for HTTP requests. Defaults to \'{}\'.'.format(default_user_agent())) |
355 | 361 | g_how.add_argument('-S', '--no-sleep', action='store_true', help=SUPPRESS) |
357 | 363 | help='Maximum number of connection attempts until a request is aborted. Defaults to 3. If a ' |
358 | 364 | 'connection fails, it can be manually skipped by hitting CTRL+C. Set this to 0 to retry ' |
359 | 365 | 'infinitely.') |
360 | g_how.add_argument('--commit-mode', action='store_true', | |
361 | help='Tries to ensure downloaded images avoid corruption in case of unexpected interruption. ' | |
362 | 'If the last picture is corrupted, Instaloader will fix the picture the next time it is run. ' | |
363 | 'Requires the JSON metadata to be saved.') | |
366 | g_how.add_argument('--commit-mode', action='store_true', help=SUPPRESS) | |
364 | 367 | g_how.add_argument('--request-timeout', metavar='N', type=float, |
365 | 368 | help='seconds to wait before timing out a connection request') |
366 | 369 | |
396 | 399 | raise SystemExit("--no-captions and --post-metadata-txt or --storyitem-metadata-txt given; " |
397 | 400 | "That contradicts.") |
398 | 401 | |
402 | if args.no_resume and args.resume_prefix: | |
403 | raise SystemExit("--no-resume and --resume-prefix given; That contradicts.") | |
404 | resume_prefix = (args.resume_prefix if args.resume_prefix else 'iterator') if not args.no_resume else None | |
405 | ||
399 | 406 | if args.no_pictures and args.fast_update: |
400 | 407 | raise SystemExit('--no-pictures and --fast-update cannot be used together.') |
401 | 408 | |
403 | 410 | download_profile_pic = not args.no_profile_pic or args.profile_pic_only |
404 | 411 | download_posts = not (args.no_posts or args.stories_only or args.profile_pic_only) |
405 | 412 | download_stories = args.stories or args.stories_only |
406 | ||
407 | if args.commit_mode and args.no_metadata_json: | |
408 | raise SystemExit('--commit-mode requires JSON metadata to be saved.') | |
409 | 413 | |
410 | 414 | loader = Instaloader(sleep=not args.no_sleep, quiet=args.quiet, user_agent=args.user_agent, |
411 | 415 | dirname_pattern=args.dirname_pattern, filename_pattern=args.filename_pattern, |
418 | 422 | storyitem_metadata_txt_pattern=storyitem_metadata_txt_pattern, |
419 | 423 | max_connection_attempts=args.max_connection_attempts, |
420 | 424 | request_timeout=args.request_timeout, |
421 | commit_mode=args.commit_mode) | |
425 | resume_prefix=resume_prefix, | |
426 | check_resume_bbd=not args.use_aged_resume_files) | |
422 | 427 | _main(loader, |
423 | 428 | args.profile, |
424 | 429 | username=args.login.lower() if args.login is not None else None, |
0 | 0 | import getpass |
1 | 1 | import json |
2 | import lzma | |
3 | 2 | import os |
4 | 3 | import platform |
5 | 4 | import re |
13 | 12 | from hashlib import md5 |
14 | 13 | from io import BytesIO |
15 | 14 | from pathlib import Path |
16 | from typing import Any, Callable, Iterator, List, Optional, Set, Union | |
15 | from typing import Any, Callable, IO, Iterator, List, Optional, Set, Union, cast | |
17 | 16 | |
18 | 17 | import requests |
19 | 18 | import urllib3 # type: ignore |
20 | 19 | |
21 | 20 | from .exceptions import * |
22 | from .instaloadercontext import InstaloaderContext | |
21 | from .instaloadercontext import InstaloaderContext, RateController | |
22 | from .nodeiterator import NodeIterator, resumable_iteration | |
23 | 23 | from .structures import (Hashtag, Highlight, JsonExportable, Post, PostLocation, Profile, Story, StoryItem, |
24 | save_structure_to_file, load_structure_from_file) | |
24 | load_structure_from_file, save_structure_to_file) | |
25 | 25 | |
26 | 26 | |
27 | 27 | def get_default_session_filename(username: str) -> str: |
152 | 152 | txt file. |
153 | 153 | :param storyitem_metadata_txt_pattern: :option:`--storyitem-metadata-txt`, default is empty (=none) |
154 | 154 | :param max_connection_attempts: :option:`--max-connection-attempts` |
155 | :param commit_mode: :option:`--commit-mode` | |
156 | 155 | :param request_timeout: :option:`--request-timeout`, set per-request timeout (seconds) |
156 | :param rate_controller: Generator for a :class:`RateController` to override rate controlling behavior | |
157 | :param resume_prefix: :option:`--resume-prefix`, or None for :option:`--no-resume`. | |
158 | :param check_resume_bbd: Whether to check the date of expiry of resume files and reject them if expired. | |
157 | 159 | |
158 | 160 | .. attribute:: context |
159 | 161 | |
177 | 179 | storyitem_metadata_txt_pattern: str = None, |
178 | 180 | max_connection_attempts: int = 3, |
179 | 181 | request_timeout: Optional[float] = None, |
180 | commit_mode: bool = False): | |
181 | ||
182 | self.context = InstaloaderContext(sleep, quiet, user_agent, max_connection_attempts, request_timeout) | |
182 | rate_controller: Optional[Callable[[InstaloaderContext], RateController]] = None, | |
183 | resume_prefix: Optional[str] = "iterator", | |
184 | check_resume_bbd: bool = True): | |
185 | ||
186 | self.context = InstaloaderContext(sleep, quiet, user_agent, max_connection_attempts, | |
187 | request_timeout, rate_controller) | |
183 | 188 | |
184 | 189 | # configuration parameters |
185 | 190 | self.dirname_pattern = dirname_pattern or "{target}" |
195 | 200 | else post_metadata_txt_pattern |
196 | 201 | self.storyitem_metadata_txt_pattern = '' if storyitem_metadata_txt_pattern is None \ |
197 | 202 | else storyitem_metadata_txt_pattern |
198 | self.commit_mode = commit_mode | |
199 | if self.commit_mode and not self.save_metadata: | |
200 | raise InvalidArgumentException("Commit mode requires JSON metadata to be saved.") | |
201 | ||
202 | # Used to keep state in commit mode | |
203 | self._committed = None # type: Optional[bool] | |
203 | self.resume_prefix = resume_prefix | |
204 | self.check_resume_bbd = check_resume_bbd | |
204 | 205 | |
205 | 206 | @contextmanager |
206 | 207 | def anonymous_copy(self): |
222 | 223 | storyitem_metadata_txt_pattern=self.storyitem_metadata_txt_pattern, |
223 | 224 | max_connection_attempts=self.context.max_connection_attempts, |
224 | 225 | request_timeout=self.context.request_timeout, |
225 | commit_mode=self.commit_mode) | |
226 | resume_prefix=self.resume_prefix, | |
227 | check_resume_bbd=self.check_resume_bbd) | |
226 | 228 | yield new_loader |
227 | 229 | self.context.error_log.extend(new_loader.context.error_log) |
228 | 230 | new_loader.context.error_log = [] # avoid double-printing of errors |
248 | 250 | if filename_suffix is not None: |
249 | 251 | filename += '_' + filename_suffix |
250 | 252 | filename += '.' + file_extension |
251 | # A post is considered "commited" if the json file exists and is not malformed. | |
252 | if self.commit_mode: | |
253 | if self._committed and os.path.isfile(filename): | |
254 | self.context.log(filename + ' exists', end=' ', flush=True) | |
255 | return False | |
256 | else: | |
257 | if os.path.isfile(filename): | |
258 | self.context.log(filename + ' exists', end=' ', flush=True) | |
259 | return False | |
253 | if os.path.isfile(filename): | |
254 | self.context.log(filename + ' exists', end=' ', flush=True) | |
255 | return False | |
260 | 256 | self.context.get_and_write_raw(url, filename) |
261 | 257 | os.utime(filename, (datetime.now().timestamp(), mtime.timestamp())) |
262 | 258 | return True |
354 | 350 | except UnicodeEncodeError: |
355 | 351 | self.context.log('txt', end=' ', flush=True) |
356 | 352 | with open(filename, 'wb') as text_file: |
357 | shutil.copyfileobj(BytesIO(bcaption), text_file) | |
353 | with BytesIO(bcaption) as bio: | |
354 | shutil.copyfileobj(cast(IO, bio), text_file) | |
358 | 355 | os.utime(filename, (datetime.now().timestamp(), mtime.timestamp())) |
359 | 356 | |
360 | 357 | def save_location(self, filename: str, location: PostLocation, mtime: datetime) -> None: |
364 | 361 | "https://maps.google.com/maps?q={0},{1}&ll={0},{1}\n".format(location.lat, |
365 | 362 | location.lng)) |
366 | 363 | with open(filename, 'wb') as text_file: |
367 | shutil.copyfileobj(BytesIO(location_string.encode()), text_file) | |
364 | with BytesIO(location_string.encode()) as bio: | |
365 | shutil.copyfileobj(cast(IO, bio), text_file) | |
368 | 366 | os.utime(filename, (datetime.now().timestamp(), mtime.timestamp())) |
369 | 367 | self.context.log('geo', end=' ', flush=True) |
368 | ||
369 | def format_filename_within_target_path(self, | |
370 | target: Union[str, Path], | |
371 | owner_profile: Optional[Profile], | |
372 | identifier: str, | |
373 | name_suffix: str, | |
374 | extension: str): | |
375 | """Returns a filename within the target path. | |
376 | ||
377 | .. versionadded:: 4.5""" | |
378 | if ((format_string_contains_key(self.dirname_pattern, 'profile') or | |
379 | format_string_contains_key(self.dirname_pattern, 'target'))): | |
380 | profile_str = owner_profile.username.lower() if owner_profile is not None else target | |
381 | return os.path.join(self.dirname_pattern.format(profile=profile_str, target=target), | |
382 | '{0}_{1}.{2}'.format(identifier, name_suffix, extension)) | |
383 | else: | |
384 | return os.path.join(self.dirname_pattern.format(), | |
385 | '{0}_{1}_{2}.{3}'.format(target, identifier, name_suffix, extension)) | |
370 | 386 | |
371 | 387 | @_retry_on_connection_error |
372 | 388 | def download_title_pic(self, url: str, target: Union[str, Path], name_suffix: str, owner_profile: Optional[Profile], |
388 | 404 | else: |
389 | 405 | pic_bytes = http_response.content |
390 | 406 | pic_identifier = md5(pic_bytes).hexdigest()[:16] |
391 | pic_extension = 'jpg' | |
392 | if ((format_string_contains_key(self.dirname_pattern, 'profile') or | |
393 | format_string_contains_key(self.dirname_pattern, 'target'))): | |
394 | profile_str = owner_profile.username.lower() if owner_profile is not None else target | |
395 | filename = os.path.join(self.dirname_pattern.format(profile=profile_str, | |
396 | target=target), | |
397 | '{0}_{1}.{2}'.format(pic_identifier, name_suffix, pic_extension)) | |
398 | else: | |
399 | filename = os.path.join(self.dirname_pattern.format(), | |
400 | '{0}_{1}_{2}.{3}'.format(target, pic_identifier, name_suffix, pic_extension)) | |
407 | filename = self.format_filename_within_target_path(target, owner_profile, pic_identifier, name_suffix, 'jpg') | |
401 | 408 | content_length = http_response.headers.get('Content-Length', None) |
402 | 409 | if os.path.isfile(filename) and (not self.context.is_logged_in or |
403 | 410 | (content_length is not None and |
505 | 512 | |
506 | 513 | # Download the image(s) / video thumbnail and videos within sidecars if desired |
507 | 514 | downloaded = True |
508 | self._committed = self.check_if_committed(filename) | |
509 | if self.download_pictures: | |
510 | if post.typename == 'GraphSidecar': | |
511 | edge_number = 1 | |
512 | for sidecar_node in post.get_sidecar_nodes(): | |
513 | # Download picture or video thumbnail | |
514 | if not sidecar_node.is_video or self.download_video_thumbnails is True: | |
515 | if post.typename == 'GraphSidecar': | |
516 | if self.download_pictures or self.download_videos: | |
517 | for edge_number, sidecar_node in enumerate(post.get_sidecar_nodes(), start=1): | |
518 | if self.download_pictures and (not sidecar_node.is_video or self.download_video_thumbnails): | |
519 | # Download sidecar picture or video thumbnail (--no-pictures implies --no-video-thumbnails) | |
515 | 520 | downloaded &= self.download_pic(filename=filename, url=sidecar_node.display_url, |
516 | 521 | mtime=post.date_local, filename_suffix=str(edge_number)) |
517 | # Additionally download video if available and desired | |
518 | if sidecar_node.is_video and self.download_videos is True: | |
522 | if sidecar_node.is_video and self.download_videos: | |
523 | # Download sidecar video if desired | |
519 | 524 | downloaded &= self.download_pic(filename=filename, url=sidecar_node.video_url, |
520 | 525 | mtime=post.date_local, filename_suffix=str(edge_number)) |
521 | edge_number += 1 | |
522 | elif post.typename == 'GraphImage': | |
526 | elif post.typename == 'GraphImage': | |
527 | # Download picture | |
528 | if self.download_pictures: | |
523 | 529 | downloaded = self.download_pic(filename=filename, url=post.url, mtime=post.date_local) |
524 | elif post.typename == 'GraphVideo': | |
525 | if self.download_video_thumbnails is True: | |
530 | elif post.typename == 'GraphVideo': | |
531 | # Download video thumbnail (--no-pictures implies --no-video-thumbnails) | |
532 | if self.download_pictures and self.download_video_thumbnails: | |
533 | with self.context.error_catcher("Video thumbnail of {}".format(post)): | |
526 | 534 | downloaded = self.download_pic(filename=filename, url=post.url, mtime=post.date_local) |
527 | else: | |
528 | self.context.error("Warning: {0} has unknown typename: {1}".format(post, post.typename)) | |
535 | else: | |
536 | self.context.error("Warning: {0} has unknown typename: {1}".format(post, post.typename)) | |
529 | 537 | |
530 | 538 | # Save caption if desired |
531 | 539 | metadata_string = _ArbitraryItemFormatter(post).format(self.post_metadata_txt_pattern).strip() |
533 | 541 | self.save_caption(filename=filename, mtime=post.date_local, caption=metadata_string) |
534 | 542 | |
535 | 543 | # Download video if desired |
536 | if post.is_video and self.download_videos is True: | |
544 | if post.is_video and self.download_videos: | |
537 | 545 | downloaded &= self.download_pic(filename=filename, url=post.video_url, mtime=post.date_local) |
538 | 546 | |
539 | 547 | # Download geotags if desired |
541 | 549 | self.save_location(filename, post.location, post.date_local) |
542 | 550 | |
543 | 551 | # Update comments if desired |
544 | if self.download_comments is True: | |
552 | if self.download_comments: | |
545 | 553 | self.update_comments(filename=filename, post=post) |
546 | 554 | |
547 | 555 | # Save metadata as JSON if desired. |
548 | if self.save_metadata is not False: | |
556 | if self.save_metadata: | |
549 | 557 | self.save_metadata_json(filename, post) |
550 | 558 | |
551 | 559 | self.context.log() |
570 | 578 | |
571 | 579 | def _userid_chunks(): |
572 | 580 | assert userids is not None |
573 | userids_per_query = 100 | |
581 | userids_per_query = 50 | |
574 | 582 | for i in range(0, len(userids), userids_per_query): |
575 | 583 | yield userids[i:i + userids_per_query] |
576 | 584 | |
577 | 585 | for userid_chunk in _userid_chunks(): |
578 | stories = self.context.graphql_query("bf41e22b1c4ba4c9f31b844ebb7d9056", | |
586 | stories = self.context.graphql_query("303a4ae99711322310f25250d988f3b7", | |
579 | 587 | {"reel_ids": userid_chunk, "precomposed_overlay": False})["data"] |
580 | 588 | yield from (Story(self.context, media) for media in stories['reels_media']) |
581 | 589 | |
718 | 726 | fast_update: bool = False, |
719 | 727 | post_filter: Optional[Callable[[Post], bool]] = None, |
720 | 728 | max_count: Optional[int] = None, |
721 | total_count: Optional[int] = None) -> None: | |
729 | total_count: Optional[int] = None, | |
730 | owner_profile: Optional[Profile] = None) -> None: | |
722 | 731 | """ |
723 | 732 | Download the Posts returned by given Post Iterator. |
724 | 733 | |
725 | ..versionadded:: 4.4 | |
734 | .. versionadded:: 4.4 | |
735 | ||
736 | .. versionchanged:: 4.5 | |
737 | Transparently resume an aborted operation if `posts` is a :class:`NodeIterator`. | |
726 | 738 | |
727 | 739 | :param posts: Post Iterator to loop through. |
728 | :param target: Target name | |
729 | :param fast_update: :option:`--fast-update` | |
730 | :param post_filter: :option:`--post-filter` | |
731 | :param max_count: Maximum count of Posts to download (:option:`--count`) | |
732 | :param total_count: Total number of posts returned by given iterator | |
733 | """ | |
734 | for number, post in enumerate(posts): | |
735 | if max_count is not None and number >= max_count: | |
736 | break | |
737 | if total_count is not None: | |
738 | self.context.log("[{0:{w}d}/{1:{w}d}] ".format(number + 1, total_count, | |
739 | w=len(str(total_count))), | |
740 | end="", flush=True) | |
741 | else: | |
742 | if max_count is not None: | |
743 | self.context.log("[{0:{w}d}/{1:{w}d}] ".format(number + 1, max_count, | |
744 | w=len(str(max_count))), | |
740 | :param target: Target name. | |
741 | :param fast_update: :option:`--fast-update`. | |
742 | :param post_filter: :option:`--post-filter`. | |
743 | :param max_count: Maximum count of Posts to download (:option:`--count`). | |
744 | :param total_count: Total number of posts returned by given iterator. | |
745 | :param owner_profile: Associated profile, if any. | |
746 | """ | |
747 | displayed_count = (max_count if total_count is None or max_count is not None and max_count < total_count | |
748 | else total_count) | |
749 | sanitized_target = target | |
750 | if isinstance(target, str): | |
751 | sanitized_target = _PostPathFormatter.sanitize_path(target) | |
752 | with resumable_iteration( | |
753 | context=self.context, | |
754 | iterator=posts, | |
755 | load=load_structure_from_file, | |
756 | save=save_structure_to_file, | |
757 | format_path=lambda magic: self.format_filename_within_target_path( | |
758 | sanitized_target, owner_profile, self.resume_prefix or '', magic, 'json.xz' | |
759 | ), | |
760 | check_bbd=self.check_resume_bbd, | |
761 | enabled=self.resume_prefix is not None | |
762 | ) as (is_resuming, start_index): | |
763 | for number, post in enumerate(posts, start=start_index + 1): | |
764 | if max_count is not None and number > max_count: | |
765 | break | |
766 | if displayed_count is not None: | |
767 | self.context.log("[{0:{w}d}/{1:{w}d}] ".format(number, displayed_count, | |
768 | w=len(str(displayed_count))), | |
745 | 769 | end="", flush=True) |
746 | 770 | else: |
747 | self.context.log("[{:3d}] ".format(number + 1), end="", flush=True) | |
748 | if post_filter is not None: | |
749 | try: | |
750 | if not post_filter(post): | |
751 | self.context.log("{} skipped".format(post)) | |
771 | self.context.log("[{:3d}] ".format(number), end="", flush=True) | |
772 | if post_filter is not None: | |
773 | try: | |
774 | if not post_filter(post): | |
775 | self.context.log("{} skipped".format(post)) | |
776 | continue | |
777 | except (InstaloaderException, KeyError, TypeError) as err: | |
778 | self.context.error("{} skipped. Filter evaluation failed: {}".format(post, err)) | |
752 | 779 | continue |
753 | except (InstaloaderException, KeyError, TypeError) as err: | |
754 | self.context.error("{} skipped. Filter evaluation failed: {}".format(post, err)) | |
755 | continue | |
756 | with self.context.error_catcher("Download {} of {}".format(post, target)): | |
757 | # The PostChangedException gets raised if the Post's id/shortcode changed while obtaining | |
758 | # additional metadata. This is most likely the case if a HTTP redirect takes place while | |
759 | # resolving the shortcode URL. | |
760 | # The `post_changed` variable keeps the fast-update functionality alive: A Post which is | |
761 | # obained after a redirect has probably already been downloaded as a previous Post of the | |
762 | # same Profile. | |
763 | # Observed in issue #225: https://github.com/instaloader/instaloader/issues/225 | |
764 | post_changed = False | |
765 | while True: | |
766 | try: | |
767 | downloaded = self.download_post(post, target=target) | |
768 | break | |
769 | except PostChangedException: | |
770 | post_changed = True | |
771 | continue | |
772 | if fast_update and not downloaded and not post_changed: | |
773 | break | |
780 | with self.context.error_catcher("Download {} of {}".format(post, target)): | |
781 | # The PostChangedException gets raised if the Post's id/shortcode changed while obtaining | |
782 | # additional metadata. This is most likely the case if a HTTP redirect takes place while | |
783 | # resolving the shortcode URL. | |
784 | # The `post_changed` variable keeps the fast-update functionality alive: A Post which is | |
785 | # obained after a redirect has probably already been downloaded as a previous Post of the | |
786 | # same Profile. | |
787 | # Observed in issue #225: https://github.com/instaloader/instaloader/issues/225 | |
788 | post_changed = False | |
789 | while True: | |
790 | try: | |
791 | downloaded = self.download_post(post, target=target) | |
792 | break | |
793 | except PostChangedException: | |
794 | post_changed = True | |
795 | continue | |
796 | if fast_update and not downloaded and not post_changed: | |
797 | # disengage fast_update for first post when resuming | |
798 | if not is_resuming or number > 0: | |
799 | break | |
774 | 800 | |
775 | 801 | @_requires_login |
776 | 802 | def get_feed_posts(self) -> Iterator[Post]: |
830 | 856 | """ |
831 | 857 | self.context.log("Retrieving saved posts...") |
832 | 858 | assert self.context.username is not None # safe due to @_requires_login; required by typechecker |
833 | self.posts_download_loop(Profile.from_username(self.context, self.context.username).get_saved_posts(), ":saved", | |
834 | fast_update, post_filter, max_count=max_count) | |
859 | node_iterator = Profile.own_profile(self.context).get_saved_posts() | |
860 | self.posts_download_loop(node_iterator, ":saved", | |
861 | fast_update, post_filter, | |
862 | max_count=max_count, total_count=node_iterator.count) | |
835 | 863 | |
836 | 864 | @_requires_login |
837 | 865 | def get_location_posts(self, location: str) -> Iterator[Post]: |
886 | 914 | max_count=max_count) |
887 | 915 | |
888 | 916 | @_requires_login |
889 | def get_explore_posts(self) -> Iterator[Post]: | |
917 | def get_explore_posts(self) -> NodeIterator[Post]: | |
890 | 918 | """Get Posts which are worthy of exploring suggested by Instagram. |
891 | 919 | |
892 | 920 | :return: Iterator over Posts of the user's suggested posts. |
921 | :rtype: NodeIterator[Post] | |
893 | 922 | :raises LoginRequiredException: If called without being logged in. |
894 | 923 | """ |
895 | data = self.context.get_json('explore/', {}) | |
896 | yield from (Post(self.context, node) | |
897 | for node in self.context.graphql_node_list("df0dcc250c2b18d9fd27c5581ef33c7c", | |
898 | {}, 'https://www.instagram.com/explore/', | |
899 | lambda d: d['data']['user']['edge_web_discover_media'], | |
900 | data.get('rhx_gis'))) | |
924 | return NodeIterator( | |
925 | self.context, | |
926 | 'df0dcc250c2b18d9fd27c5581ef33c7c', | |
927 | lambda d: d['data']['user']['edge_web_discover_media'], | |
928 | lambda n: Post(self.context, n), | |
929 | query_referer='https://www.instagram.com/explore/', | |
930 | ) | |
901 | 931 | |
902 | 932 | def get_hashtag_posts(self, hashtag: str) -> Iterator[Post]: |
903 | 933 | """Get Posts associated with a #hashtag. |
968 | 998 | .. versionadded:: 4.3""" |
969 | 999 | self.context.log("Retrieving IGTV videos for profile {}.".format(profile.username)) |
970 | 1000 | self.posts_download_loop(profile.get_igtv_posts(), profile.username, fast_update, post_filter, |
971 | total_count=profile.igtvcount) | |
1001 | total_count=profile.igtvcount, owner_profile=profile) | |
972 | 1002 | |
973 | 1003 | def _get_id_filename(self, profile_name: str) -> str: |
974 | 1004 | if ((format_string_contains_key(self.dirname_pattern, 'profile') or |
1078 | 1108 | def _error_raiser(_str): |
1079 | 1109 | yield |
1080 | 1110 | |
1081 | # error_handler type is Callable[[Optional[str]], ContextManager[None]] (not supported with Python 3.5) | |
1111 | # error_handler type is Callable[[Optional[str]], ContextManager[None]] (not supported with Python 3.5.0..3.5.3) | |
1082 | 1112 | error_handler = _error_raiser if raise_errors else self.context.error_catcher |
1083 | 1113 | |
1084 | 1114 | for profile in profiles: |
1085 | with error_handler(profile.username): # type: ignore | |
1115 | with error_handler(profile.username): # type: ignore # (ignore type for Python 3.5 support) | |
1086 | 1116 | profile_name = profile.username |
1087 | 1117 | |
1088 | 1118 | # Download profile picture |
1123 | 1153 | if posts: |
1124 | 1154 | self.context.log("Retrieving posts from profile {}.".format(profile_name)) |
1125 | 1155 | self.posts_download_loop(profile.get_posts(), profile_name, fast_update, post_filter, |
1126 | total_count=profile.mediacount) | |
1156 | total_count=profile.mediacount, owner_profile=profile) | |
1127 | 1157 | |
1128 | 1158 | if stories and profiles: |
1129 | 1159 | with self.context.error_catcher("Download stories"): |
1203 | 1233 | # Iterate over pictures and download them |
1204 | 1234 | self.context.log("Retrieving posts from profile {}.".format(profile_name)) |
1205 | 1235 | self.posts_download_loop(profile.get_posts(), profile_name, fast_update, post_filter, |
1206 | total_count=profile.mediacount) | |
1207 | ||
1208 | def check_if_committed(self, filename: str) -> bool: | |
1209 | """Checks to see if the current post has been committed. | |
1210 | ||
1211 | A post is considered committed if its json metadata file exists and is not malformed. | |
1212 | ||
1213 | .. versionadded:: 4.2 | |
1214 | """ | |
1215 | if os.path.isfile(filename + '.json.xz'): | |
1216 | filename += '.json.xz' | |
1217 | elif os.path.isfile(filename + '.json'): | |
1218 | filename += '.json' | |
1219 | else: | |
1220 | return False | |
1221 | try: | |
1222 | load_structure_from_file(self.context, filename) | |
1223 | return True | |
1224 | except (FileNotFoundError, lzma.LZMAError, json.decoder.JSONDecodeError): | |
1225 | return False | |
1236 | total_count=profile.mediacount, owner_profile=profile) | |
1226 | 1237 | |
1227 | 1238 | def interactive_login(self, username: str) -> None: |
1228 | 1239 | """Logs in and internally stores session, asking user for password interactively. |
0 | 0 | import hashlib |
1 | 1 | import json |
2 | import os | |
2 | 3 | import pickle |
3 | 4 | import random |
4 | 5 | import re |
22 | 23 | """Duplicates a requests.Session.""" |
23 | 24 | new = requests.Session() |
24 | 25 | new.cookies = requests.utils.cookiejar_from_dict(requests.utils.dict_from_cookiejar(session.cookies)) |
25 | new.headers = session.headers.copy() # type: ignore | |
26 | new.headers = session.headers.copy() | |
26 | 27 | if request_timeout is not None: |
27 | 28 | # Override default timeout behavior. |
28 | 29 | # Need to silence mypy bug for this. See: https://github.com/python/mypy/issues/2427 |
51 | 52 | """ |
52 | 53 | |
53 | 54 | def __init__(self, sleep: bool = True, quiet: bool = False, user_agent: Optional[str] = None, |
54 | max_connection_attempts: int = 3, request_timeout: Optional[float] = None): | |
55 | max_connection_attempts: int = 3, request_timeout: Optional[float] = None, | |
56 | rate_controller: Optional[Callable[["InstaloaderContext"], "RateController"]] = None): | |
55 | 57 | |
56 | 58 | self.user_agent = user_agent if user_agent is not None else default_user_agent() |
57 | 59 | self.request_timeout = request_timeout |
67 | 69 | # error log, filled with error() and printed at the end of Instaloader.main() |
68 | 70 | self.error_log = [] # type: List[str] |
69 | 71 | |
70 | # For the adaption of sleep intervals (rate control) | |
71 | self._graphql_query_timestamps = dict() # type: Dict[str, List[float]] | |
72 | self._graphql_earliest_next_request_time = 0.0 | |
72 | self._rate_controller = rate_controller(self) if rate_controller is not None else RateController(self) | |
73 | 73 | |
74 | 74 | # Can be set to True for testing, disables supression of InstaloaderContext._error_catcher |
75 | 75 | self.raise_all_errors = False |
293 | 293 | if self.sleep: |
294 | 294 | time.sleep(min(random.expovariate(0.7), 5.0)) |
295 | 295 | |
296 | def _dump_query_timestamps(self, current_time: float): | |
297 | """Output the number of GraphQL queries grouped by their query_hash within the last time.""" | |
298 | windows = [10, 11, 15, 20, 30, 60] | |
299 | print("GraphQL requests:", file=sys.stderr) | |
300 | for query_hash, times in self._graphql_query_timestamps.items(): | |
301 | print(" {}".format(query_hash), file=sys.stderr) | |
302 | for window in windows: | |
303 | reqs_in_sliding_window = sum(t > current_time - window * 60 for t in times) | |
304 | print(" last {} minutes: {} requests".format(window, reqs_in_sliding_window), file=sys.stderr) | |
305 | ||
306 | def _graphql_request_count_per_sliding_window(self, query_hash: str) -> int: | |
307 | """Return how many GraphQL requests can be done within the sliding window.""" | |
308 | if self.is_logged_in: | |
309 | max_reqs = {'1cb6ec562846122743b61e492c85999f': 20, | |
310 | '33ba35852cb50da46f5b5e889df7d159': 20, | |
311 | 'iphone': 100, | |
312 | 'other': 100} | |
313 | else: | |
314 | max_reqs = {'1cb6ec562846122743b61e492c85999f': 200, | |
315 | '33ba35852cb50da46f5b5e889df7d159': 200, | |
316 | 'other': 200} | |
317 | return max_reqs.get(query_hash) or min(max_reqs.values()) | |
318 | ||
319 | def _graphql_query_waittime(self, query_hash: str, current_time: float, untracked_queries: bool = False) -> float: | |
320 | """Calculate time needed to wait before GraphQL query can be executed.""" | |
321 | sliding_window = 660 | |
322 | if query_hash not in self._graphql_query_timestamps: | |
323 | self._graphql_query_timestamps[query_hash] = [] | |
324 | self._graphql_query_timestamps[query_hash] = list(filter(lambda t: t > current_time - 60 * 60, | |
325 | self._graphql_query_timestamps[query_hash])) | |
326 | reqs_in_sliding_window = list(filter(lambda t: t > current_time - sliding_window, | |
327 | self._graphql_query_timestamps[query_hash])) | |
328 | count_per_sliding_window = self._graphql_request_count_per_sliding_window(query_hash) | |
329 | if len(reqs_in_sliding_window) < count_per_sliding_window and not untracked_queries: | |
330 | return max(0, self._graphql_earliest_next_request_time - current_time) | |
331 | next_request_time = min(reqs_in_sliding_window) + sliding_window + 6 | |
332 | if untracked_queries: | |
333 | self._graphql_earliest_next_request_time = next_request_time | |
334 | return round(max(next_request_time, self._graphql_earliest_next_request_time) - current_time) | |
335 | ||
336 | def _ratecontrol_graphql_query(self, query_hash: str, untracked_queries: bool = False): | |
337 | """Called before a GraphQL query is made in order to stay within Instagram's rate limits. | |
338 | ||
339 | :param query_hash: The query_hash parameter of the query. | |
340 | :param untracked_queries: True, if 429 has been returned to apply 429 logic. | |
341 | """ | |
342 | if not untracked_queries: | |
343 | waittime = self._graphql_query_waittime(query_hash, time.monotonic(), untracked_queries) | |
344 | assert waittime >= 0 | |
345 | if waittime > 10: | |
346 | self.log('\nToo many queries in the last time. Need to wait {} seconds, until {:%H:%M}.' | |
347 | .format(waittime, datetime.now() + timedelta(seconds=waittime))) | |
348 | time.sleep(waittime) | |
349 | if query_hash not in self._graphql_query_timestamps: | |
350 | self._graphql_query_timestamps[query_hash] = [time.monotonic()] | |
351 | else: | |
352 | self._graphql_query_timestamps[query_hash].append(time.monotonic()) | |
353 | else: | |
354 | text_for_429 = ("HTTP error code 429 was returned because too many queries occurred in the last time. " | |
355 | "Please do not use Instagram in your browser or run multiple instances of Instaloader " | |
356 | "in parallel.") | |
357 | print(textwrap.fill(text_for_429), file=sys.stderr) | |
358 | current_time = time.monotonic() | |
359 | waittime = self._graphql_query_waittime(query_hash, current_time, untracked_queries) | |
360 | assert waittime >= 0 | |
361 | if waittime > 10: | |
362 | self.log('The request will be retried in {} seconds, at {:%H:%M}.' | |
363 | .format(waittime, datetime.now() + timedelta(seconds=waittime))) | |
364 | self._dump_query_timestamps(current_time) | |
365 | time.sleep(waittime) | |
366 | ||
367 | 296 | def get_json(self, path: str, params: Dict[str, Any], host: str = 'www.instagram.com', |
368 | 297 | session: Optional[requests.Session] = None, _attempt=1) -> Dict[str, Any]: |
369 | 298 | """JSON request to Instagram. |
384 | 313 | try: |
385 | 314 | self.do_sleep() |
386 | 315 | if is_graphql_query: |
387 | self._ratecontrol_graphql_query(params['query_hash']) | |
316 | self._rate_controller.wait_before_query(params['query_hash']) | |
388 | 317 | if is_iphone_query: |
389 | self._ratecontrol_graphql_query('iphone') | |
318 | self._rate_controller.wait_before_query('iphone') | |
390 | 319 | if is_other_query: |
391 | self._ratecontrol_graphql_query('other') | |
320 | self._rate_controller.wait_before_query('other') | |
392 | 321 | resp = sess.get('https://{0}/{1}'.format(host, path), params=params, allow_redirects=False) |
393 | 322 | while resp.is_redirect: |
394 | 323 | redirect_url = resp.headers['location'] |
395 | 324 | self.log('\nHTTP redirect from https://{0}/{1} to {2}'.format(host, path, redirect_url)) |
396 | 325 | if redirect_url.startswith('https://www.instagram.com/accounts/login'): |
326 | if not self.is_logged_in: | |
327 | raise LoginRequiredException("Redirected to login page. Use --login.") | |
397 | 328 | # alternate rate limit exceeded behavior |
398 | raise TooManyRequestsException("429 Too Many Requests: redirected to login") | |
329 | raise TooManyRequestsException("Redirected to login") | |
399 | 330 | if redirect_url.startswith('https://{}/'.format(host)): |
400 | 331 | resp = sess.get(redirect_url if redirect_url.endswith('/') else redirect_url + '/', |
401 | 332 | params=params, allow_redirects=False) |
421 | 352 | raise ConnectionException("\"window._sharedData\" does not contain required keys.") |
422 | 353 | # If GraphQL data is missing in `window._sharedData`, search for it in `__additionalDataLoaded`. |
423 | 354 | if 'graphql' not in post_or_profile_page[0]: |
424 | match = re.search(r'window\.__additionalDataLoaded\([^{]+{"graphql":({.*})}\);</script>', | |
355 | match = re.search(r'window\.__additionalDataLoaded\(.*?({.*"graphql":.*})\);</script>', | |
425 | 356 | resp.text) |
426 | 357 | if match is not None: |
427 | post_or_profile_page[0]['graphql'] = json.loads(match.group(1)) | |
358 | post_or_profile_page[0]['graphql'] = json.loads(match.group(1))['graphql'] | |
428 | 359 | return resp_json |
429 | 360 | else: |
430 | 361 | resp_json = resp.json() |
444 | 375 | raise ConnectionException(error_string) from err |
445 | 376 | self.error(error_string + " [retrying; skip with ^C]", repeat_at_end=False) |
446 | 377 | try: |
447 | if is_graphql_query and isinstance(err, TooManyRequestsException): | |
448 | self._ratecontrol_graphql_query(params['query_hash'], untracked_queries=True) | |
449 | if is_iphone_query and isinstance(err, TooManyRequestsException): | |
450 | self._ratecontrol_graphql_query('iphone', untracked_queries=True) | |
451 | if is_other_query and isinstance(err, TooManyRequestsException): | |
452 | self._ratecontrol_graphql_query('other', untracked_queries=True) | |
378 | if isinstance(err, TooManyRequestsException): | |
379 | if is_graphql_query: | |
380 | self._rate_controller.handle_429(params['query_hash']) | |
381 | if is_iphone_query: | |
382 | self._rate_controller.handle_429('iphone') | |
383 | if is_other_query: | |
384 | self._rate_controller.handle_429('other') | |
453 | 385 | return self.get_json(path=path, params=params, host=host, session=sess, _attempt=_attempt + 1) |
454 | 386 | except KeyboardInterrupt: |
455 | 387 | self.error("[skipped by user]", repeat_at_end=False) |
497 | 429 | edge_extractor: Callable[[Dict[str, Any]], Dict[str, Any]], |
498 | 430 | rhx_gis: Optional[str] = None, |
499 | 431 | first_data: Optional[Dict[str, Any]] = None) -> Iterator[Dict[str, Any]]: |
500 | """Retrieve a list of GraphQL nodes.""" | |
432 | """ | |
433 | Retrieve a list of GraphQL nodes. | |
434 | ||
435 | .. deprecated:: 4.5 | |
436 | Use :class:`NodeIterator` instead, which provides more functionality. | |
437 | """ | |
501 | 438 | |
502 | 439 | def _query(): |
503 | 440 | query_variables['first'] = self._graphql_page_length |
546 | 483 | |
547 | 484 | .. versionadded:: 4.2.1""" |
548 | 485 | self.log(filename, end=' ', flush=True) |
549 | with open(filename, 'wb') as file: | |
486 | with open(filename + '.temp', 'wb') as file: | |
550 | 487 | if isinstance(resp, requests.Response): |
551 | 488 | shutil.copyfileobj(resp.raw, file) |
552 | 489 | else: |
553 | 490 | file.write(resp) |
491 | os.replace(filename + '.temp', filename) | |
554 | 492 | |
555 | 493 | def get_raw(self, url: str, _attempt=1) -> requests.Response: |
556 | 494 | """Downloads a file anonymously. |
592 | 530 | if self._root_rhx_gis is None: |
593 | 531 | self._root_rhx_gis = self.get_json('', {}).get('rhx_gis', '') |
594 | 532 | return self._root_rhx_gis or None |
533 | ||
534 | ||
535 | class RateController: | |
536 | """ | |
537 | Class providing request tracking and rate controlling to stay within rate limits. | |
538 | ||
539 | It can be overridden to change Instaloader's behavior regarding rate limits, for example to raise a custom | |
540 | exception when the rate limit is hit:: | |
541 | ||
542 | import instaloader | |
543 | ||
544 | class MyRateController(instaloader.RateController): | |
545 | def sleep(self, secs): | |
546 | raise MyCustomException() | |
547 | ||
548 | L = instaloader.Instaloader(rate_controller=lambda ctx: MyRateController(ctx)) | |
549 | """ | |
550 | ||
551 | def __init__(self, context: InstaloaderContext): | |
552 | self._context = context | |
553 | self._query_timestamps = dict() # type: Dict[str, List[float]] | |
554 | self._earliest_next_request_time = 0.0 | |
555 | ||
556 | def sleep(self, secs: float): | |
557 | """Wait given number of seconds.""" | |
558 | # Not static, to allow for the behavior of this method to depend on context-inherent properties, such as | |
559 | # whether we are logged in. | |
560 | # pylint:disable=no-self-use | |
561 | time.sleep(secs) | |
562 | ||
563 | def _dump_query_timestamps(self, current_time: float, failed_query_type: str): | |
564 | windows = [10, 11, 20, 22, 30, 60] | |
565 | self._context.error("Requests within last {} minutes grouped by type:" | |
566 | .format('/'.join(str(w) for w in windows)), | |
567 | repeat_at_end=False) | |
568 | for query_type, times in self._query_timestamps.items(): | |
569 | reqs_in_sliding_window = [sum(t > current_time - w * 60 for t in times) for w in windows] | |
570 | self._context.error(" {} {:>32}: {}".format( | |
571 | "*" if query_type == failed_query_type else " ", | |
572 | query_type, | |
573 | " ".join("{:4}".format(reqs) for reqs in reqs_in_sliding_window) | |
574 | ), repeat_at_end=False) | |
575 | ||
576 | def count_per_sliding_window(self, query_type: str) -> int: | |
577 | """Return how many requests can be done within the sliding window.""" | |
578 | # Not static, to allow for the count_per_sliding_window to depend on context-inherent properties, such as | |
579 | # whether we are logged in. | |
580 | # pylint:disable=no-self-use | |
581 | return 75 if query_type in ['iphone', 'other'] else 200 | |
582 | ||
583 | def _reqs_in_sliding_window(self, query_type: Optional[str], current_time: float, window: float) -> List[float]: | |
584 | if query_type is not None: | |
585 | # timestamps of type query_type | |
586 | relevant_timestamps = self._query_timestamps[query_type] | |
587 | else: | |
588 | # all GraphQL queries, i.e. not 'iphone' or 'other' | |
589 | graphql_query_timestamps = filter(lambda tp: tp[0] not in ['iphone', 'other'], | |
590 | self._query_timestamps.items()) | |
591 | relevant_timestamps = [t for times in (tp[1] for tp in graphql_query_timestamps) for t in times] | |
592 | return list(filter(lambda t: t > current_time - window, relevant_timestamps)) | |
593 | ||
594 | def query_waittime(self, query_type: str, current_time: float, untracked_queries: bool = False) -> float: | |
595 | """Calculate time needed to wait before query can be executed.""" | |
596 | per_type_sliding_window = 660 | |
597 | if query_type not in self._query_timestamps: | |
598 | self._query_timestamps[query_type] = [] | |
599 | self._query_timestamps[query_type] = list(filter(lambda t: t > current_time - 60 * 60, | |
600 | self._query_timestamps[query_type])) | |
601 | ||
602 | def per_type_next_request_time(): | |
603 | reqs_in_sliding_window = self._reqs_in_sliding_window(query_type, current_time, per_type_sliding_window) | |
604 | if len(reqs_in_sliding_window) < self.count_per_sliding_window(query_type): | |
605 | return 0.0 | |
606 | else: | |
607 | return min(reqs_in_sliding_window) + per_type_sliding_window + 6 | |
608 | ||
609 | def gql_accumulated_next_request_time(): | |
610 | if query_type in ['iphone', 'other']: | |
611 | return 0.0 | |
612 | gql_accumulated_sliding_window = 600 | |
613 | gql_accumulated_max_count = 275 | |
614 | reqs_in_sliding_window = self._reqs_in_sliding_window(None, current_time, gql_accumulated_sliding_window) | |
615 | if len(reqs_in_sliding_window) < gql_accumulated_max_count: | |
616 | return 0.0 | |
617 | else: | |
618 | return min(reqs_in_sliding_window) + gql_accumulated_sliding_window | |
619 | ||
620 | def untracked_next_request_time(): | |
621 | if untracked_queries: | |
622 | reqs_in_sliding_window = self._reqs_in_sliding_window(query_type, current_time, per_type_sliding_window) | |
623 | self._earliest_next_request_time = min(reqs_in_sliding_window) + per_type_sliding_window + 6 | |
624 | return self._earliest_next_request_time | |
625 | ||
626 | return max(0.0, | |
627 | max( | |
628 | per_type_next_request_time(), | |
629 | gql_accumulated_next_request_time(), | |
630 | untracked_next_request_time(), | |
631 | ) - current_time) | |
632 | ||
633 | def wait_before_query(self, query_type: str) -> None: | |
634 | """This method is called before a query to Instagram. It calls :meth:`RateController.sleep` to wait | |
635 | until the request can be made.""" | |
636 | waittime = self.query_waittime(query_type, time.monotonic(), False) | |
637 | assert waittime >= 0 | |
638 | if waittime > 15: | |
639 | self._context.log("\nToo many queries in the last time. Need to wait {} seconds, until {:%H:%M}." | |
640 | .format(round(waittime), datetime.now() + timedelta(seconds=waittime))) | |
641 | if waittime > 0: | |
642 | self.sleep(waittime) | |
643 | if query_type not in self._query_timestamps: | |
644 | self._query_timestamps[query_type] = [time.monotonic()] | |
645 | else: | |
646 | self._query_timestamps[query_type].append(time.monotonic()) | |
647 | ||
648 | def handle_429(self, query_type: str) -> None: | |
649 | """This method is called to handle a 429 Too Many Requests response. It calls :meth:`RateController.sleep` to | |
650 | wait until we can repeat the same request.""" | |
651 | current_time = time.monotonic() | |
652 | waittime = self.query_waittime(query_type, current_time, True) | |
653 | assert waittime >= 0 | |
654 | self._dump_query_timestamps(current_time, query_type) | |
655 | text_for_429 = ("Instagram responded with HTTP error \"429 - Too Many Requests\". Please do not run multiple " | |
656 | "instances of Instaloader in parallel or within short sequence. Also, do not use any Instagram " | |
657 | "App while Instaloader is running.") | |
658 | self._context.error(textwrap.fill(text_for_429), repeat_at_end=False) | |
659 | if waittime > 1.5: | |
660 | self._context.error("The request will be retried in {} seconds, at {:%H:%M}." | |
661 | .format(round(waittime), datetime.now() + timedelta(seconds=waittime)), | |
662 | repeat_at_end=False) | |
663 | if waittime > 0: | |
664 | self.sleep(waittime) |
0 | import base64 | |
1 | import hashlib | |
2 | import json | |
3 | import os | |
4 | from contextlib import contextmanager | |
5 | from datetime import datetime, timedelta | |
6 | from lzma import LZMAError | |
7 | from typing import Any, Callable, Dict, Iterator, NamedTuple, Optional, Tuple, TypeVar | |
8 | ||
9 | from .exceptions import InvalidArgumentException, QueryReturnedBadRequestException | |
10 | from .instaloadercontext import InstaloaderContext | |
11 | ||
12 | FrozenNodeIterator = NamedTuple('FrozenNodeIterator', | |
13 | [('query_hash', str), | |
14 | ('query_variables', Dict), | |
15 | ('query_referer', Optional[str]), | |
16 | ('context_username', Optional[str]), | |
17 | ('total_index', int), | |
18 | ('best_before', Optional[float]), | |
19 | ('remaining_data', Optional[Dict])]) | |
20 | FrozenNodeIterator.__doc__ = \ | |
21 | """A serializable representation of a :class:`NodeIterator` instance, saving its iteration state.""" | |
22 | FrozenNodeIterator.query_hash.__doc__ = """The GraphQL ``query_hash`` parameter.""" | |
23 | FrozenNodeIterator.query_variables.__doc__ = """The GraphQL ``query_variables`` parameter.""" | |
24 | FrozenNodeIterator.query_referer.__doc__ = """The HTTP referer used for the GraphQL query.""" | |
25 | FrozenNodeIterator.context_username.__doc__ = """The username who created the iterator, or ``None``.""" | |
26 | FrozenNodeIterator.total_index.__doc__ = """Number of items that have already been returned.""" | |
27 | FrozenNodeIterator.best_before.__doc__ = """Date when parts of the stored nodes might have expired.""" | |
28 | FrozenNodeIterator.remaining_data.__doc__ = \ | |
29 | """The already-retrieved, yet-unprocessed ``edges`` and the ``page_info`` at time of freezing.""" | |
30 | ||
31 | ||
32 | T = TypeVar('T') | |
33 | ||
34 | ||
35 | class NodeIterator(Iterator[T]): | |
36 | """ | |
37 | Iterate the nodes within edges in a GraphQL pagination. Instances of this class are returned by many (but not all) | |
38 | of Instaloader's :class:`Post`-returning functions (such as :meth:`Profile.get_posts` etc.). | |
39 | ||
40 | What makes this iterator special is its ability to freeze/store its current state, e.g. to interrupt an iteration, | |
41 | and later thaw/resume from where it left off. | |
42 | ||
43 | You can freeze a NodeIterator with :meth:`NodeIterator.freeze`:: | |
44 | ||
45 | post_iterator = profile.get_posts() | |
46 | try: | |
47 | for post in post_iterator: | |
48 | do_something_with(post) | |
49 | except KeyboardInterrupt: | |
50 | save("resume_information.json", post_iterator.freeze()) | |
51 | ||
52 | and later reuse it with :meth:`NodeIterator.thaw` on an equally-constructed NodeIterator:: | |
53 | ||
54 | post_iterator = profile.get_posts() | |
55 | post_iterator.thaw(load("resume_information.json")) | |
56 | ||
57 | A :class:`FrozenNodeIterator` can only be thawn with a matching NodeIterator, i.e. a NodeIterator instance that has | |
58 | been constructed with the same parameters as the instance that is represented by the :class:`FrozenNodeIterator` in | |
59 | question. This is to ensure that an iteration cannot be resumed in a wrong, unmatching loop. As a quick way to | |
60 | distinguish iterators that are saved e.g. in files, there is the :attr:`NodeIterator.magic` string: Two | |
61 | NodeIterators are matching if and only if they have the same magic. | |
62 | ||
63 | See also :func:`resumable_iteration` for a high-level context manager that handles a resumable iteration. | |
64 | """ | |
65 | ||
66 | _graphql_page_length = 50 | |
67 | _shelf_life = timedelta(days=29) | |
68 | ||
69 | def __init__(self, | |
70 | context: InstaloaderContext, | |
71 | query_hash: str, | |
72 | edge_extractor: Callable[[Dict[str, Any]], Dict[str, Any]], | |
73 | node_wrapper: Callable[[Dict], T], | |
74 | query_variables: Optional[Dict[str, Any]] = None, | |
75 | query_referer: Optional[str] = None, | |
76 | first_data: Optional[Dict[str, Any]] = None): | |
77 | self._context = context | |
78 | self._query_hash = query_hash | |
79 | self._edge_extractor = edge_extractor | |
80 | self._node_wrapper = node_wrapper | |
81 | self._query_variables = query_variables if query_variables is not None else {} | |
82 | self._query_referer = query_referer | |
83 | self._page_index = 0 | |
84 | self._total_index = 0 | |
85 | if first_data is not None: | |
86 | self._data = first_data | |
87 | self._best_before = datetime.now() + NodeIterator._shelf_life | |
88 | else: | |
89 | self._data = self._query() | |
90 | ||
91 | def _query(self, after: Optional[str] = None) -> Dict: | |
92 | pagination_variables = {'first': NodeIterator._graphql_page_length} # type: Dict[str, Any] | |
93 | if after is not None: | |
94 | pagination_variables['after'] = after | |
95 | try: | |
96 | data = self._edge_extractor( | |
97 | self._context.graphql_query( | |
98 | self._query_hash, {**self._query_variables, **pagination_variables}, self._query_referer | |
99 | ) | |
100 | ) | |
101 | self._best_before = datetime.now() + NodeIterator._shelf_life | |
102 | return data | |
103 | except QueryReturnedBadRequestException: | |
104 | new_page_length = int(NodeIterator._graphql_page_length / 2) | |
105 | if new_page_length >= 12: | |
106 | NodeIterator._graphql_page_length = new_page_length | |
107 | self._context.error("HTTP Error 400 (Bad Request) on GraphQL Query. Retrying with shorter page length.", | |
108 | repeat_at_end=False) | |
109 | return self._query(after) | |
110 | else: | |
111 | raise | |
112 | ||
113 | def __iter__(self): | |
114 | return self | |
115 | ||
116 | def __next__(self) -> T: | |
117 | if self._page_index < len(self._data['edges']): | |
118 | node = self._data['edges'][self._page_index]['node'] | |
119 | page_index, total_index = self._page_index, self._total_index | |
120 | try: | |
121 | self._page_index += 1 | |
122 | self._total_index += 1 | |
123 | except KeyboardInterrupt: | |
124 | self._page_index, self._total_index = page_index, total_index | |
125 | raise | |
126 | return self._node_wrapper(node) | |
127 | if self._data['page_info']['has_next_page']: | |
128 | query_response = self._query(self._data['page_info']['end_cursor']) | |
129 | page_index, data = self._page_index, self._data | |
130 | try: | |
131 | self._page_index = 0 | |
132 | self._data = query_response | |
133 | except KeyboardInterrupt: | |
134 | self._page_index, self._data = page_index, data | |
135 | raise | |
136 | return self.__next__() | |
137 | raise StopIteration() | |
138 | ||
139 | @property | |
140 | def count(self) -> Optional[int]: | |
141 | """The ``count`` as returned by Instagram. This is not always the total count this iterator will yield.""" | |
142 | return self._data.get('count') if self._data is not None else None | |
143 | ||
144 | @property | |
145 | def total_index(self) -> int: | |
146 | """Number of items that have already been returned.""" | |
147 | return self._total_index | |
148 | ||
149 | @property | |
150 | def magic(self) -> str: | |
151 | """Magic string for easily identifying a matching iterator file for resuming (hash of some parameters).""" | |
152 | if 'blake2b' not in hashlib.algorithms_available: | |
153 | magic_hash = hashlib.new('sha224') | |
154 | else: | |
155 | # Use blake2b when possible, i.e. on Python >= 3.6. | |
156 | magic_hash = hashlib.blake2b(digest_size=6) # type:ignore # pylint: disable=no-member | |
157 | magic_hash.update(json.dumps( | |
158 | [self._query_hash, self._query_variables, self._query_referer, self._context.username] | |
159 | ).encode()) | |
160 | return base64.urlsafe_b64encode(magic_hash.digest()).decode() | |
161 | ||
162 | def freeze(self) -> FrozenNodeIterator: | |
163 | """Freeze the iterator for later resuming.""" | |
164 | remaining_data = None | |
165 | if self._data is not None: | |
166 | remaining_data = {**self._data, | |
167 | 'edges': (self._data['edges'][(max(self._page_index - 1, 0)):])} | |
168 | return FrozenNodeIterator( | |
169 | query_hash=self._query_hash, | |
170 | query_variables=self._query_variables, | |
171 | query_referer=self._query_referer, | |
172 | context_username=self._context.username, | |
173 | total_index=max(self.total_index - 1, 0), | |
174 | best_before=self._best_before.timestamp() if self._best_before else None, | |
175 | remaining_data=remaining_data, | |
176 | ) | |
177 | ||
178 | def thaw(self, frozen: FrozenNodeIterator) -> None: | |
179 | """ | |
180 | Use this iterator for resuming from earlier iteration. | |
181 | ||
182 | :raises InvalidArgumentException: | |
183 | If | |
184 | ||
185 | - the iterator on which this method is called has already been used, or | |
186 | - the given :class:`FrozenNodeIterator` does not match, i.e. belongs to a different iteration. | |
187 | """ | |
188 | if self._total_index or self._page_index: | |
189 | raise InvalidArgumentException("thaw() called on already-used iterator.") | |
190 | if (self._query_hash != frozen.query_hash or | |
191 | self._query_variables != frozen.query_variables or | |
192 | self._query_referer != frozen.query_referer or | |
193 | self._context.username != frozen.context_username): | |
194 | raise InvalidArgumentException("Mismatching resume information.") | |
195 | if not frozen.best_before: | |
196 | raise InvalidArgumentException("\"best before\" date missing.") | |
197 | if frozen.remaining_data is None: | |
198 | raise InvalidArgumentException("\"remaining_data\" missing.") | |
199 | self._total_index = frozen.total_index | |
200 | self._best_before = datetime.fromtimestamp(frozen.best_before) | |
201 | self._data = frozen.remaining_data | |
202 | ||
203 | ||
204 | @contextmanager | |
205 | def resumable_iteration(context: InstaloaderContext, | |
206 | iterator: Iterator, | |
207 | load: Callable[[InstaloaderContext, str], Any], | |
208 | save: Callable[[FrozenNodeIterator, str], None], | |
209 | format_path: Callable[[str], str], | |
210 | check_bbd: bool = True, | |
211 | enabled: bool = True) -> Iterator[Tuple[bool, int]]: | |
212 | """ | |
213 | High-level context manager to handle a resumable iteration that can be interrupted with a KeyboardInterrupt. | |
214 | ||
215 | It can be used as follows to automatically load a previously-saved state into the iterator, save the iterator's | |
216 | state when interrupted, and delete the resume file upon completion:: | |
217 | ||
218 | post_iterator = profile.get_posts() | |
219 | with resumable_iteration( | |
220 | context=L.context, | |
221 | iterator=post_iterator, | |
222 | load=lambda _, path: FrozenNodeIterator(**json.load(open(path))), | |
223 | save=lambda fni, path: json.dump(fni._asdict(), open(path, 'w')), | |
224 | format_path=lambda magic: "resume_info_{}.json".format(magic) | |
225 | ) as (is_resuming, start_index): | |
226 | for post in post_iterator: | |
227 | do_something_with(post) | |
228 | ||
229 | It yields a tuple (is_resuming, start_index). | |
230 | ||
231 | When the passed iterator is not a :class:`NodeIterator`, it behaves as if ``resumable_iteration`` was not used, | |
232 | just executing the inner body. | |
233 | ||
234 | :param context: The :class:`InstaloaderContext`. | |
235 | :param iterator: The fresh :class:`NodeIterator`. | |
236 | :param load: Loads a FrozenNodeIterator from given path. The object is ignored if it has a different type. | |
237 | :param save: Saves the given FrozenNodeIterator to the given path. | |
238 | :param format_path: Returns the path to the resume file for the given magic. | |
239 | :param check_bbd: Whether to check the best before date and reject an expired FrozenNodeIterator. | |
240 | :param enabled: Set to False to disable all functionality and simply execute the inner body. | |
241 | """ | |
242 | if not enabled or not isinstance(iterator, NodeIterator): | |
243 | yield False, 0 | |
244 | return | |
245 | is_resuming = False | |
246 | start_index = 0 | |
247 | resume_file_path = format_path(iterator.magic) | |
248 | resume_file_exists = os.path.isfile(resume_file_path) | |
249 | if resume_file_exists: | |
250 | try: | |
251 | fni = load(context, resume_file_path) | |
252 | if not isinstance(fni, FrozenNodeIterator): | |
253 | raise InvalidArgumentException("Invalid type.") | |
254 | if check_bbd and fni.best_before and datetime.fromtimestamp(fni.best_before) < datetime.now(): | |
255 | raise InvalidArgumentException("\"Best before\" date exceeded.") | |
256 | iterator.thaw(fni) | |
257 | is_resuming = True | |
258 | start_index = iterator.total_index | |
259 | context.log("Resuming from {}.".format(resume_file_path)) | |
260 | except (InvalidArgumentException, LZMAError, json.decoder.JSONDecodeError) as exc: | |
261 | context.error("Warning: Not resuming from {}: {}".format(resume_file_path, exc)) | |
262 | try: | |
263 | yield is_resuming, start_index | |
264 | except KeyboardInterrupt: | |
265 | if os.path.dirname(resume_file_path): | |
266 | os.makedirs(os.path.dirname(resume_file_path), exist_ok=True) | |
267 | save(iterator.freeze(), resume_file_path) | |
268 | context.log("\nSaved resume information to {}.".format(resume_file_path)) | |
269 | raise | |
270 | if resume_file_exists: | |
271 | os.unlink(resume_file_path) | |
272 | context.log("Iteration complete, deleted resume information file {}.".format(resume_file_path)) |
8 | 8 | from . import __version__ |
9 | 9 | from .exceptions import * |
10 | 10 | from .instaloadercontext import InstaloaderContext |
11 | ||
11 | from .nodeiterator import FrozenNodeIterator, NodeIterator | |
12 | 12 | |
13 | 13 | PostSidecarNode = namedtuple('PostSidecarNode', ['is_video', 'display_url', 'video_url']) |
14 | 14 | PostSidecarNode.__doc__ = "Item of a Sidecar Post." |
25 | 25 | |
26 | 26 | PostComment = namedtuple('PostComment', (*PostCommentAnswer._fields, 'answers')) # type: ignore |
27 | 27 | for field in PostCommentAnswer._fields: |
28 | getattr(PostComment, field).__doc__ = getattr(PostCommentAnswer, field).__doc__ | |
28 | getattr(PostComment, field).__doc__ = getattr(PostCommentAnswer, field).__doc__ # pylint: disable=no-member | |
29 | 29 | PostComment.answers.__doc__ = r"Iterator which yields all :class:`PostCommentAnswer`\ s for the comment." # type: ignore |
30 | 30 | |
31 | 31 | PostLocation = namedtuple('PostLocation', ['id', 'name', 'slug', 'has_public_page', 'lat', 'lng']) |
146 | 146 | ) |
147 | 147 | self._full_metadata_dict = pic_json['data']['shortcode_media'] |
148 | 148 | if self._full_metadata_dict is None: |
149 | # issue #449 | |
150 | self._context.error("Fetching Post metadata failed (issue #449). " | |
151 | "The following data has been returned:\n" | |
152 | + json.dumps(pic_json['entry_data'], indent=2)) | |
153 | 149 | raise BadResponseException("Fetching Post metadata failed.") |
154 | 150 | if self.shortcode != self._full_metadata_dict['shortcode']: |
155 | 151 | self._node.update(self._full_metadata_dict) |
206 | 202 | @property |
207 | 203 | def owner_id(self) -> int: |
208 | 204 | """The ID of the Post's owner.""" |
209 | return self.owner_profile.userid | |
205 | # The ID may already be available, e.g. if the post instance was created | |
206 | # from an `hashtag.get_posts()` iterator, so no need to make another | |
207 | # http request. | |
208 | if 'owner' in self._node and 'id' in self._node['owner']: | |
209 | return self._node['owner']['id'] | |
210 | else: | |
211 | return self.owner_profile.userid | |
210 | 212 | |
211 | 213 | @property |
212 | 214 | def date_local(self) -> datetime: |
401 | 403 | # If the answer's metadata already contains all comments, don't do GraphQL requests to obtain them |
402 | 404 | yield from (_postcommentanswer(comment['node']) for comment in answer_edges) |
403 | 405 | return |
404 | yield from (_postcommentanswer(answer_node) for answer_node in | |
405 | self._context.graphql_node_list("51fdd02b67508306ad4484ff574a0b62", | |
406 | {'comment_id': node['id']}, | |
407 | 'https://www.instagram.com/p/' + self.shortcode + '/', | |
408 | lambda d: d['data']['comment']['edge_threaded_comments'])) | |
406 | yield from NodeIterator( | |
407 | self._context, | |
408 | '51fdd02b67508306ad4484ff574a0b62', | |
409 | lambda d: d['data']['comment']['edge_threaded_comments'], | |
410 | _postcommentanswer, | |
411 | {'comment_id': node['id']}, | |
412 | 'https://www.instagram.com/p/{0}/'.format(self.shortcode), | |
413 | ) | |
409 | 414 | |
410 | 415 | def _postcomment(node): |
411 | 416 | return PostComment(*_postcommentanswer(node), |
421 | 426 | # If the Post's metadata already contains all parent comments, don't do GraphQL requests to obtain them |
422 | 427 | yield from (_postcomment(comment['node']) for comment in comment_edges) |
423 | 428 | return |
424 | yield from (_postcomment(node) for node in | |
425 | self._context.graphql_node_list( | |
426 | "97b41c52301f77ce508f55e66d17620e", | |
427 | {'shortcode': self.shortcode}, | |
428 | 'https://www.instagram.com/p/' + self.shortcode + '/', | |
429 | lambda d: d['data']['shortcode_media']['edge_media_to_parent_comment'])) | |
429 | yield from NodeIterator( | |
430 | self._context, | |
431 | '97b41c52301f77ce508f55e66d17620e', | |
432 | lambda d: d['data']['shortcode_media']['edge_media_to_parent_comment'], | |
433 | _postcomment, | |
434 | {'shortcode': self.shortcode}, | |
435 | 'https://www.instagram.com/p/{0}/'.format(self.shortcode), | |
436 | ) | |
430 | 437 | |
431 | 438 | def get_likes(self) -> Iterator['Profile']: |
432 | """Iterate over all likes of the post. A :class:`Profile` instance of each likee is yielded.""" | |
439 | """ | |
440 | Iterate over all likes of the post. A :class:`Profile` instance of each likee is yielded. | |
441 | ||
442 | .. versionchanged:: 4.5.4 | |
443 | Require being logged in (as required by Instagram). | |
444 | """ | |
445 | if not self._context.is_logged_in: | |
446 | raise LoginRequiredException("--login required to access likes of a post.") | |
433 | 447 | if self.likes == 0: |
434 | 448 | # Avoid doing additional requests if there are no comments |
435 | 449 | return |
438 | 452 | # If the Post's metadata already contains all likes, don't do GraphQL requests to obtain them |
439 | 453 | yield from (Profile(self._context, like['node']) for like in likes_edges) |
440 | 454 | return |
441 | yield from (Profile(self._context, node) for node in | |
442 | self._context.graphql_node_list("1cb6ec562846122743b61e492c85999f", {'shortcode': self.shortcode}, | |
443 | 'https://www.instagram.com/p/' + self.shortcode + '/', | |
444 | lambda d: d['data']['shortcode_media']['edge_liked_by'])) | |
455 | yield from NodeIterator( | |
456 | self._context, | |
457 | '1cb6ec562846122743b61e492c85999f', | |
458 | lambda d: d['data']['shortcode_media']['edge_liked_by'], | |
459 | lambda n: Profile(self._context, n), | |
460 | {'shortcode': self.shortcode}, | |
461 | 'https://www.instagram.com/p/{0}/'.format(self.shortcode), | |
462 | ) | |
445 | 463 | |
446 | 464 | @property |
447 | 465 | def is_sponsored(self) -> bool: |
539 | 557 | """ |
540 | 558 | # pylint:disable=protected-access |
541 | 559 | profile = cls(context, {'username': username.lower()}) |
542 | profile._obtain_metadata() # to raise ProfileNotExistException now in case username is invalid | |
560 | profile._obtain_metadata() # to raise ProfileNotExistsException now in case username is invalid | |
543 | 561 | return profile |
544 | 562 | |
545 | 563 | @classmethod |
569 | 587 | context.profile_id_cache[profile_id] = profile |
570 | 588 | return profile |
571 | 589 | |
590 | @classmethod | |
591 | def own_profile(cls, context: InstaloaderContext): | |
592 | """Return own profile if logged-in. | |
593 | ||
594 | :param context: :attr:`Instaloader.context` | |
595 | ||
596 | .. versionadded:: 4.5.2""" | |
597 | if not context.is_logged_in: | |
598 | raise LoginRequiredException("--login required to access own profile.") | |
599 | return cls(context, context.graphql_query("d6f4427fbe92d846298cf93df0b937d3", {})["data"]["user"]) | |
600 | ||
572 | 601 | def _asdict(self): |
573 | 602 | json_node = self._node.copy() |
574 | 603 | # remove posts to avoid "Circular reference detected" exception |
769 | 798 | Use :attr:`profile_pic_url`.""" |
770 | 799 | return self.profile_pic_url |
771 | 800 | |
772 | def get_posts(self) -> Iterator[Post]: | |
773 | """Retrieve all posts from a profile.""" | |
801 | def get_posts(self) -> NodeIterator[Post]: | |
802 | """Retrieve all posts from a profile. | |
803 | ||
804 | :rtype: NodeIterator[Post]""" | |
774 | 805 | self._obtain_metadata() |
775 | yield from (Post(self._context, node, self) for node in | |
776 | self._context.graphql_node_list("472f257a40c653c64c666ce877d59d2b", | |
777 | {'id': self.userid}, | |
778 | 'https://www.instagram.com/{0}/'.format(self.username), | |
779 | lambda d: d['data']['user']['edge_owner_to_timeline_media'], | |
780 | first_data=self._metadata('edge_owner_to_timeline_media'))) | |
781 | ||
782 | def get_saved_posts(self) -> Iterator[Post]: | |
783 | """Get Posts that are marked as saved by the user.""" | |
806 | return NodeIterator( | |
807 | self._context, | |
808 | '472f257a40c653c64c666ce877d59d2b', | |
809 | lambda d: d['data']['user']['edge_owner_to_timeline_media'], | |
810 | lambda n: Post(self._context, n, self), | |
811 | {'id': self.userid}, | |
812 | 'https://www.instagram.com/{0}/'.format(self.username), | |
813 | self._metadata('edge_owner_to_timeline_media'), | |
814 | ) | |
815 | ||
816 | def get_saved_posts(self) -> NodeIterator[Post]: | |
817 | """Get Posts that are marked as saved by the user. | |
818 | ||
819 | :rtype: NodeIterator[Post]""" | |
784 | 820 | |
785 | 821 | if self.username != self._context.username: |
786 | 822 | raise LoginRequiredException("--login={} required to get that profile's saved posts.".format(self.username)) |
787 | 823 | |
788 | self._obtain_metadata() | |
789 | yield from (Post(self._context, node) for node in | |
790 | self._context.graphql_node_list("f883d95537fbcd400f466f63d42bd8a1", | |
791 | {'id': self.userid}, | |
792 | 'https://www.instagram.com/{0}/'.format(self.username), | |
793 | lambda d: d['data']['user']['edge_saved_media'], | |
794 | first_data=self._metadata('edge_saved_media'))) | |
795 | ||
796 | def get_tagged_posts(self) -> Iterator[Post]: | |
824 | return NodeIterator( | |
825 | self._context, | |
826 | 'f883d95537fbcd400f466f63d42bd8a1', | |
827 | lambda d: d['data']['user']['edge_saved_media'], | |
828 | lambda n: Post(self._context, n), | |
829 | {'id': self.userid}, | |
830 | 'https://www.instagram.com/{0}/'.format(self.username), | |
831 | ) | |
832 | ||
833 | def get_tagged_posts(self) -> NodeIterator[Post]: | |
797 | 834 | """Retrieve all posts where a profile is tagged. |
835 | ||
836 | :rtype: NodeIterator[Post] | |
798 | 837 | |
799 | 838 | .. versionadded:: 4.0.7""" |
800 | 839 | self._obtain_metadata() |
801 | yield from (Post(self._context, node, self if int(node['owner']['id']) == self.userid else None) for node in | |
802 | self._context.graphql_node_list("e31a871f7301132ceaab56507a66bbb7", | |
803 | {'id': self.userid}, | |
804 | 'https://www.instagram.com/{0}/'.format(self.username), | |
805 | lambda d: d['data']['user']['edge_user_to_photos_of_you'])) | |
806 | ||
807 | def get_igtv_posts(self) -> Iterator[Post]: | |
840 | return NodeIterator( | |
841 | self._context, | |
842 | 'e31a871f7301132ceaab56507a66bbb7', | |
843 | lambda d: d['data']['user']['edge_user_to_photos_of_you'], | |
844 | lambda n: Post(self._context, n, self if int(n['owner']['id']) == self.userid else None), | |
845 | {'id': self.userid}, | |
846 | 'https://www.instagram.com/{0}/'.format(self.username), | |
847 | ) | |
848 | ||
849 | def get_igtv_posts(self) -> NodeIterator[Post]: | |
808 | 850 | """Retrieve all IGTV posts. |
851 | ||
852 | :rtype: NodeIterator[Post] | |
809 | 853 | |
810 | 854 | .. versionadded:: 4.3""" |
811 | 855 | self._obtain_metadata() |
812 | yield from (Post(self._context, node, self) for node in | |
813 | self._context.graphql_node_list('bc78b344a68ed16dd5d7f264681c4c76', | |
814 | {'id': self.userid}, | |
815 | 'https://www.instagram.com/{0}/channel/'.format(self.username), | |
816 | lambda d: d['data']['user']['edge_felix_video_timeline'], | |
817 | first_data=self._metadata('edge_felix_video_timeline'))) | |
818 | ||
819 | def get_followers(self) -> Iterator['Profile']: | |
856 | return NodeIterator( | |
857 | self._context, | |
858 | 'bc78b344a68ed16dd5d7f264681c4c76', | |
859 | lambda d: d['data']['user']['edge_felix_video_timeline'], | |
860 | lambda n: Post(self._context, n, self), | |
861 | {'id': self.userid}, | |
862 | 'https://www.instagram.com/{0}/channel/'.format(self.username), | |
863 | self._metadata('edge_felix_video_timeline'), | |
864 | ) | |
865 | ||
866 | def get_followers(self) -> NodeIterator['Profile']: | |
820 | 867 | """ |
821 | 868 | Retrieve list of followers of given profile. |
822 | 869 | To use this, one needs to be logged in and private profiles has to be followed. |
870 | ||
871 | :rtype: NodeIterator[Profile] | |
823 | 872 | """ |
824 | 873 | if not self._context.is_logged_in: |
825 | 874 | raise LoginRequiredException("--login required to get a profile's followers.") |
826 | 875 | self._obtain_metadata() |
827 | yield from (Profile(self._context, node) for node in | |
828 | self._context.graphql_node_list("37479f2b8209594dde7facb0d904896a", | |
829 | {'id': str(self.userid)}, | |
830 | 'https://www.instagram.com/' + self.username + '/', | |
831 | lambda d: d['data']['user']['edge_followed_by'])) | |
832 | ||
833 | def get_followees(self) -> Iterator['Profile']: | |
876 | return NodeIterator( | |
877 | self._context, | |
878 | '37479f2b8209594dde7facb0d904896a', | |
879 | lambda d: d['data']['user']['edge_followed_by'], | |
880 | lambda n: Profile(self._context, n), | |
881 | {'id': str(self.userid)}, | |
882 | 'https://www.instagram.com/{0}/'.format(self.username), | |
883 | ) | |
884 | ||
885 | def get_followees(self) -> NodeIterator['Profile']: | |
834 | 886 | """ |
835 | 887 | Retrieve list of followees (followings) of given profile. |
836 | 888 | To use this, one needs to be logged in and private profiles has to be followed. |
889 | ||
890 | :rtype: NodeIterator[Profile] | |
837 | 891 | """ |
838 | 892 | if not self._context.is_logged_in: |
839 | 893 | raise LoginRequiredException("--login required to get a profile's followees.") |
840 | 894 | self._obtain_metadata() |
841 | yield from (Profile(self._context, node) for node in | |
842 | self._context.graphql_node_list("58712303d941c6855d4e888c5f0cd22f", | |
843 | {'id': str(self.userid)}, | |
844 | 'https://www.instagram.com/' + self.username + '/', | |
845 | lambda d: d['data']['user']['edge_follow'])) | |
895 | return NodeIterator( | |
896 | self._context, | |
897 | '58712303d941c6855d4e888c5f0cd22f', | |
898 | lambda d: d['data']['user']['edge_follow'], | |
899 | lambda n: Profile(self._context, n), | |
900 | {'id': str(self.userid)}, | |
901 | 'https://www.instagram.com/{0}/'.format(self.username), | |
902 | ) | |
846 | 903 | |
847 | 904 | def get_similar_accounts(self) -> Iterator['Profile']: |
848 | 905 | """ |
1028 | 1085 | |
1029 | 1086 | @property |
1030 | 1087 | def last_seen_local(self) -> Optional[datetime]: |
1031 | """Timestamp when the story has last been watched or None (local time zone).""" | |
1088 | """Timestamp of the most recent StoryItem that has been watched or None (local time zone).""" | |
1032 | 1089 | if self._node['seen']: |
1033 | 1090 | return datetime.fromtimestamp(self._node['seen']) |
1034 | 1091 | return None |
1035 | 1092 | |
1036 | 1093 | @property |
1037 | 1094 | def last_seen_utc(self) -> Optional[datetime]: |
1038 | """Timestamp when the story has last been watched or None (UTC).""" | |
1095 | """Timestamp of the most recent StoryItem that has been watched or None (UTC).""" | |
1039 | 1096 | if self._node['seen']: |
1040 | 1097 | return datetime.utcfromtimestamp(self._node['seen']) |
1041 | 1098 | return None |
1294 | 1351 | yield from (Post(self._context, edge["node"]) for edge in conn["edges"]) |
1295 | 1352 | |
1296 | 1353 | def get_all_posts(self) -> Iterator[Post]: |
1297 | """Yields all posts, i.e. all most recent posts and the top posts, in chronological order.""" | |
1354 | """Yields all posts, i.e. all most recent posts and the top posts, in almost-chronological order.""" | |
1298 | 1355 | sorted_top_posts = iter(sorted(self.get_top_posts(), key=lambda p: p.date_utc, reverse=True)) |
1299 | 1356 | other_posts = self.get_posts() |
1300 | 1357 | next_top = next(sorted_top_posts, None) |
1301 | 1358 | next_other = next(other_posts, None) |
1302 | 1359 | while next_top is not None or next_other is not None: |
1303 | 1360 | if next_other is None: |
1361 | assert next_top is not None | |
1362 | yield next_top | |
1304 | 1363 | yield from sorted_top_posts |
1305 | 1364 | break |
1306 | 1365 | if next_top is None: |
1366 | assert next_other is not None | |
1367 | yield next_other | |
1307 | 1368 | yield from other_posts |
1308 | 1369 | break |
1309 | 1370 | if next_top == next_other: |
1397 | 1458 | return self._searchstring |
1398 | 1459 | |
1399 | 1460 | |
1400 | JsonExportable = Union[Post, Profile, StoryItem, Hashtag] | |
1461 | JsonExportable = Union[Post, Profile, StoryItem, Hashtag, FrozenNodeIterator] | |
1401 | 1462 | |
1402 | 1463 | |
1403 | 1464 | def save_structure_to_file(structure: JsonExportable, filename: str) -> None: |
1446 | 1507 | return StoryItem(context, json_structure['node']) |
1447 | 1508 | elif node_type == "Hashtag": |
1448 | 1509 | return Hashtag(context, json_structure['node']) |
1510 | elif node_type == "FrozenNodeIterator": | |
1511 | return FrozenNodeIterator(**json_structure['node']) | |
1449 | 1512 | else: |
1450 | 1513 | raise InvalidArgumentException("{}: Not an Instaloader JSON.".format(filename)) |
1451 | 1514 | elif 'shortcode' in json_structure: |
4 | 4 | import tempfile |
5 | 5 | import unittest |
6 | 6 | from itertools import islice |
7 | from typing import Dict, List | |
7 | from typing import Optional | |
8 | 8 | |
9 | 9 | import instaloader |
10 | 10 | |
22 | 22 | EMPTY_PROFILE = "not_public" |
23 | 23 | EMPTY_PROFILE_ID = 1928659031 |
24 | 24 | |
25 | # Preserve query timestamps (rate control) between tests to not get rate limited | |
26 | instaloadercontext_query_timestamps = dict() # type: Dict[str, List[float]] | |
25 | ratecontroller = None # type: Optional[instaloader.RateController] | |
27 | 26 | |
28 | 27 | |
29 | 28 | class TestInstaloaderAnonymously(unittest.TestCase): |
36 | 35 | download_comments=True, |
37 | 36 | save_metadata=True) |
38 | 37 | self.L.context.raise_all_errors = True |
39 | # pylint:disable=protected-access | |
40 | self.L.context._graphql_query_timestamps = instaloadercontext_query_timestamps.copy() | |
38 | if ratecontroller is not None: | |
39 | # pylint:disable=protected-access | |
40 | ratecontroller._context = self.L.context | |
41 | self.L.context._rate_controller = ratecontroller | |
41 | 42 | |
42 | 43 | def tearDown(self): |
43 | 44 | # pylint:disable=global-statement,protected-access |
44 | global instaloadercontext_query_timestamps | |
45 | instaloadercontext_query_timestamps = self.L.context._graphql_query_timestamps.copy() | |
45 | global ratecontroller | |
46 | ratecontroller = self.L.context._rate_controller | |
46 | 47 | self.L.close() |
47 | 48 | os.chdir('/') |
48 | 49 | print("Removing {}".format(self.dir)) |