├── LICENSE
├── README.md
├── config.ini
├── image
├── 8823logo.gif
├── hayabusa-arch.png
├── hayabusa.gif
├── spark-sqlite-dist.png
└── spark-sqlite-para.png
├── logrotate-crontab
├── logrotate-hayabusa
├── presentation
└── was
│ ├── Makefile
│ ├── pictures
│ ├── hayabusa-arch.eps
│ ├── spark-sqlite-dist2.eps
│ ├── spark-sqlite-para.eps
│ └── spark-sqlite-para2.eps
│ ├── was.pdf
│ └── was.tex
├── search_engine.py
├── store_engine.py
└── webui
├── README.md
├── app.py
├── hayabusa-webui.png
├── original
├── 8823logo.gif
├── README.md
├── hayabusa.gif
├── hayabusa.html
└── original-8823-ui.png
├── static
├── css
│ ├── bootstrap-theme.css
│ ├── bootstrap-theme.css.map
│ ├── bootstrap-theme.min.css
│ ├── bootstrap-theme.min.css.map
│ ├── bootstrap.css
│ ├── bootstrap.css.map
│ ├── bootstrap.min.css
│ ├── bootstrap.min.css.map
│ ├── jquery-ui.css
│ └── jquery.dataTables.css
└── js
│ ├── bootstrap.js
│ ├── bootstrap.min.js
│ ├── jquery-1.10.2.min.js
│ ├── jquery-1.8.1.min.js
│ ├── jquery.dataTables.js
│ ├── jquery.dataTables.min.js
│ └── npm.js
└── templates
├── index.html
└── index_get.html
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017-2018 Hiroshi ABE
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Hayabusa
2 | Hayabusa: A Simple and Fast Full-Text Search Engine for Massive System Log Data
3 |
4 | # Concept
5 | - Pure python implement
6 | - Parallel SQLite processing engine
7 | - SQLite3 FTS(Full Text Search)
8 | - Core-scale architecture
9 |
10 | # Architecture
11 | - Design of the directory structure
12 | - By specifying a search range of time in ”the directory path + yyyy + mm + dd + hh + min.db”, the search program can select the search time systematically.
13 | ```
14 | /targetdir/yyyy/mm/dd/hh/min.db
15 | ```
16 |
17 | - StoreEngine
18 | - sample code
19 | ```
20 | import os.path import sqlite3
21 | db_file = ’test.db’ log_file = ’1m.log’
22 |
23 | if not os.path.exists(db_file):
24 | conn = sqlite3.connect(db_file) conn.execute("CREATE VIRTUAL TABLE SYSLOG USING FTS3(LOGS)");
25 | conn.close()
26 | conn = sqlite3.connect(db_file)
27 |
28 | with open(log_file) as fh:
29 | lines = [[line] for line in fh]
30 | conn.executemany(’INSERT INTO SYSLOG VALUES ( ? )’, lines)
31 | conn.commit()
32 | ```
33 |
34 | - SearchEngine
35 | - sample command
36 | ```
37 | $ python search_engine.py -h
38 | usage: search_engine.py [-h] [--time TIME] [--match MATCH] [-c] [-s] [-v]
39 |
40 | optional arguments:
41 | -h, --help show this help message and exit
42 | --time TIME time explain regexp(YYYY/MM/DD/HH/MIN). eg: 2017/04/27/10/*
43 | --match MATCH matching keyword. eg: noc or 'noc Login'
44 | -e exact match
45 | -c count
46 | -s sum
47 | -v verbose
48 |
49 | $ python search_engine.py --time 2017/05/11/13/* --match 'keyword' -c
50 | ```
51 | - Architecture image
52 | 
53 |
54 | # Search condition
55 | - case-insensitive
56 | - no distinguish uppercase or lowercase
57 | - Exact match
58 | ```
59 | -e --match '192.168.0.1'
60 | ```
61 |
62 | - AND
63 | ```
64 | --match 'Hello World'
65 | ```
66 | - OR
67 | ```
68 | --match 'Hello OR World'
69 | ```
70 | - NOT
71 | ```
72 | --match 'Hello World -Wide'
73 | ```
74 | - PHRASE
75 | ```
76 | --match '"Hello World"'
77 | --match '\"192.168.0.1\"' <- IP address case(same as -e flag)
78 | --match '\"192.168.0.1\" src sent' <- PHRASE + AND search
79 | ```
80 | - asterisk(*)
81 | ```
82 | --match 'H* World'
83 | ```
84 | - HAT
85 | ```
86 | --match '^Hello World'
87 | ```
88 |
89 | # Development environment
90 | - CentOS 7.3
91 | - Python 3.5.1(use anaconda packages)
92 | - SQLite3(version 3.9.2)
93 |
94 | # Dependency softwares
95 | - Python 3
96 | - SQLite3
97 | - GNU Parallel
98 |
99 | # Benchmark
100 | ## Compare with Apache Spark
101 | - Hayabusa and Spark time comparison
102 | 
103 |
104 | - Comarison of distributes Spark environment and the stand-alone Hayabusa
105 | 
106 |
--------------------------------------------------------------------------------
/config.ini:
--------------------------------------------------------------------------------
1 | [path]
2 | log-file : /var/log/messages.1
3 | base-dir : /var/tmp/data
4 |
--------------------------------------------------------------------------------
/image/8823logo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hirolovesbeer/hayabusa/d6ecea2ac1d624f4a3fabbbfb5ee265cf48f4a02/image/8823logo.gif
--------------------------------------------------------------------------------
/image/hayabusa-arch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hirolovesbeer/hayabusa/d6ecea2ac1d624f4a3fabbbfb5ee265cf48f4a02/image/hayabusa-arch.png
--------------------------------------------------------------------------------
/image/hayabusa.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hirolovesbeer/hayabusa/d6ecea2ac1d624f4a3fabbbfb5ee265cf48f4a02/image/hayabusa.gif
--------------------------------------------------------------------------------
/image/spark-sqlite-dist.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hirolovesbeer/hayabusa/d6ecea2ac1d624f4a3fabbbfb5ee265cf48f4a02/image/spark-sqlite-dist.png
--------------------------------------------------------------------------------
/image/spark-sqlite-para.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hirolovesbeer/hayabusa/d6ecea2ac1d624f4a3fabbbfb5ee265cf48f4a02/image/spark-sqlite-para.png
--------------------------------------------------------------------------------
/logrotate-crontab:
--------------------------------------------------------------------------------
1 | * * * * * root logrotate -f /etc/logrotate.d/hayabusa
2 | * * * * * root /home/XXXXXXX/anaconda3/bin/python /home/XXXXX/work/hayabusa/store_engine.py
3 |
--------------------------------------------------------------------------------
/logrotate-hayabusa:
--------------------------------------------------------------------------------
1 | /var/log/messages
2 | {
3 | rotate 60
4 | missingok
5 | ifempty
6 | sharedscripts
7 | postrotate
8 | /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
9 | endscript
10 | }
11 |
--------------------------------------------------------------------------------
/presentation/was/Makefile:
--------------------------------------------------------------------------------
1 | .SUFFIXES: .tex .dvi .aux .log .toc .lof .lot .pdf .ps
2 | F=was
3 | TEX=platex
4 |
5 | all: pdf
6 |
7 | pdf: dvi
8 | dvipdfmx $F.dvi
9 |
10 | dvi:
11 | extractbb pictures/*.pdf
12 | extractbb pictures/*.png
13 | platex $F.tex
14 | platex $F.tex
15 |
16 | clean:
17 | rm -f *~ *.{dvi,aux,lof,toc,lot,log,pdf,ps}
18 |
--------------------------------------------------------------------------------
/presentation/was/pictures/spark-sqlite-dist2.eps:
--------------------------------------------------------------------------------
1 | %!PS-Adobe-3.0 EPSF-3.0
2 | %%BoundingBox: -5 198 595 588
3 | %%HiResBoundingBox: -4.907 198.888 594.707 587.490
4 | %%Title: spark-sqlite-dist.eps
5 | %%Creator: matplotlib version 1.4.3, http://matplotlib.org/
6 | %%CreationDate: Thu Apr 6 12:45:08 2017
7 | %%Orientation: portrait
8 | %%EndComments
9 | %%BeginProlog
10 | /mpldict 8 dict def
11 | mpldict begin
12 | /m { moveto } bind def
13 | /l { lineto } bind def
14 | /r { rlineto } bind def
15 | /c { curveto } bind def
16 | /cl { closepath } bind def
17 | /box {
18 | m
19 | 1 index 0 r
20 | 0 exch r
21 | neg 0 r
22 | cl
23 | } bind def
24 | /clipbox {
25 | box
26 | clip
27 | newpath
28 | } bind def
29 | %!PS-Adobe-3.0 Resource-Font
30 | %%Title: Bitstream Vera Sans
31 | %%Copyright: Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.
32 | %%Creator: Converted from TrueType to type 3 by PPR
33 | 25 dict begin
34 | /_d{bind def}bind def
35 | /_m{moveto}_d
36 | /_l{lineto}_d
37 | /_cl{closepath eofill}_d
38 | /_c{curveto}_d
39 | /_sc{7 -1 roll{setcachedevice}{pop pop pop pop pop pop}ifelse}_d
40 | /_e{exec}_d
41 | /FontName /BitstreamVeraSans-Roman def
42 | /PaintType 0 def
43 | /FontMatrix[.001 0 0 .001 0 0]def
44 | /FontBBox[-183 -236 1287 928]def
45 | /FontType 3 def
46 | /Encoding [ /space /quotedbl /parenleft /parenright /zero /one /two /three /four /five /six /H /N /S /a /b /c /d /e /f /i /k /l /m /n /o /p /r /s /t /u /w /y ] def
47 | /FontInfo 10 dict dup begin
48 | /FamilyName (Bitstream Vera Sans) def
49 | /FullName (Bitstream Vera Sans) def
50 | /Notice (Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved. Bitstream Vera is a trademark of Bitstream, Inc.) def
51 | /Weight (Roman) def
52 | /Version (Release 1.10) def
53 | /ItalicAngle 0.0 def
54 | /isFixedPitch false def
55 | /UnderlinePosition -213 def
56 | /UnderlineThickness 143 def
57 | end readonly def
58 | /CharStrings 33 dict dup begin
59 | /space{318 0 0 0 0 0 _sc
60 | }_d
61 | /quotedbl{460 0 96 458 364 729 _sc
62 | 179 729 _m
63 | 179 458 _l
64 | 96 458 _l
65 | 96 729 _l
66 | 179 729 _l
67 | 364 729 _m
68 | 364 458 _l
69 | 281 458 _l
70 | 281 729 _l
71 | 364 729 _l
72 | _cl}_d
73 | /parenleft{390 0 86 -131 310 759 _sc
74 | 310 759 _m
75 | 266 683 234 609 213 536 _c
76 | 191 463 181 389 181 314 _c
77 | 181 238 191 164 213 91 _c
78 | 234 17 266 -56 310 -131 _c
79 | 232 -131 _l
80 | 183 -54 146 20 122 94 _c
81 | 98 168 86 241 86 314 _c
82 | 86 386 98 459 122 533 _c
83 | 146 607 182 682 232 759 _c
84 | 310 759 _l
85 | _cl}_d
86 | /parenright{390 0 80 -131 304 759 _sc
87 | 80 759 _m
88 | 158 759 _l
89 | 206 682 243 607 267 533 _c
90 | 291 459 304 386 304 314 _c
91 | 304 241 291 168 267 94 _c
92 | 243 20 206 -54 158 -131 _c
93 | 80 -131 _l
94 | 123 -56 155 17 177 91 _c
95 | 198 164 209 238 209 314 _c
96 | 209 389 198 463 177 536 _c
97 | 155 609 123 683 80 759 _c
98 | _cl}_d
99 | /zero{636 0 66 -13 570 742 _sc
100 | 318 664 _m
101 | 267 664 229 639 203 589 _c
102 | 177 539 165 464 165 364 _c
103 | 165 264 177 189 203 139 _c
104 | 229 89 267 64 318 64 _c
105 | 369 64 407 89 433 139 _c
106 | 458 189 471 264 471 364 _c
107 | 471 464 458 539 433 589 _c
108 | 407 639 369 664 318 664 _c
109 | 318 742 _m
110 | 399 742 461 709 505 645 _c
111 | 548 580 570 486 570 364 _c
112 | 570 241 548 147 505 83 _c
113 | 461 19 399 -13 318 -13 _c
114 | 236 -13 173 19 130 83 _c
115 | 87 147 66 241 66 364 _c
116 | 66 486 87 580 130 645 _c
117 | 173 709 236 742 318 742 _c
118 | _cl}_d
119 | /one{636 0 110 0 544 729 _sc
120 | 124 83 _m
121 | 285 83 _l
122 | 285 639 _l
123 | 110 604 _l
124 | 110 694 _l
125 | 284 729 _l
126 | 383 729 _l
127 | 383 83 _l
128 | 544 83 _l
129 | 544 0 _l
130 | 124 0 _l
131 | 124 83 _l
132 | _cl}_d
133 | /two{{636 0 73 0 536 742 _sc
134 | 192 83 _m
135 | 536 83 _l
136 | 536 0 _l
137 | 73 0 _l
138 | 73 83 _l
139 | 110 121 161 173 226 239 _c
140 | 290 304 331 346 348 365 _c
141 | 380 400 402 430 414 455 _c
142 | 426 479 433 504 433 528 _c
143 | 433 566 419 598 392 622 _c
144 | 365 646 330 659 286 659 _c
145 | 255 659 222 653 188 643 _c
146 | 154 632 117 616 78 594 _c
147 | 78 694 _l
148 | 118 710 155 722 189 730 _c
149 | 223 738 255 742 284 742 _c
150 | }_e{359 742 419 723 464 685 _c
151 | 509 647 532 597 532 534 _c
152 | 532 504 526 475 515 449 _c
153 | 504 422 484 390 454 354 _c
154 | 446 344 420 317 376 272 _c
155 | 332 227 271 164 192 83 _c
156 | _cl}_e}_d
157 | /three{{636 0 76 -13 556 742 _sc
158 | 406 393 _m
159 | 453 383 490 362 516 330 _c
160 | 542 298 556 258 556 212 _c
161 | 556 140 531 84 482 45 _c
162 | 432 6 362 -13 271 -13 _c
163 | 240 -13 208 -10 176 -4 _c
164 | 144 1 110 10 76 22 _c
165 | 76 117 _l
166 | 103 101 133 89 166 81 _c
167 | 198 73 232 69 268 69 _c
168 | 330 69 377 81 409 105 _c
169 | 441 129 458 165 458 212 _c
170 | 458 254 443 288 413 312 _c
171 | 383 336 341 349 287 349 _c
172 | }_e{202 349 _l
173 | 202 430 _l
174 | 291 430 _l
175 | 339 430 376 439 402 459 _c
176 | 428 478 441 506 441 543 _c
177 | 441 580 427 609 401 629 _c
178 | 374 649 336 659 287 659 _c
179 | 260 659 231 656 200 650 _c
180 | 169 644 135 635 98 623 _c
181 | 98 711 _l
182 | 135 721 170 729 203 734 _c
183 | 235 739 266 742 296 742 _c
184 | 370 742 429 725 473 691 _c
185 | 517 657 539 611 539 553 _c
186 | 539 513 527 479 504 451 _c
187 | 481 423 448 403 406 393 _c
188 | _cl}_e}_d
189 | /four{636 0 49 0 580 729 _sc
190 | 378 643 _m
191 | 129 254 _l
192 | 378 254 _l
193 | 378 643 _l
194 | 352 729 _m
195 | 476 729 _l
196 | 476 254 _l
197 | 580 254 _l
198 | 580 172 _l
199 | 476 172 _l
200 | 476 0 _l
201 | 378 0 _l
202 | 378 172 _l
203 | 49 172 _l
204 | 49 267 _l
205 | 352 729 _l
206 | _cl}_d
207 | /five{{636 0 77 -13 549 729 _sc
208 | 108 729 _m
209 | 495 729 _l
210 | 495 646 _l
211 | 198 646 _l
212 | 198 467 _l
213 | 212 472 227 476 241 478 _c
214 | 255 480 270 482 284 482 _c
215 | 365 482 429 459 477 415 _c
216 | 525 370 549 310 549 234 _c
217 | 549 155 524 94 475 51 _c
218 | 426 8 357 -13 269 -13 _c
219 | 238 -13 207 -10 175 -6 _c
220 | 143 -1 111 6 77 17 _c
221 | 77 116 _l
222 | 106 100 136 88 168 80 _c
223 | 199 72 232 69 267 69 _c
224 | }_e{323 69 368 83 401 113 _c
225 | 433 143 450 183 450 234 _c
226 | 450 284 433 324 401 354 _c
227 | 368 384 323 399 267 399 _c
228 | 241 399 214 396 188 390 _c
229 | 162 384 135 375 108 363 _c
230 | 108 729 _l
231 | _cl}_e}_d
232 | /six{{636 0 70 -13 573 742 _sc
233 | 330 404 _m
234 | 286 404 251 388 225 358 _c
235 | 199 328 186 286 186 234 _c
236 | 186 181 199 139 225 109 _c
237 | 251 79 286 64 330 64 _c
238 | 374 64 409 79 435 109 _c
239 | 461 139 474 181 474 234 _c
240 | 474 286 461 328 435 358 _c
241 | 409 388 374 404 330 404 _c
242 | 526 713 _m
243 | 526 623 _l
244 | 501 635 476 644 451 650 _c
245 | 425 656 400 659 376 659 _c
246 | 310 659 260 637 226 593 _c
247 | }_e{192 549 172 482 168 394 _c
248 | 187 422 211 444 240 459 _c
249 | 269 474 301 482 336 482 _c
250 | 409 482 467 459 509 415 _c
251 | 551 371 573 310 573 234 _c
252 | 573 159 550 99 506 54 _c
253 | 462 9 403 -13 330 -13 _c
254 | 246 -13 181 19 137 83 _c
255 | 92 147 70 241 70 364 _c
256 | 70 479 97 571 152 639 _c
257 | 206 707 280 742 372 742 _c
258 | 396 742 421 739 447 735 _c
259 | 472 730 498 723 526 713 _c
260 | _cl}_e}_d
261 | /H{752 0 98 0 654 729 _sc
262 | 98 729 _m
263 | 197 729 _l
264 | 197 430 _l
265 | 555 430 _l
266 | 555 729 _l
267 | 654 729 _l
268 | 654 0 _l
269 | 555 0 _l
270 | 555 347 _l
271 | 197 347 _l
272 | 197 0 _l
273 | 98 0 _l
274 | 98 729 _l
275 | _cl}_d
276 | /N{748 0 98 0 650 729 _sc
277 | 98 729 _m
278 | 231 729 _l
279 | 554 119 _l
280 | 554 729 _l
281 | 650 729 _l
282 | 650 0 _l
283 | 517 0 _l
284 | 194 610 _l
285 | 194 0 _l
286 | 98 0 _l
287 | 98 729 _l
288 | _cl}_d
289 | /S{{635 0 66 -13 579 742 _sc
290 | 535 705 _m
291 | 535 609 _l
292 | 497 627 462 640 429 649 _c
293 | 395 657 363 662 333 662 _c
294 | 279 662 237 651 208 631 _c
295 | 179 610 165 580 165 542 _c
296 | 165 510 174 485 194 469 _c
297 | 213 452 250 439 304 429 _c
298 | 364 417 _l
299 | 437 403 491 378 526 343 _c
300 | 561 307 579 260 579 201 _c
301 | 579 130 555 77 508 41 _c
302 | 460 5 391 -13 300 -13 _c
303 | 265 -13 228 -9 189 -2 _c
304 | }_e{150 5 110 16 69 32 _c
305 | 69 134 _l
306 | 109 111 148 94 186 83 _c
307 | 224 71 262 66 300 66 _c
308 | 356 66 399 77 430 99 _c
309 | 460 121 476 152 476 194 _c
310 | 476 230 465 258 443 278 _c
311 | 421 298 385 313 335 323 _c
312 | 275 335 _l
313 | 201 349 148 372 115 404 _c
314 | 82 435 66 478 66 534 _c
315 | 66 598 88 649 134 686 _c
316 | 179 723 242 742 322 742 _c
317 | 356 742 390 739 426 733 _c
318 | 461 727 497 717 535 705 _c
319 | }_e{_cl}_e}_d
320 | /a{{613 0 60 -13 522 560 _sc
321 | 343 275 _m
322 | 270 275 220 266 192 250 _c
323 | 164 233 150 205 150 165 _c
324 | 150 133 160 107 181 89 _c
325 | 202 70 231 61 267 61 _c
326 | 317 61 357 78 387 114 _c
327 | 417 149 432 196 432 255 _c
328 | 432 275 _l
329 | 343 275 _l
330 | 522 312 _m
331 | 522 0 _l
332 | 432 0 _l
333 | 432 83 _l
334 | 411 49 385 25 355 10 _c
335 | 325 -5 287 -13 243 -13 _c
336 | 187 -13 142 2 109 33 _c
337 | 76 64 60 106 60 159 _c
338 | }_e{60 220 80 266 122 298 _c
339 | 163 329 224 345 306 345 _c
340 | 432 345 _l
341 | 432 354 _l
342 | 432 395 418 427 391 450 _c
343 | 364 472 326 484 277 484 _c
344 | 245 484 215 480 185 472 _c
345 | 155 464 127 453 100 439 _c
346 | 100 522 _l
347 | 132 534 164 544 195 550 _c
348 | 226 556 256 560 286 560 _c
349 | 365 560 424 539 463 498 _c
350 | 502 457 522 395 522 312 _c
351 | _cl}_e}_d
352 | /b{{635 0 91 -13 580 760 _sc
353 | 487 273 _m
354 | 487 339 473 390 446 428 _c
355 | 418 466 381 485 334 485 _c
356 | 286 485 249 466 222 428 _c
357 | 194 390 181 339 181 273 _c
358 | 181 207 194 155 222 117 _c
359 | 249 79 286 61 334 61 _c
360 | 381 61 418 79 446 117 _c
361 | 473 155 487 207 487 273 _c
362 | 181 464 _m
363 | 199 496 223 520 252 536 _c
364 | 281 552 316 560 356 560 _c
365 | 422 560 476 533 518 481 _c
366 | 559 428 580 359 580 273 _c
367 | }_e{580 187 559 117 518 65 _c
368 | 476 13 422 -13 356 -13 _c
369 | 316 -13 281 -5 252 10 _c
370 | 223 25 199 49 181 82 _c
371 | 181 0 _l
372 | 91 0 _l
373 | 91 760 _l
374 | 181 760 _l
375 | 181 464 _l
376 | _cl}_e}_d
377 | /c{{550 0 55 -13 488 560 _sc
378 | 488 526 _m
379 | 488 442 _l
380 | 462 456 437 466 411 473 _c
381 | 385 480 360 484 334 484 _c
382 | 276 484 230 465 198 428 _c
383 | 166 391 150 339 150 273 _c
384 | 150 206 166 154 198 117 _c
385 | 230 80 276 62 334 62 _c
386 | 360 62 385 65 411 72 _c
387 | 437 79 462 90 488 104 _c
388 | 488 21 _l
389 | 462 9 436 0 410 -5 _c
390 | 383 -10 354 -13 324 -13 _c
391 | 242 -13 176 12 128 64 _c
392 | }_e{79 115 55 185 55 273 _c
393 | 55 362 79 432 128 483 _c
394 | 177 534 244 560 330 560 _c
395 | 358 560 385 557 411 551 _c
396 | 437 545 463 537 488 526 _c
397 | _cl}_e}_d
398 | /d{{635 0 55 -13 544 760 _sc
399 | 454 464 _m
400 | 454 760 _l
401 | 544 760 _l
402 | 544 0 _l
403 | 454 0 _l
404 | 454 82 _l
405 | 435 49 411 25 382 10 _c
406 | 353 -5 319 -13 279 -13 _c
407 | 213 -13 159 13 117 65 _c
408 | 75 117 55 187 55 273 _c
409 | 55 359 75 428 117 481 _c
410 | 159 533 213 560 279 560 _c
411 | 319 560 353 552 382 536 _c
412 | 411 520 435 496 454 464 _c
413 | 148 273 _m
414 | 148 207 161 155 188 117 _c
415 | 215 79 253 61 301 61 _c
416 | }_e{348 61 385 79 413 117 _c
417 | 440 155 454 207 454 273 _c
418 | 454 339 440 390 413 428 _c
419 | 385 466 348 485 301 485 _c
420 | 253 485 215 466 188 428 _c
421 | 161 390 148 339 148 273 _c
422 | _cl}_e}_d
423 | /e{{615 0 55 -13 562 560 _sc
424 | 562 296 _m
425 | 562 252 _l
426 | 149 252 _l
427 | 153 190 171 142 205 110 _c
428 | 238 78 284 62 344 62 _c
429 | 378 62 412 66 444 74 _c
430 | 476 82 509 95 541 113 _c
431 | 541 28 _l
432 | 509 14 476 3 442 -3 _c
433 | 408 -9 373 -13 339 -13 _c
434 | 251 -13 182 12 131 62 _c
435 | 80 112 55 181 55 268 _c
436 | 55 357 79 428 127 481 _c
437 | 175 533 241 560 323 560 _c
438 | 397 560 455 536 498 489 _c
439 | }_e{540 441 562 377 562 296 _c
440 | 472 322 _m
441 | 471 371 457 410 431 440 _c
442 | 404 469 368 484 324 484 _c
443 | 274 484 234 469 204 441 _c
444 | 174 413 156 373 152 322 _c
445 | 472 322 _l
446 | _cl}_e}_d
447 | /f{352 0 23 0 371 760 _sc
448 | 371 760 _m
449 | 371 685 _l
450 | 285 685 _l
451 | 253 685 230 678 218 665 _c
452 | 205 652 199 629 199 595 _c
453 | 199 547 _l
454 | 347 547 _l
455 | 347 477 _l
456 | 199 477 _l
457 | 199 0 _l
458 | 109 0 _l
459 | 109 477 _l
460 | 23 477 _l
461 | 23 547 _l
462 | 109 547 _l
463 | 109 585 _l
464 | 109 645 123 690 151 718 _c
465 | 179 746 224 760 286 760 _c
466 | 371 760 _l
467 | _cl}_d
468 | /i{278 0 94 0 184 760 _sc
469 | 94 547 _m
470 | 184 547 _l
471 | 184 0 _l
472 | 94 0 _l
473 | 94 547 _l
474 | 94 760 _m
475 | 184 760 _l
476 | 184 646 _l
477 | 94 646 _l
478 | 94 760 _l
479 | _cl}_d
480 | /k{579 0 91 0 576 760 _sc
481 | 91 760 _m
482 | 181 760 _l
483 | 181 311 _l
484 | 449 547 _l
485 | 564 547 _l
486 | 274 291 _l
487 | 576 0 _l
488 | 459 0 _l
489 | 181 267 _l
490 | 181 0 _l
491 | 91 0 _l
492 | 91 760 _l
493 | _cl}_d
494 | /l{278 0 94 0 184 760 _sc
495 | 94 760 _m
496 | 184 760 _l
497 | 184 0 _l
498 | 94 0 _l
499 | 94 760 _l
500 | _cl}_d
501 | /m{{974 0 91 0 889 560 _sc
502 | 520 442 _m
503 | 542 482 569 511 600 531 _c
504 | 631 550 668 560 711 560 _c
505 | 767 560 811 540 842 500 _c
506 | 873 460 889 403 889 330 _c
507 | 889 0 _l
508 | 799 0 _l
509 | 799 327 _l
510 | 799 379 789 418 771 444 _c
511 | 752 469 724 482 686 482 _c
512 | 639 482 602 466 575 435 _c
513 | 548 404 535 362 535 309 _c
514 | 535 0 _l
515 | 445 0 _l
516 | 445 327 _l
517 | 445 379 435 418 417 444 _c
518 | 398 469 369 482 331 482 _c
519 | }_e{285 482 248 466 221 435 _c
520 | 194 404 181 362 181 309 _c
521 | 181 0 _l
522 | 91 0 _l
523 | 91 547 _l
524 | 181 547 _l
525 | 181 462 _l
526 | 201 495 226 520 255 536 _c
527 | 283 552 317 560 357 560 _c
528 | 397 560 430 550 458 530 _c
529 | 486 510 506 480 520 442 _c
530 | _cl}_e}_d
531 | /n{634 0 91 0 549 560 _sc
532 | 549 330 _m
533 | 549 0 _l
534 | 459 0 _l
535 | 459 327 _l
536 | 459 379 448 417 428 443 _c
537 | 408 469 378 482 338 482 _c
538 | 289 482 251 466 223 435 _c
539 | 195 404 181 362 181 309 _c
540 | 181 0 _l
541 | 91 0 _l
542 | 91 547 _l
543 | 181 547 _l
544 | 181 462 _l
545 | 202 494 227 519 257 535 _c
546 | 286 551 320 560 358 560 _c
547 | 420 560 468 540 500 501 _c
548 | 532 462 549 405 549 330 _c
549 | _cl}_d
550 | /o{612 0 55 -13 557 560 _sc
551 | 306 484 _m
552 | 258 484 220 465 192 427 _c
553 | 164 389 150 338 150 273 _c
554 | 150 207 163 156 191 118 _c
555 | 219 80 257 62 306 62 _c
556 | 354 62 392 80 420 118 _c
557 | 448 156 462 207 462 273 _c
558 | 462 337 448 389 420 427 _c
559 | 392 465 354 484 306 484 _c
560 | 306 560 _m
561 | 384 560 445 534 490 484 _c
562 | 534 433 557 363 557 273 _c
563 | 557 183 534 113 490 63 _c
564 | 445 12 384 -13 306 -13 _c
565 | 227 -13 165 12 121 63 _c
566 | 77 113 55 183 55 273 _c
567 | 55 363 77 433 121 484 _c
568 | 165 534 227 560 306 560 _c
569 | _cl}_d
570 | /p{{635 0 91 -207 580 560 _sc
571 | 181 82 _m
572 | 181 -207 _l
573 | 91 -207 _l
574 | 91 547 _l
575 | 181 547 _l
576 | 181 464 _l
577 | 199 496 223 520 252 536 _c
578 | 281 552 316 560 356 560 _c
579 | 422 560 476 533 518 481 _c
580 | 559 428 580 359 580 273 _c
581 | 580 187 559 117 518 65 _c
582 | 476 13 422 -13 356 -13 _c
583 | 316 -13 281 -5 252 10 _c
584 | 223 25 199 49 181 82 _c
585 | 487 273 _m
586 | 487 339 473 390 446 428 _c
587 | 418 466 381 485 334 485 _c
588 | }_e{286 485 249 466 222 428 _c
589 | 194 390 181 339 181 273 _c
590 | 181 207 194 155 222 117 _c
591 | 249 79 286 61 334 61 _c
592 | 381 61 418 79 446 117 _c
593 | 473 155 487 207 487 273 _c
594 | _cl}_e}_d
595 | /r{411 0 91 0 411 560 _sc
596 | 411 463 _m
597 | 401 469 390 473 378 476 _c
598 | 366 478 353 480 339 480 _c
599 | 288 480 249 463 222 430 _c
600 | 194 397 181 350 181 288 _c
601 | 181 0 _l
602 | 91 0 _l
603 | 91 547 _l
604 | 181 547 _l
605 | 181 462 _l
606 | 199 495 224 520 254 536 _c
607 | 284 552 321 560 365 560 _c
608 | 371 560 378 559 386 559 _c
609 | 393 558 401 557 411 555 _c
610 | 411 463 _l
611 | _cl}_d
612 | /s{{521 0 54 -13 472 560 _sc
613 | 443 531 _m
614 | 443 446 _l
615 | 417 458 391 468 364 475 _c
616 | 336 481 308 485 279 485 _c
617 | 234 485 200 478 178 464 _c
618 | 156 450 145 430 145 403 _c
619 | 145 382 153 366 169 354 _c
620 | 185 342 217 330 265 320 _c
621 | 296 313 _l
622 | 360 299 405 279 432 255 _c
623 | 458 230 472 195 472 151 _c
624 | 472 100 452 60 412 31 _c
625 | 372 1 316 -13 246 -13 _c
626 | 216 -13 186 -10 154 -5 _c
627 | }_e{122 0 89 8 54 20 _c
628 | 54 113 _l
629 | 87 95 120 82 152 74 _c
630 | 184 65 216 61 248 61 _c
631 | 290 61 323 68 346 82 _c
632 | 368 96 380 117 380 144 _c
633 | 380 168 371 187 355 200 _c
634 | 339 213 303 226 247 238 _c
635 | 216 245 _l
636 | 160 257 119 275 95 299 _c
637 | 70 323 58 356 58 399 _c
638 | 58 450 76 490 112 518 _c
639 | 148 546 200 560 268 560 _c
640 | 301 560 332 557 362 552 _c
641 | 391 547 418 540 443 531 _c
642 | }_e{_cl}_e}_d
643 | /t{392 0 27 0 368 702 _sc
644 | 183 702 _m
645 | 183 547 _l
646 | 368 547 _l
647 | 368 477 _l
648 | 183 477 _l
649 | 183 180 _l
650 | 183 135 189 106 201 94 _c
651 | 213 81 238 75 276 75 _c
652 | 368 75 _l
653 | 368 0 _l
654 | 276 0 _l
655 | 206 0 158 13 132 39 _c
656 | 106 65 93 112 93 180 _c
657 | 93 477 _l
658 | 27 477 _l
659 | 27 547 _l
660 | 93 547 _l
661 | 93 702 _l
662 | 183 702 _l
663 | _cl}_d
664 | /u{634 0 85 -13 543 547 _sc
665 | 85 216 _m
666 | 85 547 _l
667 | 175 547 _l
668 | 175 219 _l
669 | 175 167 185 129 205 103 _c
670 | 225 77 255 64 296 64 _c
671 | 344 64 383 79 411 110 _c
672 | 439 141 453 183 453 237 _c
673 | 453 547 _l
674 | 543 547 _l
675 | 543 0 _l
676 | 453 0 _l
677 | 453 84 _l
678 | 431 50 405 26 377 10 _c
679 | 348 -5 315 -13 277 -13 _c
680 | 214 -13 166 6 134 45 _c
681 | 101 83 85 140 85 216 _c
682 | _cl}_d
683 | /w{818 0 42 0 776 547 _sc
684 | 42 547 _m
685 | 132 547 _l
686 | 244 120 _l
687 | 356 547 _l
688 | 462 547 _l
689 | 574 120 _l
690 | 686 547 _l
691 | 776 547 _l
692 | 633 0 _l
693 | 527 0 _l
694 | 409 448 _l
695 | 291 0 _l
696 | 185 0 _l
697 | 42 547 _l
698 | _cl}_d
699 | /y{592 0 30 -207 562 547 _sc
700 | 322 -50 _m
701 | 296 -114 271 -157 247 -177 _c
702 | 223 -197 191 -207 151 -207 _c
703 | 79 -207 _l
704 | 79 -132 _l
705 | 132 -132 _l
706 | 156 -132 175 -126 189 -114 _c
707 | 203 -102 218 -75 235 -31 _c
708 | 251 9 _l
709 | 30 547 _l
710 | 125 547 _l
711 | 296 119 _l
712 | 467 547 _l
713 | 562 547 _l
714 | 322 -50 _l
715 | _cl}_d
716 | end readonly def
717 |
718 | /BuildGlyph
719 | {exch begin
720 | CharStrings exch
721 | 2 copy known not{pop /.notdef}if
722 | true 3 1 roll get exec
723 | end}_d
724 |
725 | /BuildChar {
726 | 1 index /Encoding get exch get
727 | 1 index /BuildGlyph get exec
728 | }_d
729 |
730 | FontName currentdict end definefont pop
731 | end
732 | %%EndProlog
733 | mpldict begin
734 | -54 180 translate
735 | 720 432 0 0 clipbox
736 | gsave
737 | 0 0 m
738 | 720 0 l
739 | 720 432 l
740 | 0 432 l
741 | cl
742 | 1.000 setgray
743 | fill
744 | grestore
745 | gsave
746 | 90 54 m
747 | 648 54 l
748 | 648 388.8 l
749 | 90 388.8 l
750 | cl
751 | 1.000 setgray
752 | fill
753 | grestore
754 | 1.000 setlinewidth
755 | 0 setlinejoin
756 | 0 setlinecap
757 | [] 0 setdash
758 | 0.000 setgray
759 | gsave
760 | 558 334.8 90 54 clipbox
761 | 114.412 54 m
762 | 163.237 54 l
763 | 163.237 58.6481 l
764 | 114.412 58.6481 l
765 | cl
766 | gsave
767 | 0.000 0.500 0.000 setrgbcolor
768 | fill
769 | grestore
770 | stroke
771 | grestore
772 | gsave
773 | 558 334.8 90 54 clipbox
774 | 253.912 54 m
775 | 302.737 54 l
776 | 302.737 62.2584 l
777 | 253.912 62.2584 l
778 | cl
779 | gsave
780 | 0.000 0.500 0.000 setrgbcolor
781 | fill
782 | grestore
783 | stroke
784 | grestore
785 | gsave
786 | 558 334.8 90 54 clipbox
787 | 393.412 54 m
788 | 442.237 54 l
789 | 442.237 93.7296 l
790 | 393.412 93.7296 l
791 | cl
792 | gsave
793 | 0.000 0.500 0.000 setrgbcolor
794 | fill
795 | grestore
796 | stroke
797 | grestore
798 | gsave
799 | 558 334.8 90 54 clipbox
800 | 532.912 54 m
801 | 581.737 54 l
802 | 581.737 364.973 l
803 | 532.912 364.973 l
804 | cl
805 | gsave
806 | 0.000 0.500 0.000 setrgbcolor
807 | fill
808 | grestore
809 | stroke
810 | grestore
811 | gsave
812 | 558 334.8 90 54 clipbox
813 | 163.237 54 m
814 | 212.062 54 l
815 | 212.062 58.3133 l
816 | 163.237 58.3133 l
817 | cl
818 | gsave
819 | 0.000 0.000 1.000 setrgbcolor
820 | fill
821 | grestore
822 | stroke
823 | grestore
824 | gsave
825 | 558 334.8 90 54 clipbox
826 | 302.738 54 m
827 | 351.562 54 l
828 | 351.562 59.0778 l
829 | 302.738 59.0778 l
830 | cl
831 | gsave
832 | 0.000 0.000 1.000 setrgbcolor
833 | fill
834 | grestore
835 | stroke
836 | grestore
837 | gsave
838 | 558 334.8 90 54 clipbox
839 | 442.238 54 m
840 | 491.062 54 l
841 | 491.062 60.1994 l
842 | 442.238 60.1994 l
843 | cl
844 | gsave
845 | 0.000 0.000 1.000 setrgbcolor
846 | fill
847 | grestore
848 | stroke
849 | grestore
850 | gsave
851 | 558 334.8 90 54 clipbox
852 | 581.737 54 m
853 | 630.562 54 l
854 | 630.562 69.8249 l
855 | 581.737 69.8249 l
856 | cl
857 | gsave
858 | 0.000 0.000 1.000 setrgbcolor
859 | fill
860 | grestore
861 | stroke
862 | grestore
863 | 2 setlinecap
864 | gsave
865 | 648 54 m
866 | 648 388.8 l
867 | stroke
868 | grestore
869 | gsave
870 | 90 388.8 m
871 | 648 388.8 l
872 | stroke
873 | grestore
874 | gsave
875 | 90 54 m
876 | 90 388.8 l
877 | stroke
878 | grestore
879 | gsave
880 | 90 54 m
881 | 648 54 l
882 | stroke
883 | grestore
884 | 0.500 setlinewidth
885 | 1 setlinejoin
886 | 0 setlinecap
887 | [1 3] 0 setdash
888 | gsave
889 | 558 334.8 90 54 clipbox
890 | 163.237 54 m
891 | 163.237 388.8 l
892 | stroke
893 | grestore
894 | [] 0 setdash
895 | gsave
896 | /o {
897 | gsave
898 | newpath
899 | translate
900 | 0.5 setlinewidth
901 | 1 setlinejoin
902 | 0 setlinecap
903 | 0 0 m
904 | 0 4 l
905 | gsave
906 | 0.000 setgray
907 | fill
908 | grestore
909 | stroke
910 | grestore
911 | } bind def
912 | 163.237 54 o
913 | grestore
914 | gsave
915 | /o {
916 | gsave
917 | newpath
918 | translate
919 | 0.5 setlinewidth
920 | 1 setlinejoin
921 | 0 setlinecap
922 | 0 0 m
923 | 0 -4 l
924 | gsave
925 | 0.000 setgray
926 | fill
927 | grestore
928 | stroke
929 | grestore
930 | } bind def
931 | 163.237 388.8 o
932 | grestore
933 | /BitstreamVeraSans-Roman findfont
934 | 15.000 scalefont
935 | setfont
936 | gsave
937 | 159.987500 38.609375 translate
938 | 0.000000 rotate
939 | 0.000000 0.000000 m /one glyphshow
940 | grestore
941 | [1 3] 0 setdash
942 | gsave
943 | 558 334.8 90 54 clipbox
944 | 302.738 54 m
945 | 302.738 388.8 l
946 | stroke
947 | grestore
948 | [] 0 setdash
949 | gsave
950 | /o {
951 | gsave
952 | newpath
953 | translate
954 | 0.5 setlinewidth
955 | 1 setlinejoin
956 | 0 setlinecap
957 | 0 0 m
958 | 0 4 l
959 | gsave
960 | 0.000 setgray
961 | fill
962 | grestore
963 | stroke
964 | grestore
965 | } bind def
966 | 302.738 54 o
967 | grestore
968 | gsave
969 | /o {
970 | gsave
971 | newpath
972 | translate
973 | 0.5 setlinewidth
974 | 1 setlinejoin
975 | 0 setlinecap
976 | 0 0 m
977 | 0 -4 l
978 | gsave
979 | 0.000 setgray
980 | fill
981 | grestore
982 | stroke
983 | grestore
984 | } bind def
985 | 302.738 388.8 o
986 | grestore
987 | gsave
988 | 294.518750 38.609375 translate
989 | 0.000000 rotate
990 | 0.000000 0.000000 m /one glyphshow
991 | 9.543457 0.000000 m /zero glyphshow
992 | grestore
993 | [1 3] 0 setdash
994 | gsave
995 | 558 334.8 90 54 clipbox
996 | 442.238 54 m
997 | 442.238 388.8 l
998 | stroke
999 | grestore
1000 | [] 0 setdash
1001 | gsave
1002 | /o {
1003 | gsave
1004 | newpath
1005 | translate
1006 | 0.5 setlinewidth
1007 | 1 setlinejoin
1008 | 0 setlinecap
1009 | 0 0 m
1010 | 0 4 l
1011 | gsave
1012 | 0.000 setgray
1013 | fill
1014 | grestore
1015 | stroke
1016 | grestore
1017 | } bind def
1018 | 442.238 54 o
1019 | grestore
1020 | gsave
1021 | /o {
1022 | gsave
1023 | newpath
1024 | translate
1025 | 0.5 setlinewidth
1026 | 1 setlinejoin
1027 | 0 setlinecap
1028 | 0 0 m
1029 | 0 -4 l
1030 | gsave
1031 | 0.000 setgray
1032 | fill
1033 | grestore
1034 | stroke
1035 | grestore
1036 | } bind def
1037 | 442.238 388.8 o
1038 | grestore
1039 | gsave
1040 | 429.245313 38.609375 translate
1041 | 0.000000 rotate
1042 | 0.000000 0.000000 m /one glyphshow
1043 | 9.543457 0.000000 m /zero glyphshow
1044 | 19.086914 0.000000 m /zero glyphshow
1045 | grestore
1046 | [1 3] 0 setdash
1047 | gsave
1048 | 558 334.8 90 54 clipbox
1049 | 581.737 54 m
1050 | 581.737 388.8 l
1051 | stroke
1052 | grestore
1053 | [] 0 setdash
1054 | gsave
1055 | /o {
1056 | gsave
1057 | newpath
1058 | translate
1059 | 0.5 setlinewidth
1060 | 1 setlinejoin
1061 | 0 setlinecap
1062 | 0 0 m
1063 | 0 4 l
1064 | gsave
1065 | 0.000 setgray
1066 | fill
1067 | grestore
1068 | stroke
1069 | grestore
1070 | } bind def
1071 | 581.737 54 o
1072 | grestore
1073 | gsave
1074 | /o {
1075 | gsave
1076 | newpath
1077 | translate
1078 | 0.5 setlinewidth
1079 | 1 setlinejoin
1080 | 0 setlinecap
1081 | 0 0 m
1082 | 0 -4 l
1083 | gsave
1084 | 0.000 setgray
1085 | fill
1086 | grestore
1087 | stroke
1088 | grestore
1089 | } bind def
1090 | 581.737 388.8 o
1091 | grestore
1092 | gsave
1093 | 563.971875 38.609375 translate
1094 | 0.000000 rotate
1095 | 0.000000 0.000000 m /one glyphshow
1096 | 9.543457 0.000000 m /zero glyphshow
1097 | 19.086914 0.000000 m /zero glyphshow
1098 | 28.630371 0.000000 m /zero glyphshow
1099 | grestore
1100 | gsave
1101 | 311.906250 19.093750 translate
1102 | 0.000000 rotate
1103 | 0.000000 0.000000 m /N glyphshow
1104 | 11.220703 0.000000 m /u glyphshow
1105 | 20.727539 0.000000 m /m glyphshow
1106 | 35.339355 0.000000 m /b glyphshow
1107 | 44.860840 0.000000 m /e glyphshow
1108 | 54.089355 0.000000 m /r glyphshow
1109 | 60.256348 0.000000 m /space glyphshow
1110 | 65.024414 0.000000 m /o glyphshow
1111 | 74.201660 0.000000 m /f glyphshow
1112 | 79.482422 0.000000 m /space glyphshow
1113 | 84.250488 0.000000 m /f glyphshow
1114 | 89.531250 0.000000 m /i glyphshow
1115 | 93.698730 0.000000 m /l glyphshow
1116 | 97.866211 0.000000 m /e glyphshow
1117 | 107.094727 0.000000 m /s glyphshow
1118 | grestore
1119 | [1 3] 0 setdash
1120 | gsave
1121 | 558 334.8 90 54 clipbox
1122 | 90 54 m
1123 | 648 54 l
1124 | stroke
1125 | grestore
1126 | [] 0 setdash
1127 | gsave
1128 | /o {
1129 | gsave
1130 | newpath
1131 | translate
1132 | 0.5 setlinewidth
1133 | 1 setlinejoin
1134 | 0 setlinecap
1135 | 0 0 m
1136 | 4 0 l
1137 | gsave
1138 | 0.000 setgray
1139 | fill
1140 | grestore
1141 | stroke
1142 | grestore
1143 | } bind def
1144 | 90 54 o
1145 | grestore
1146 | gsave
1147 | /o {
1148 | gsave
1149 | newpath
1150 | translate
1151 | 0.5 setlinewidth
1152 | 1 setlinejoin
1153 | 0 setlinecap
1154 | 0 0 m
1155 | -4 0 l
1156 | gsave
1157 | 0.000 setgray
1158 | fill
1159 | grestore
1160 | stroke
1161 | grestore
1162 | } bind def
1163 | 648 54 o
1164 | grestore
1165 | gsave
1166 | 78.437500 49.867188 translate
1167 | 0.000000 rotate
1168 | 0.000000 0.000000 m /zero glyphshow
1169 | grestore
1170 | [1 3] 0 setdash
1171 | gsave
1172 | 558 334.8 90 54 clipbox
1173 | 90 109.8 m
1174 | 648 109.8 l
1175 | stroke
1176 | grestore
1177 | [] 0 setdash
1178 | gsave
1179 | /o {
1180 | gsave
1181 | newpath
1182 | translate
1183 | 0.5 setlinewidth
1184 | 1 setlinejoin
1185 | 0 setlinecap
1186 | 0 0 m
1187 | 4 0 l
1188 | gsave
1189 | 0.000 setgray
1190 | fill
1191 | grestore
1192 | stroke
1193 | grestore
1194 | } bind def
1195 | 90 109.8 o
1196 | grestore
1197 | gsave
1198 | /o {
1199 | gsave
1200 | newpath
1201 | translate
1202 | 0.5 setlinewidth
1203 | 1 setlinejoin
1204 | 0 setlinecap
1205 | 0 0 m
1206 | -4 0 l
1207 | gsave
1208 | 0.000 setgray
1209 | fill
1210 | grestore
1211 | stroke
1212 | grestore
1213 | } bind def
1214 | 648 109.8 o
1215 | grestore
1216 | gsave
1217 | 69.562500 105.667187 translate
1218 | 0.000000 rotate
1219 | 0.000000 0.000000 m /one glyphshow
1220 | 9.543457 0.000000 m /zero glyphshow
1221 | grestore
1222 | [1 3] 0 setdash
1223 | gsave
1224 | 558 334.8 90 54 clipbox
1225 | 90 165.6 m
1226 | 648 165.6 l
1227 | stroke
1228 | grestore
1229 | [] 0 setdash
1230 | gsave
1231 | /o {
1232 | gsave
1233 | newpath
1234 | translate
1235 | 0.5 setlinewidth
1236 | 1 setlinejoin
1237 | 0 setlinecap
1238 | 0 0 m
1239 | 4 0 l
1240 | gsave
1241 | 0.000 setgray
1242 | fill
1243 | grestore
1244 | stroke
1245 | grestore
1246 | } bind def
1247 | 90 165.6 o
1248 | grestore
1249 | gsave
1250 | /o {
1251 | gsave
1252 | newpath
1253 | translate
1254 | 0.5 setlinewidth
1255 | 1 setlinejoin
1256 | 0 setlinecap
1257 | 0 0 m
1258 | -4 0 l
1259 | gsave
1260 | 0.000 setgray
1261 | fill
1262 | grestore
1263 | stroke
1264 | grestore
1265 | } bind def
1266 | 648 165.6 o
1267 | grestore
1268 | gsave
1269 | 69.000000 161.467187 translate
1270 | 0.000000 rotate
1271 | 0.000000 0.000000 m /two glyphshow
1272 | 9.543457 0.000000 m /zero glyphshow
1273 | grestore
1274 | [1 3] 0 setdash
1275 | gsave
1276 | 558 334.8 90 54 clipbox
1277 | 90 221.4 m
1278 | 648 221.4 l
1279 | stroke
1280 | grestore
1281 | [] 0 setdash
1282 | gsave
1283 | /o {
1284 | gsave
1285 | newpath
1286 | translate
1287 | 0.5 setlinewidth
1288 | 1 setlinejoin
1289 | 0 setlinecap
1290 | 0 0 m
1291 | 4 0 l
1292 | gsave
1293 | 0.000 setgray
1294 | fill
1295 | grestore
1296 | stroke
1297 | grestore
1298 | } bind def
1299 | 90 221.4 o
1300 | grestore
1301 | gsave
1302 | /o {
1303 | gsave
1304 | newpath
1305 | translate
1306 | 0.5 setlinewidth
1307 | 1 setlinejoin
1308 | 0 setlinecap
1309 | 0 0 m
1310 | -4 0 l
1311 | gsave
1312 | 0.000 setgray
1313 | fill
1314 | grestore
1315 | stroke
1316 | grestore
1317 | } bind def
1318 | 648 221.4 o
1319 | grestore
1320 | gsave
1321 | 69.046875 217.267188 translate
1322 | 0.000000 rotate
1323 | 0.000000 0.000000 m /three glyphshow
1324 | 9.543457 0.000000 m /zero glyphshow
1325 | grestore
1326 | [1 3] 0 setdash
1327 | gsave
1328 | 558 334.8 90 54 clipbox
1329 | 90 277.2 m
1330 | 648 277.2 l
1331 | stroke
1332 | grestore
1333 | [] 0 setdash
1334 | gsave
1335 | /o {
1336 | gsave
1337 | newpath
1338 | translate
1339 | 0.5 setlinewidth
1340 | 1 setlinejoin
1341 | 0 setlinecap
1342 | 0 0 m
1343 | 4 0 l
1344 | gsave
1345 | 0.000 setgray
1346 | fill
1347 | grestore
1348 | stroke
1349 | grestore
1350 | } bind def
1351 | 90 277.2 o
1352 | grestore
1353 | gsave
1354 | /o {
1355 | gsave
1356 | newpath
1357 | translate
1358 | 0.5 setlinewidth
1359 | 1 setlinejoin
1360 | 0 setlinecap
1361 | 0 0 m
1362 | -4 0 l
1363 | gsave
1364 | 0.000 setgray
1365 | fill
1366 | grestore
1367 | stroke
1368 | grestore
1369 | } bind def
1370 | 648 277.2 o
1371 | grestore
1372 | gsave
1373 | 68.640625 273.067187 translate
1374 | 0.000000 rotate
1375 | 0.000000 0.000000 m /four glyphshow
1376 | 9.543457 0.000000 m /zero glyphshow
1377 | grestore
1378 | [1 3] 0 setdash
1379 | gsave
1380 | 558 334.8 90 54 clipbox
1381 | 90 333 m
1382 | 648 333 l
1383 | stroke
1384 | grestore
1385 | [] 0 setdash
1386 | gsave
1387 | /o {
1388 | gsave
1389 | newpath
1390 | translate
1391 | 0.5 setlinewidth
1392 | 1 setlinejoin
1393 | 0 setlinecap
1394 | 0 0 m
1395 | 4 0 l
1396 | gsave
1397 | 0.000 setgray
1398 | fill
1399 | grestore
1400 | stroke
1401 | grestore
1402 | } bind def
1403 | 90 333 o
1404 | grestore
1405 | gsave
1406 | /o {
1407 | gsave
1408 | newpath
1409 | translate
1410 | 0.5 setlinewidth
1411 | 1 setlinejoin
1412 | 0 setlinecap
1413 | 0 0 m
1414 | -4 0 l
1415 | gsave
1416 | 0.000 setgray
1417 | fill
1418 | grestore
1419 | stroke
1420 | grestore
1421 | } bind def
1422 | 648 333 o
1423 | grestore
1424 | gsave
1425 | 69.062500 328.867188 translate
1426 | 0.000000 rotate
1427 | 0.000000 0.000000 m /five glyphshow
1428 | 9.543457 0.000000 m /zero glyphshow
1429 | grestore
1430 | [1 3] 0 setdash
1431 | gsave
1432 | 558 334.8 90 54 clipbox
1433 | 90 388.8 m
1434 | 648 388.8 l
1435 | stroke
1436 | grestore
1437 | [] 0 setdash
1438 | gsave
1439 | /o {
1440 | gsave
1441 | newpath
1442 | translate
1443 | 0.5 setlinewidth
1444 | 1 setlinejoin
1445 | 0 setlinecap
1446 | 0 0 m
1447 | 4 0 l
1448 | gsave
1449 | 0.000 setgray
1450 | fill
1451 | grestore
1452 | stroke
1453 | grestore
1454 | } bind def
1455 | 90 388.8 o
1456 | grestore
1457 | gsave
1458 | /o {
1459 | gsave
1460 | newpath
1461 | translate
1462 | 0.5 setlinewidth
1463 | 1 setlinejoin
1464 | 0 setlinecap
1465 | 0 0 m
1466 | -4 0 l
1467 | gsave
1468 | 0.000 setgray
1469 | fill
1470 | grestore
1471 | stroke
1472 | grestore
1473 | } bind def
1474 | 648 388.8 o
1475 | grestore
1476 | gsave
1477 | 68.953125 384.667188 translate
1478 | 0.000000 rotate
1479 | 0.000000 0.000000 m /six glyphshow
1480 | 9.543457 0.000000 m /zero glyphshow
1481 | grestore
1482 | gsave
1483 | 60.515625 190.751563 translate
1484 | 90.000000 rotate
1485 | 0.000000 0.000000 m /S glyphshow
1486 | 9.521484 0.000000 m /e glyphshow
1487 | 18.750000 0.000000 m /c glyphshow
1488 | 26.997070 0.000000 m /o glyphshow
1489 | 36.174316 0.000000 m /n glyphshow
1490 | 45.681152 0.000000 m /d glyphshow
1491 | 55.202637 0.000000 m /s glyphshow
1492 | grestore
1493 | /BitstreamVeraSans-Roman findfont
1494 | 18.000 scalefont
1495 | setfont
1496 | gsave
1497 | 161.210938 393.800000 translate
1498 | 0.000000 rotate
1499 | 0.000000 0.000000 m /H glyphshow
1500 | 13.535156 0.000000 m /a glyphshow
1501 | 24.565430 0.000000 m /y glyphshow
1502 | 35.217773 0.000000 m /a glyphshow
1503 | 46.248047 0.000000 m /b glyphshow
1504 | 57.673828 0.000000 m /u glyphshow
1505 | 69.082031 0.000000 m /s glyphshow
1506 | 78.459961 0.000000 m /a glyphshow
1507 | 89.490234 0.000000 m /space glyphshow
1508 | 95.211914 0.000000 m /a glyphshow
1509 | 106.242188 0.000000 m /n glyphshow
1510 | 117.650391 0.000000 m /d glyphshow
1511 | 129.076172 0.000000 m /space glyphshow
1512 | 134.797852 0.000000 m /S glyphshow
1513 | 146.223633 0.000000 m /p glyphshow
1514 | 157.649414 0.000000 m /a glyphshow
1515 | 168.679688 0.000000 m /r glyphshow
1516 | 176.080078 0.000000 m /k glyphshow
1517 | 186.503906 0.000000 m /space glyphshow
1518 | 192.225586 0.000000 m /t glyphshow
1519 | 199.283203 0.000000 m /o glyphshow
1520 | 210.295898 0.000000 m /space glyphshow
1521 | 216.017578 0.000000 m /p glyphshow
1522 | 227.443359 0.000000 m /i glyphshow
1523 | 232.444336 0.000000 m /c glyphshow
1524 | 242.340820 0.000000 m /k glyphshow
1525 | 252.764648 0.000000 m /space glyphshow
1526 | 258.486328 0.000000 m /u glyphshow
1527 | 269.894531 0.000000 m /p glyphshow
1528 | 281.320312 0.000000 m /space glyphshow
1529 | 287.041992 0.000000 m /k glyphshow
1530 | 296.840820 0.000000 m /e glyphshow
1531 | 307.915039 0.000000 m /y glyphshow
1532 | 318.567383 0.000000 m /w glyphshow
1533 | 333.289062 0.000000 m /o glyphshow
1534 | 344.301758 0.000000 m /r glyphshow
1535 | 351.327148 0.000000 m /d glyphshow
1536 | 362.752930 0.000000 m /space glyphshow
1537 | 368.474609 0.000000 m /quotedbl glyphshow
1538 | 376.753906 0.000000 m /n glyphshow
1539 | 388.162109 0.000000 m /o glyphshow
1540 | 399.174805 0.000000 m /c glyphshow
1541 | 409.071289 0.000000 m /quotedbl glyphshow
1542 | grestore
1543 | 1.000 setlinewidth
1544 | 0 setlinejoin
1545 | gsave
1546 | 99 321.556 m
1547 | 363.862 321.556 l
1548 | 363.862 379.8 l
1549 | 99 379.8 l
1550 | cl
1551 | gsave
1552 | 1.000 setgray
1553 | fill
1554 | grestore
1555 | stroke
1556 | grestore
1557 | gsave
1558 | 106.2 358.928 m
1559 | 142.2 358.928 l
1560 | 142.2 371.528 l
1561 | 106.2 371.528 l
1562 | cl
1563 | gsave
1564 | 0.000 0.000 1.000 setrgbcolor
1565 | fill
1566 | grestore
1567 | stroke
1568 | grestore
1569 | gsave
1570 | 156.600000 358.928125 translate
1571 | 0.000000 rotate
1572 | 0.000000 0.000000 m /H glyphshow
1573 | 13.535156 0.000000 m /a glyphshow
1574 | 24.565430 0.000000 m /y glyphshow
1575 | 35.217773 0.000000 m /a glyphshow
1576 | 46.248047 0.000000 m /b glyphshow
1577 | 57.673828 0.000000 m /u glyphshow
1578 | 69.082031 0.000000 m /s glyphshow
1579 | 78.459961 0.000000 m /a glyphshow
1580 | 89.490234 0.000000 m /parenleft glyphshow
1581 | 96.512695 0.000000 m /s glyphshow
1582 | 105.890625 0.000000 m /t glyphshow
1583 | 112.948242 0.000000 m /a glyphshow
1584 | 123.978516 0.000000 m /n glyphshow
1585 | 135.386719 0.000000 m /d glyphshow
1586 | 146.812500 0.000000 m /a glyphshow
1587 | 157.842773 0.000000 m /l glyphshow
1588 | 162.843750 0.000000 m /o glyphshow
1589 | 173.856445 0.000000 m /n glyphshow
1590 | 185.264648 0.000000 m /e glyphshow
1591 | 196.338867 0.000000 m /parenright glyphshow
1592 | grestore
1593 | gsave
1594 | 106.2 332.506 m
1595 | 142.2 332.506 l
1596 | 142.2 345.106 l
1597 | 106.2 345.106 l
1598 | cl
1599 | gsave
1600 | 0.000 0.500 0.000 setrgbcolor
1601 | fill
1602 | grestore
1603 | stroke
1604 | grestore
1605 | gsave
1606 | 156.600000 332.506250 translate
1607 | 0.000000 rotate
1608 | 0.000000 0.000000 m /S glyphshow
1609 | 11.425781 0.000000 m /p glyphshow
1610 | 22.851562 0.000000 m /a glyphshow
1611 | 33.881836 0.000000 m /r glyphshow
1612 | 41.282227 0.000000 m /k glyphshow
1613 | 51.706055 0.000000 m /parenleft glyphshow
1614 | 58.728516 0.000000 m /d glyphshow
1615 | 70.154297 0.000000 m /i glyphshow
1616 | 75.155273 0.000000 m /s glyphshow
1617 | 84.533203 0.000000 m /t glyphshow
1618 | 91.590820 0.000000 m /r glyphshow
1619 | 98.991211 0.000000 m /i glyphshow
1620 | 103.992188 0.000000 m /b glyphshow
1621 | 115.417969 0.000000 m /u glyphshow
1622 | 126.826172 0.000000 m /t glyphshow
1623 | 133.883789 0.000000 m /e glyphshow
1624 | 144.958008 0.000000 m /d glyphshow
1625 | 156.383789 0.000000 m /parenright glyphshow
1626 | grestore
1627 |
1628 | end
1629 | showpage
1630 |
--------------------------------------------------------------------------------
/presentation/was/was.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hirolovesbeer/hayabusa/d6ecea2ac1d624f4a3fabbbfb5ee265cf48f4a02/presentation/was/was.pdf
--------------------------------------------------------------------------------
/presentation/was/was.tex:
--------------------------------------------------------------------------------
1 | \documentclass[twocolumn,10pt]{jarticle}
2 | \usepackage[top=5truemm,bottom=15truemm,left=15truemm,right=15truemm]{geometry}
3 | \usepackage[dvipdfmx]{graphicx}
4 | \usepackage{ascmac}
5 | %\setlength{\columnsep}{3zw}
6 | \title{高速なログ検索エンジンHayabusaについて}
7 | \author{あべひろし (@hirolovesbeer)}
8 | \date{2017/12/20}
9 | %%%%%% TEXT START %%%%%%
10 |
11 | \begin{document}
12 | \maketitle
13 | \thispagestyle{empty}
14 |
15 | \section{背景と目的}
16 | ネットワークのトラブルシューティングやセキュリティインシデントに対応するため,
17 | ネットワーク管理者はトラブルの原因を特定するためにサーバやネットワーク,セキュリティ機器から出力されるログを蓄積し,検索をすることがある.
18 | 大規模なネットワークでは,出力されるログの量も多く蓄積・検索システムの規模も巨大化する.
19 | 大量に出力される機器のログを高速に蓄積し,高速に検索するシステムとしてHayabusa\cite{hayabusa}を実装した.
20 |
21 |
22 | \section{Hayabusaのアーキテクチャ}
23 | %Hayabusa\cite{hayabusa}は,Interop Tokyoで収集された大量のsyslogを高速に検索するためのシステムとして設計された.
24 | Hayabusaはオープンソースソフトウェアとして実装され,GitHub上で公開されている(https://github.com/hirolovesbeer/hayabusaa).
25 | 図 \ref{fig:hayabusa-arch} にHayabusaのアーキテクチャを示す.
26 | \begin{figure}[h]
27 | \centering
28 | \includegraphics[width=85mm]{./pictures/hayabusa-arch.eps}
29 | \caption{Hayabusaのアーキテクチャ}
30 | \label{fig:hayabusa-arch}
31 | \end{figure}
32 |
33 | Hayabusaはスタンドアロンサーバで動作し,CPUのマルチコアを有効に使い高速な並列検索処理を実現する.
34 | Hayabusaは大きくStoreEngineとSearchEngineの2つに分けられる.
35 | StoreEngineはcronにより1分毎に起動され,ターゲットとなるログファイルを開きログメッセージをSQLite3ファイルへと変換する.
36 | %ログデータは1分ごとのSQLite3ファイルへと分割され,検索時に複数プロセスにより並列処理される.
37 | %ログが保存されるディレクトリは以下の様に時間を意味する階層として定義される.
38 | %\begin{screen}
39 | %\begin{verbatim}
40 | %/targetdir/yyyy/mm/dd/hh/min.db
41 | %\end{verbatim}
42 | %\end{screen}
43 | %そのためログ検索のための時間情報をデータベース内部に保持することなくディレクトリとのマッチングで行うことができ,
44 | %時間のクエリ条件を指定することなく時間指定のログが検索可能になる.
45 | ログが保存されるSQLite3ファイルはFTS(Full Text Search)と呼ばれる全文検索に特化したテーブルとして作成され高速なログ検索を実現する.
46 |
47 | SearchEngineは,並列検索性能を向上させるために分単位に細分化されたFTSフォーマットで定義されたSQLite3ファイルへアクセスを行う.
48 | 各SQLite3ファイルへはGNU Parallelを用いて並列にSQL検索クエリが実行され,
49 | 結果はUNIXパイプラインを経由してawkコマンドやcountコマンドを用いて集計される.
50 |
51 |
52 | \section{性能概要}
53 | Hayabusaはスタンドアロン環境で動作するが,小規模なApache Sparkのクラスタよりも全文検索性能が高い.
54 | 性能評価実験では,Hayabusaは3台のApache Sparkクラスタより27倍早い検索性能を示した.
55 | \begin{figure}[h]
56 | \centering
57 | \includegraphics[width=85mm]{./pictures/spark-sqlite-dist2.eps}
58 | \caption{HayabusaとSparkの性能比較}
59 | \label{fig:hayabusa-spark}
60 | \end{figure}
61 |
62 |
63 | \section{まとめ}
64 | スタンドアロン環境にはハードウェア限界が存在し,
65 | 規模が拡大した他の分散処理クラスタにいつかは性能が抜かれてしまう可能性が高い.
66 | そこで,Hayabusaの限界であるスタンドアロン環境という制約を取り払い,
67 | 複数ホストでHayabusaの分散処理環境を構築し,検索性能がスケールアウトするアーキテクチャの実現をした\cite{d-hayabusa}.
68 | 計測した結果,1台の処理ホストでは約468秒かかった検索処理が最大約6秒まで短縮した.
69 | 144億レコードのsyslogデータを6秒でフルスキャンし,
70 | 全文検索可能な分散Hayabusa環境はログ検索エンジンとして高い性能を発揮する.
71 |
72 |
73 |
74 | \begin{thebibliography}{9}
75 | \bibitem{hayabusa} H. Abe, K. Shima, Y. Sekiya, D. Miyamoto, T. Ishihara, and K. Okada. Hayabusa: Simple and fast full-text search engine for massive system log data., CFI’17, pages 2:1–2:7, Fukuoka, JAPAN, 2017. ACM.
76 | \bibitem{d-hayabusa} 阿部博 and 篠田陽一, スケールアウト可能なログ検索エンジンの実現と評価, インターネットと運用技術シンポジウム論文集 2017論文集, volume 2017, pages 73-80, nov 2017.
77 |
78 | \end{thebibliography}
79 |
80 |
81 | \end{document}
82 |
--------------------------------------------------------------------------------
/search_engine.py:
--------------------------------------------------------------------------------
1 | import argparse
2 | import configparser
3 | import subprocess
4 | import shlex
5 |
6 | BASE_DIR = '/var/tmp/data'
7 | CONFIG = '/path/to/config.ini'
8 |
9 | def exec(args):
10 | time = args.time
11 | match = args.match
12 | exact = args.e
13 | count = args.c
14 | sum = args.s
15 | verbose = args.v
16 |
17 | if count:
18 | if sum:
19 | if exact:
20 | cmd = 'parallel sqlite3 ::: %s/%s.db ::: "select count(*) from syslog where logs match %s;" | awk \'{m+=$1} END{print m;}\'' % (BASE_DIR, time, shlex.quote('\\"%s\\"' % match))
21 | else:
22 | cmd = 'parallel sqlite3 ::: %s/%s.db ::: "select count(*) from syslog where logs match \'%s\';" | awk \'{m+=$1} END{print m;}\'' % (BASE_DIR, time, match)
23 | else:
24 | if exact:
25 | cmd = 'parallel sqlite3 ::: %s/%s.db ::: "select count(*) from syslog where logs match %s;"' % (BASE_DIR, time, shlex.quote('\\"%s\\"' % match))
26 | else:
27 | cmd = 'parallel sqlite3 ::: %s/%s.db ::: "select count(*) from syslog where logs match \'%s\';"' % (BASE_DIR, time, match)
28 |
29 | # debug code
30 | # cmd = 'parallel sqlite3 ::: /mnt/ssd1/benchmark-db/100k/100k-1.db ::: "select count(*) from syslog where logs match \'noc\';"'
31 |
32 | else:
33 | if exact:
34 | cmd = 'parallel sqlite3 ::: %s/%s.db ::: "select * from syslog where logs match %s;"' % (BASE_DIR, time, shlex.quote('\\"%s\\"' % match))
35 | else:
36 | cmd = 'parallel sqlite3 ::: %s/%s.db ::: "select * from syslog where logs match \'%s\';"' % (BASE_DIR, time, match)
37 |
38 | # debug code
39 | # cmd = 'parallel sqlite3 ::: /mnt/ssd1/benchmark-db/100k/100k-1.db ::: "select * from syslog where logs match \'noc\';"'
40 |
41 | if verbose:
42 | print(cmd)
43 |
44 | subprocess.call(cmd, shell=True)
45 |
46 | if __name__ == '__main__':
47 | config = configparser.ConfigParser()
48 | config.read(CONFIG)
49 |
50 | BASE_DIR = config['path']['base-dir']
51 |
52 | parser = argparse.ArgumentParser()
53 | parser.add_argument("--time",
54 | help="time explain regexp(YYYY/MM/DD/HH/MIN). eg: 2017/04/27/10/*")
55 | parser.add_argument("--match",
56 | help="matching keyword. eg: noc or 'noc Login'")
57 | parser.add_argument("-e",
58 | help="exact match", action="store_true")
59 | parser.add_argument("-c",
60 | help="count", action="store_true")
61 | parser.add_argument("-s",
62 | help="sum", action="store_true")
63 | parser.add_argument("-v",
64 | help="verbose", action="store_true")
65 | parser.parse_args()
66 |
67 | args = parser.parse_args()
68 |
69 | exec(args)
70 |
--------------------------------------------------------------------------------
/store_engine.py:
--------------------------------------------------------------------------------
1 | import configparser
2 | import os.path
3 | import sqlite3
4 |
5 | import datetime
6 | from distutils.dir_util import mkpath
7 |
8 | LOG_FILE = '/var/log/messages.1'
9 | BASE_DIR = '/var/tmp/data'
10 | CONFIG = '/path/to/config.ini'
11 |
12 | def main():
13 | now = datetime.datetime.now()
14 | dir_path = '%d/%02d/%02d/%02d' % (now.year, now.month, now.day, now.hour)
15 | db_file = '%02d.db' % (now.minute)
16 | db_path = '%s/%s/%s' % (BASE_DIR, dir_path, db_file)
17 |
18 | dir_path = '%s/%s' %(BASE_DIR, dir_path)
19 | mkpath(dir_path)
20 |
21 | if os.path.exists(db_path):
22 | os.remove(db_path)
23 | conn = sqlite3.connect(db_path)
24 | conn.execute("CREATE VIRTUAL TABLE SYSLOG USING FTS3(LOGS)");
25 | conn.execute("PRAGMA SYNCHRONOUS = OFF");
26 | conn.execute("PRAGMA JOURNAL_MODE = MEMORY");
27 |
28 | with open(LOG_FILE, "r", encoding="utf-8", errors='ignore') as fh:
29 | lines = [[line] for line in fh]
30 |
31 | try:
32 | conn.executemany('INSERT INTO SYSLOG VALUES( ? )', lines)
33 | except sqlite3.Error as e:
34 | print(e)
35 | else:
36 | conn.commit()
37 |
38 | if __name__ == '__main__':
39 | config = configparser.ConfigParser()
40 | config.read(CONFIG)
41 |
42 | LOG_FILE = config['path']['log-file']
43 | BASE_DIR = config['path']['base-dir']
44 |
45 | main()
46 |
--------------------------------------------------------------------------------
/webui/README.md:
--------------------------------------------------------------------------------
1 | # Simple Hayabusa Web UI
2 | This is the Hayabusa Web UI using flask framework
3 |
4 | # Dependency softwares
5 | - Python 3
6 | - flask
7 | - flask-httpauth
8 | - Bootstrap3
9 |
10 | # WebUI image
11 | 
12 |
--------------------------------------------------------------------------------
/webui/app.py:
--------------------------------------------------------------------------------
1 | import os
2 | import json
3 | import subprocess
4 | from datetime import datetime as dt
5 |
6 | from flask import Flask, request, render_template, jsonify, redirect, url_for
7 | # conda install -c conda-forge flask-httpauth
8 | from flask_httpauth import HTTPBasicAuth
9 |
10 | app = Flask(__name__)
11 | app.debug = True
12 | auth = HTTPBasicAuth()
13 |
14 | users = {
15 | "hayabusa" : "hayabusa"
16 | }
17 |
18 | result_file = '/var/tmp/result.log'
19 | search_engine_path = '/opt/hayabusa/search_engine.py'
20 |
21 | columns = ["syslog"]
22 | collection = [{columns[0] : ''}]
23 |
24 |
25 | class BaseDataTables:
26 | def __init__(self, request, columns, collection):
27 | self.columns = columns
28 | self.collection = collection
29 |
30 | # values specified by the datatable for filtering, sorting, paging
31 | self.request_values = request.values
32 |
33 | # results from the db
34 | self.result_data = None
35 |
36 | # total in the table after filtering
37 | self.cardinality_filtered = 0
38 |
39 | # total in the table unfiltered
40 | self.cadinality = 0
41 |
42 | self.run_queries()
43 |
44 | def output_result(self):
45 | output = {}
46 |
47 | aaData_rows = []
48 |
49 | for row in self.result_data:
50 | aaData_row = []
51 | for i in range(len(self.columns)):
52 | # print row, self.columns, self.columns[i]
53 | aaData_row.append(str(row[ self.columns[i] ]).replace('"','\\"'))
54 | aaData_rows.append(aaData_row)
55 |
56 | output['aaData'] = aaData_rows
57 |
58 | return output
59 |
60 | def run_queries(self):
61 | self.result_data = self.collection
62 | self.cardinality_filtered = len(self.result_data)
63 | self.cardinality = len(self.result_data)
64 |
65 |
66 | def getCollection():
67 | tmp_file = '%s-%s' % (result_file, auth.username())
68 |
69 | collection = []
70 | if os.path.exists(tmp_file):
71 | file = open(tmp_file)
72 | collection = [{columns[0] : line.strip()} for line in file]
73 | file.close()
74 | else:
75 | collection = [{columns[0] : ''}]
76 |
77 | return collection
78 |
79 | @auth.get_password
80 | def get_pw(username):
81 | if username in users:
82 | return users.get(username)
83 | return None
84 |
85 | @app.route('/', methods=['GET'])
86 | def get():
87 | tmp_file = '%s-%s' % (result_file, auth.username())
88 | cmd = "/bin/rm %s" % (tmp_file)
89 | subprocess.call(cmd, shell=True)
90 |
91 | time = dt.now().strftime('%Y/%m/%d/%H/%M')
92 | return render_template('index_get.html', columns=columns, time=time)
93 |
94 |
95 | @auth.login_required
96 | def index():
97 | tmp_file = '%s-%s' % (result_file, auth.username())
98 |
99 | cmd = "/bin/rm %s" % (tmp_file)
100 | subprocess.call(cmd, shell=True)
101 |
102 | return render_template('index.html', columns=columns, username=auth.username())
103 |
104 | @app.route('/dt')
105 | def get_server_data():
106 | collection = getCollection()
107 |
108 | results = BaseDataTables(request, columns, collection).output_result()
109 |
110 | # return the results as a string for the datatable
111 | return json.dumps(results)
112 |
113 | @app.route('/post', methods=['POST'])
114 | def post():
115 | print('do post')
116 | if request.method == 'POST':
117 | time = request.form['time']
118 | keyword = request.form['keyword']
119 |
120 | tmp_file = '%s-%s' % (result_file, auth.username())
121 | #cmd = "%s -e --time %s --match %s | /bin/grep -v -e '^\s*#' -e '^\s*$' > %s" % (search_engine_path, time, keyword, tmp_file)
122 | cmd = "%s -e --time %s --match %s | sed '/^$/d' > %s" % (search_engine_path, time, keyword, tmp_file)
123 | subprocess.call(cmd, shell=True)
124 |
125 | return render_template('index.html', columns=columns, time=time, keyword=keyword, username=auth.username())
126 | else:
127 | time = dt.now().strftime('%Y/%m/%d/%H/%M')
128 | return render_template('index_get.html', columns=columns, time=time)
129 |
130 |
131 | if __name__ == '__main__':
132 | app.jinja_env.auto_reload = True
133 | app.run(host="0.0.0.0", debug=True)
134 |
--------------------------------------------------------------------------------
/webui/hayabusa-webui.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hirolovesbeer/hayabusa/d6ecea2ac1d624f4a3fabbbfb5ee265cf48f4a02/webui/hayabusa-webui.png
--------------------------------------------------------------------------------
/webui/original/8823logo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hirolovesbeer/hayabusa/d6ecea2ac1d624f4a3fabbbfb5ee265cf48f4a02/webui/original/8823logo.gif
--------------------------------------------------------------------------------
/webui/original/README.md:
--------------------------------------------------------------------------------
1 | # Origianl 8823 image
2 | 
3 |
--------------------------------------------------------------------------------
/webui/original/hayabusa.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hirolovesbeer/hayabusa/d6ecea2ac1d624f4a3fabbbfb5ee265cf48f4a02/webui/original/hayabusa.gif
--------------------------------------------------------------------------------
/webui/original/hayabusa.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | サーチエンジン-はやぶさ-
5 |
6 |
7 |
8 |
9 |
10 |
11 |  |
12 |  |
|
13 |
14 | 手動サーチエンジンはやぶさ
15 |
16 |
17 |
18 |
19 |
33 |
34 |
35 |
41 |
42 | 現在の回答時間は約
43 | 1900日です。
44 |
45 |
50 |
51 |
52 |
53 | -サーチエンジンはやぶさの特徴-
54 |
55 |
56 | - 世界中のホームページを網羅した
57 | はやぶさデータベースを使用。
58 |
- キーワードはタイトルだけでなく内容の中からでも検索。
59 |
- ファジィ言語解析機能によりあなた好みの検索項目で検索。
60 |
- メールによる確実な返答。
61 |
62 |
63 |
64 | -その流れ-
65 |
66 | - キーワードを入力します。
67 |
- ボタンを押すことによりキーワードが"はやぶさデータベースセンター"
68 | に送られます。
69 |
- 後はしばらく待つだけ。(通常1、2日)メールにより探し求めた
70 | ホームページのありかが分かります。
71 |
72 |
73 | -注意-
74 |
75 | - このサーチエンジンは手動のため、返答に日数がかかります。
76 |
- 苦情、その他は一切受け付けておりません。
77 |
- はやぶさデータベースセンターは土日が休日となっておりますので、
78 | 勝手ながら土日の検索依頼分は通常より2、3日遅れになります。
79 |
- はやぶさデータベースのメンテナンスにより返答されない
80 | 場合があります。ご了承下さい。
81 |
82 |
83 |
106 |
107 |
108 |
109 |
110 |
111 |
112 | 本サイトは青少年向けコンテンツです。
113 |
114 |
115 |
116 |
117 |
118 |
--------------------------------------------------------------------------------
/webui/original/original-8823-ui.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/hirolovesbeer/hayabusa/d6ecea2ac1d624f4a3fabbbfb5ee265cf48f4a02/webui/original/original-8823-ui.png
--------------------------------------------------------------------------------
/webui/static/css/bootstrap-theme.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.3.7 (http://getbootstrap.com)
3 | * Copyright 2011-2016 Twitter, Inc.
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */
6 | .btn-default,
7 | .btn-primary,
8 | .btn-success,
9 | .btn-info,
10 | .btn-warning,
11 | .btn-danger {
12 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);
13 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
14 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);
15 | }
16 | .btn-default:active,
17 | .btn-primary:active,
18 | .btn-success:active,
19 | .btn-info:active,
20 | .btn-warning:active,
21 | .btn-danger:active,
22 | .btn-default.active,
23 | .btn-primary.active,
24 | .btn-success.active,
25 | .btn-info.active,
26 | .btn-warning.active,
27 | .btn-danger.active {
28 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
29 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
30 | }
31 | .btn-default.disabled,
32 | .btn-primary.disabled,
33 | .btn-success.disabled,
34 | .btn-info.disabled,
35 | .btn-warning.disabled,
36 | .btn-danger.disabled,
37 | .btn-default[disabled],
38 | .btn-primary[disabled],
39 | .btn-success[disabled],
40 | .btn-info[disabled],
41 | .btn-warning[disabled],
42 | .btn-danger[disabled],
43 | fieldset[disabled] .btn-default,
44 | fieldset[disabled] .btn-primary,
45 | fieldset[disabled] .btn-success,
46 | fieldset[disabled] .btn-info,
47 | fieldset[disabled] .btn-warning,
48 | fieldset[disabled] .btn-danger {
49 | -webkit-box-shadow: none;
50 | box-shadow: none;
51 | }
52 | .btn-default .badge,
53 | .btn-primary .badge,
54 | .btn-success .badge,
55 | .btn-info .badge,
56 | .btn-warning .badge,
57 | .btn-danger .badge {
58 | text-shadow: none;
59 | }
60 | .btn:active,
61 | .btn.active {
62 | background-image: none;
63 | }
64 | .btn-default {
65 | text-shadow: 0 1px 0 #fff;
66 | background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);
67 | background-image: -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);
68 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));
69 | background-image: linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);
70 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
71 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
72 | background-repeat: repeat-x;
73 | border-color: #dbdbdb;
74 | border-color: #ccc;
75 | }
76 | .btn-default:hover,
77 | .btn-default:focus {
78 | background-color: #e0e0e0;
79 | background-position: 0 -15px;
80 | }
81 | .btn-default:active,
82 | .btn-default.active {
83 | background-color: #e0e0e0;
84 | border-color: #dbdbdb;
85 | }
86 | .btn-default.disabled,
87 | .btn-default[disabled],
88 | fieldset[disabled] .btn-default,
89 | .btn-default.disabled:hover,
90 | .btn-default[disabled]:hover,
91 | fieldset[disabled] .btn-default:hover,
92 | .btn-default.disabled:focus,
93 | .btn-default[disabled]:focus,
94 | fieldset[disabled] .btn-default:focus,
95 | .btn-default.disabled.focus,
96 | .btn-default[disabled].focus,
97 | fieldset[disabled] .btn-default.focus,
98 | .btn-default.disabled:active,
99 | .btn-default[disabled]:active,
100 | fieldset[disabled] .btn-default:active,
101 | .btn-default.disabled.active,
102 | .btn-default[disabled].active,
103 | fieldset[disabled] .btn-default.active {
104 | background-color: #e0e0e0;
105 | background-image: none;
106 | }
107 | .btn-primary {
108 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);
109 | background-image: -o-linear-gradient(top, #337ab7 0%, #265a88 100%);
110 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));
111 | background-image: linear-gradient(to bottom, #337ab7 0%, #265a88 100%);
112 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);
113 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
114 | background-repeat: repeat-x;
115 | border-color: #245580;
116 | }
117 | .btn-primary:hover,
118 | .btn-primary:focus {
119 | background-color: #265a88;
120 | background-position: 0 -15px;
121 | }
122 | .btn-primary:active,
123 | .btn-primary.active {
124 | background-color: #265a88;
125 | border-color: #245580;
126 | }
127 | .btn-primary.disabled,
128 | .btn-primary[disabled],
129 | fieldset[disabled] .btn-primary,
130 | .btn-primary.disabled:hover,
131 | .btn-primary[disabled]:hover,
132 | fieldset[disabled] .btn-primary:hover,
133 | .btn-primary.disabled:focus,
134 | .btn-primary[disabled]:focus,
135 | fieldset[disabled] .btn-primary:focus,
136 | .btn-primary.disabled.focus,
137 | .btn-primary[disabled].focus,
138 | fieldset[disabled] .btn-primary.focus,
139 | .btn-primary.disabled:active,
140 | .btn-primary[disabled]:active,
141 | fieldset[disabled] .btn-primary:active,
142 | .btn-primary.disabled.active,
143 | .btn-primary[disabled].active,
144 | fieldset[disabled] .btn-primary.active {
145 | background-color: #265a88;
146 | background-image: none;
147 | }
148 | .btn-success {
149 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
150 | background-image: -o-linear-gradient(top, #5cb85c 0%, #419641 100%);
151 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));
152 | background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
153 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
154 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
155 | background-repeat: repeat-x;
156 | border-color: #3e8f3e;
157 | }
158 | .btn-success:hover,
159 | .btn-success:focus {
160 | background-color: #419641;
161 | background-position: 0 -15px;
162 | }
163 | .btn-success:active,
164 | .btn-success.active {
165 | background-color: #419641;
166 | border-color: #3e8f3e;
167 | }
168 | .btn-success.disabled,
169 | .btn-success[disabled],
170 | fieldset[disabled] .btn-success,
171 | .btn-success.disabled:hover,
172 | .btn-success[disabled]:hover,
173 | fieldset[disabled] .btn-success:hover,
174 | .btn-success.disabled:focus,
175 | .btn-success[disabled]:focus,
176 | fieldset[disabled] .btn-success:focus,
177 | .btn-success.disabled.focus,
178 | .btn-success[disabled].focus,
179 | fieldset[disabled] .btn-success.focus,
180 | .btn-success.disabled:active,
181 | .btn-success[disabled]:active,
182 | fieldset[disabled] .btn-success:active,
183 | .btn-success.disabled.active,
184 | .btn-success[disabled].active,
185 | fieldset[disabled] .btn-success.active {
186 | background-color: #419641;
187 | background-image: none;
188 | }
189 | .btn-info {
190 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
191 | background-image: -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
192 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));
193 | background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
194 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
195 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
196 | background-repeat: repeat-x;
197 | border-color: #28a4c9;
198 | }
199 | .btn-info:hover,
200 | .btn-info:focus {
201 | background-color: #2aabd2;
202 | background-position: 0 -15px;
203 | }
204 | .btn-info:active,
205 | .btn-info.active {
206 | background-color: #2aabd2;
207 | border-color: #28a4c9;
208 | }
209 | .btn-info.disabled,
210 | .btn-info[disabled],
211 | fieldset[disabled] .btn-info,
212 | .btn-info.disabled:hover,
213 | .btn-info[disabled]:hover,
214 | fieldset[disabled] .btn-info:hover,
215 | .btn-info.disabled:focus,
216 | .btn-info[disabled]:focus,
217 | fieldset[disabled] .btn-info:focus,
218 | .btn-info.disabled.focus,
219 | .btn-info[disabled].focus,
220 | fieldset[disabled] .btn-info.focus,
221 | .btn-info.disabled:active,
222 | .btn-info[disabled]:active,
223 | fieldset[disabled] .btn-info:active,
224 | .btn-info.disabled.active,
225 | .btn-info[disabled].active,
226 | fieldset[disabled] .btn-info.active {
227 | background-color: #2aabd2;
228 | background-image: none;
229 | }
230 | .btn-warning {
231 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
232 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
233 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));
234 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
235 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
236 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
237 | background-repeat: repeat-x;
238 | border-color: #e38d13;
239 | }
240 | .btn-warning:hover,
241 | .btn-warning:focus {
242 | background-color: #eb9316;
243 | background-position: 0 -15px;
244 | }
245 | .btn-warning:active,
246 | .btn-warning.active {
247 | background-color: #eb9316;
248 | border-color: #e38d13;
249 | }
250 | .btn-warning.disabled,
251 | .btn-warning[disabled],
252 | fieldset[disabled] .btn-warning,
253 | .btn-warning.disabled:hover,
254 | .btn-warning[disabled]:hover,
255 | fieldset[disabled] .btn-warning:hover,
256 | .btn-warning.disabled:focus,
257 | .btn-warning[disabled]:focus,
258 | fieldset[disabled] .btn-warning:focus,
259 | .btn-warning.disabled.focus,
260 | .btn-warning[disabled].focus,
261 | fieldset[disabled] .btn-warning.focus,
262 | .btn-warning.disabled:active,
263 | .btn-warning[disabled]:active,
264 | fieldset[disabled] .btn-warning:active,
265 | .btn-warning.disabled.active,
266 | .btn-warning[disabled].active,
267 | fieldset[disabled] .btn-warning.active {
268 | background-color: #eb9316;
269 | background-image: none;
270 | }
271 | .btn-danger {
272 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
273 | background-image: -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
274 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));
275 | background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
276 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
277 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
278 | background-repeat: repeat-x;
279 | border-color: #b92c28;
280 | }
281 | .btn-danger:hover,
282 | .btn-danger:focus {
283 | background-color: #c12e2a;
284 | background-position: 0 -15px;
285 | }
286 | .btn-danger:active,
287 | .btn-danger.active {
288 | background-color: #c12e2a;
289 | border-color: #b92c28;
290 | }
291 | .btn-danger.disabled,
292 | .btn-danger[disabled],
293 | fieldset[disabled] .btn-danger,
294 | .btn-danger.disabled:hover,
295 | .btn-danger[disabled]:hover,
296 | fieldset[disabled] .btn-danger:hover,
297 | .btn-danger.disabled:focus,
298 | .btn-danger[disabled]:focus,
299 | fieldset[disabled] .btn-danger:focus,
300 | .btn-danger.disabled.focus,
301 | .btn-danger[disabled].focus,
302 | fieldset[disabled] .btn-danger.focus,
303 | .btn-danger.disabled:active,
304 | .btn-danger[disabled]:active,
305 | fieldset[disabled] .btn-danger:active,
306 | .btn-danger.disabled.active,
307 | .btn-danger[disabled].active,
308 | fieldset[disabled] .btn-danger.active {
309 | background-color: #c12e2a;
310 | background-image: none;
311 | }
312 | .thumbnail,
313 | .img-thumbnail {
314 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
315 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
316 | }
317 | .dropdown-menu > li > a:hover,
318 | .dropdown-menu > li > a:focus {
319 | background-color: #e8e8e8;
320 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
321 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
322 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
323 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
324 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
325 | background-repeat: repeat-x;
326 | }
327 | .dropdown-menu > .active > a,
328 | .dropdown-menu > .active > a:hover,
329 | .dropdown-menu > .active > a:focus {
330 | background-color: #2e6da4;
331 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
332 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
333 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
334 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
335 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
336 | background-repeat: repeat-x;
337 | }
338 | .navbar-default {
339 | background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);
340 | background-image: -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);
341 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));
342 | background-image: linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);
343 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
344 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
345 | background-repeat: repeat-x;
346 | border-radius: 4px;
347 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
348 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);
349 | }
350 | .navbar-default .navbar-nav > .open > a,
351 | .navbar-default .navbar-nav > .active > a {
352 | background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
353 | background-image: -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);
354 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));
355 | background-image: linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);
356 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);
357 | background-repeat: repeat-x;
358 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
359 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);
360 | }
361 | .navbar-brand,
362 | .navbar-nav > li > a {
363 | text-shadow: 0 1px 0 rgba(255, 255, 255, .25);
364 | }
365 | .navbar-inverse {
366 | background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);
367 | background-image: -o-linear-gradient(top, #3c3c3c 0%, #222 100%);
368 | background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));
369 | background-image: linear-gradient(to bottom, #3c3c3c 0%, #222 100%);
370 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
371 | filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
372 | background-repeat: repeat-x;
373 | border-radius: 4px;
374 | }
375 | .navbar-inverse .navbar-nav > .open > a,
376 | .navbar-inverse .navbar-nav > .active > a {
377 | background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);
378 | background-image: -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);
379 | background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));
380 | background-image: linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);
381 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);
382 | background-repeat: repeat-x;
383 | -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
384 | box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);
385 | }
386 | .navbar-inverse .navbar-brand,
387 | .navbar-inverse .navbar-nav > li > a {
388 | text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);
389 | }
390 | .navbar-static-top,
391 | .navbar-fixed-top,
392 | .navbar-fixed-bottom {
393 | border-radius: 0;
394 | }
395 | @media (max-width: 767px) {
396 | .navbar .navbar-nav .open .dropdown-menu > .active > a,
397 | .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
398 | .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
399 | color: #fff;
400 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
401 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
402 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
403 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
404 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
405 | background-repeat: repeat-x;
406 | }
407 | }
408 | .alert {
409 | text-shadow: 0 1px 0 rgba(255, 255, 255, .2);
410 | -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
411 | box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);
412 | }
413 | .alert-success {
414 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
415 | background-image: -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
416 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));
417 | background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
418 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
419 | background-repeat: repeat-x;
420 | border-color: #b2dba1;
421 | }
422 | .alert-info {
423 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
424 | background-image: -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
425 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));
426 | background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
427 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
428 | background-repeat: repeat-x;
429 | border-color: #9acfea;
430 | }
431 | .alert-warning {
432 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
433 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
434 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));
435 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
436 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
437 | background-repeat: repeat-x;
438 | border-color: #f5e79e;
439 | }
440 | .alert-danger {
441 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
442 | background-image: -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
443 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));
444 | background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
445 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
446 | background-repeat: repeat-x;
447 | border-color: #dca7a7;
448 | }
449 | .progress {
450 | background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
451 | background-image: -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
452 | background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));
453 | background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
454 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
455 | background-repeat: repeat-x;
456 | }
457 | .progress-bar {
458 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);
459 | background-image: -o-linear-gradient(top, #337ab7 0%, #286090 100%);
460 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));
461 | background-image: linear-gradient(to bottom, #337ab7 0%, #286090 100%);
462 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);
463 | background-repeat: repeat-x;
464 | }
465 | .progress-bar-success {
466 | background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
467 | background-image: -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);
468 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));
469 | background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
470 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
471 | background-repeat: repeat-x;
472 | }
473 | .progress-bar-info {
474 | background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
475 | background-image: -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
476 | background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));
477 | background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
478 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
479 | background-repeat: repeat-x;
480 | }
481 | .progress-bar-warning {
482 | background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
483 | background-image: -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
484 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));
485 | background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
486 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
487 | background-repeat: repeat-x;
488 | }
489 | .progress-bar-danger {
490 | background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
491 | background-image: -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);
492 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));
493 | background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
494 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
495 | background-repeat: repeat-x;
496 | }
497 | .progress-bar-striped {
498 | background-image: -webkit-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);
499 | background-image: -o-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);
500 | 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);
501 | }
502 | .list-group {
503 | border-radius: 4px;
504 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
505 | box-shadow: 0 1px 2px rgba(0, 0, 0, .075);
506 | }
507 | .list-group-item.active,
508 | .list-group-item.active:hover,
509 | .list-group-item.active:focus {
510 | text-shadow: 0 -1px 0 #286090;
511 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);
512 | background-image: -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);
513 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));
514 | background-image: linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);
515 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);
516 | background-repeat: repeat-x;
517 | border-color: #2b669a;
518 | }
519 | .list-group-item.active .badge,
520 | .list-group-item.active:hover .badge,
521 | .list-group-item.active:focus .badge {
522 | text-shadow: none;
523 | }
524 | .panel {
525 | -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
526 | box-shadow: 0 1px 2px rgba(0, 0, 0, .05);
527 | }
528 | .panel-default > .panel-heading {
529 | background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
530 | background-image: -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
531 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));
532 | background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
533 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
534 | background-repeat: repeat-x;
535 | }
536 | .panel-primary > .panel-heading {
537 | background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
538 | background-image: -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);
539 | background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));
540 | background-image: linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);
541 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);
542 | background-repeat: repeat-x;
543 | }
544 | .panel-success > .panel-heading {
545 | background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
546 | background-image: -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
547 | background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));
548 | background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
549 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
550 | background-repeat: repeat-x;
551 | }
552 | .panel-info > .panel-heading {
553 | background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
554 | background-image: -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
555 | background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));
556 | background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
557 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
558 | background-repeat: repeat-x;
559 | }
560 | .panel-warning > .panel-heading {
561 | background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
562 | background-image: -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
563 | background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));
564 | background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
565 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
566 | background-repeat: repeat-x;
567 | }
568 | .panel-danger > .panel-heading {
569 | background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
570 | background-image: -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
571 | background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));
572 | background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
573 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
574 | background-repeat: repeat-x;
575 | }
576 | .well {
577 | background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
578 | background-image: -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
579 | background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));
580 | background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
581 | filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
582 | background-repeat: repeat-x;
583 | border-color: #dcdcdc;
584 | -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
585 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);
586 | }
587 | /*# sourceMappingURL=bootstrap-theme.css.map */
588 |
--------------------------------------------------------------------------------
/webui/static/css/bootstrap-theme.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.3.7 (http://getbootstrap.com)
3 | * Copyright 2011-2016 Twitter, Inc.
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */.btn-danger,.btn-default,.btn-info,.btn-primary,.btn-success,.btn-warning{text-shadow:0 -1px 0 rgba(0,0,0,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-success.active,.btn-success:active,.btn-warning.active,.btn-warning:active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-danger.disabled,.btn-danger[disabled],.btn-default.disabled,.btn-default[disabled],.btn-info.disabled,.btn-info[disabled],.btn-primary.disabled,.btn-primary[disabled],.btn-success.disabled,.btn-success[disabled],.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-danger,fieldset[disabled] .btn-default,fieldset[disabled] .btn-info,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-success,fieldset[disabled] .btn-warning{-webkit-box-shadow:none;box-shadow:none}.btn-danger .badge,.btn-default .badge,.btn-info .badge,.btn-primary .badge,.btn-success .badge,.btn-warning .badge{text-shadow:none}.btn.active,.btn:active{background-image:none}.btn-default{text-shadow:0 1px 0 #fff;background-image:-webkit-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-o-linear-gradient(top,#fff 0,#e0e0e0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e0e0e0));background-image:linear-gradient(to bottom,#fff 0,#e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#dbdbdb;border-color:#ccc}.btn-default:focus,.btn-default:hover{background-color:#e0e0e0;background-position:0 -15px}.btn-default.active,.btn-default:active{background-color:#e0e0e0;border-color:#dbdbdb}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#e0e0e0;background-image:none}.btn-primary{background-image:-webkit-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-o-linear-gradient(top,#337ab7 0,#265a88 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#265a88));background-image:linear-gradient(to bottom,#337ab7 0,#265a88 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#245580}.btn-primary:focus,.btn-primary:hover{background-color:#265a88;background-position:0 -15px}.btn-primary.active,.btn-primary:active{background-color:#265a88;border-color:#245580}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#265a88;background-image:none}.btn-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#419641 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#419641));background-image:linear-gradient(to bottom,#5cb85c 0,#419641 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#3e8f3e}.btn-success:focus,.btn-success:hover{background-color:#419641;background-position:0 -15px}.btn-success.active,.btn-success:active{background-color:#419641;border-color:#3e8f3e}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#419641;background-image:none}.btn-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#2aabd2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#2aabd2));background-image:linear-gradient(to bottom,#5bc0de 0,#2aabd2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#28a4c9}.btn-info:focus,.btn-info:hover{background-color:#2aabd2;background-position:0 -15px}.btn-info.active,.btn-info:active{background-color:#2aabd2;border-color:#28a4c9}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#2aabd2;background-image:none}.btn-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#eb9316 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#eb9316));background-image:linear-gradient(to bottom,#f0ad4e 0,#eb9316 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#e38d13}.btn-warning:focus,.btn-warning:hover{background-color:#eb9316;background-position:0 -15px}.btn-warning.active,.btn-warning:active{background-color:#eb9316;border-color:#e38d13}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#eb9316;background-image:none}.btn-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c12e2a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c12e2a));background-image:linear-gradient(to bottom,#d9534f 0,#c12e2a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-color:#b92c28}.btn-danger:focus,.btn-danger:hover{background-color:#c12e2a;background-position:0 -15px}.btn-danger.active,.btn-danger:active{background-color:#c12e2a;border-color:#b92c28}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#c12e2a;background-image:none}.img-thumbnail,.thumbnail{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{background-color:#e8e8e8;background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#2e6da4;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.navbar-default{background-image:-webkit-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-o-linear-gradient(top,#fff 0,#f8f8f8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));background-image:linear-gradient(to bottom,#fff 0,#f8f8f8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 5px rgba(0,0,0,.075)}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-o-linear-gradient(top,#dbdbdb 0,#e2e2e2 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dbdbdb),to(#e2e2e2));background-image:linear-gradient(to bottom,#dbdbdb 0,#e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.075);box-shadow:inset 0 3px 9px rgba(0,0,0,.075)}.navbar-brand,.navbar-nav>li>a{text-shadow:0 1px 0 rgba(255,255,255,.25)}.navbar-inverse{background-image:-webkit-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-o-linear-gradient(top,#3c3c3c 0,#222 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#3c3c3c),to(#222));background-image:linear-gradient(to bottom,#3c3c3c 0,#222 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);background-repeat:repeat-x;border-radius:4px}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.open>a{background-image:-webkit-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-o-linear-gradient(top,#080808 0,#0f0f0f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#080808),to(#0f0f0f));background-image:linear-gradient(to bottom,#080808 0,#0f0f0f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);background-repeat:repeat-x;-webkit-box-shadow:inset 0 3px 9px rgba(0,0,0,.25);box-shadow:inset 0 3px 9px rgba(0,0,0,.25)}.navbar-inverse .navbar-brand,.navbar-inverse .navbar-nav>li>a{text-shadow:0 -1px 0 rgba(0,0,0,.25)}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}@media (max-width:767px){.navbar .navbar-nav .open .dropdown-menu>.active>a,.navbar .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}}.alert{text-shadow:0 1px 0 rgba(255,255,255,.2);-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.25),0 1px 2px rgba(0,0,0,.05)}.alert-success{background-image:-webkit-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#c8e5bc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#c8e5bc));background-image:linear-gradient(to bottom,#dff0d8 0,#c8e5bc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);background-repeat:repeat-x;border-color:#b2dba1}.alert-info{background-image:-webkit-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#b9def0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#b9def0));background-image:linear-gradient(to bottom,#d9edf7 0,#b9def0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);background-repeat:repeat-x;border-color:#9acfea}.alert-warning{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#f8efc0 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#f8efc0));background-image:linear-gradient(to bottom,#fcf8e3 0,#f8efc0 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);background-repeat:repeat-x;border-color:#f5e79e}.alert-danger{background-image:-webkit-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-o-linear-gradient(top,#f2dede 0,#e7c3c3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#e7c3c3));background-image:linear-gradient(to bottom,#f2dede 0,#e7c3c3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);background-repeat:repeat-x;border-color:#dca7a7}.progress{background-image:-webkit-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#ebebeb 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#f5f5f5));background-image:linear-gradient(to bottom,#ebebeb 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x}.progress-bar{background-image:-webkit-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-o-linear-gradient(top,#337ab7 0,#286090 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#286090));background-image:linear-gradient(to bottom,#337ab7 0,#286090 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);background-repeat:repeat-x}.progress-bar-success{background-image:-webkit-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-o-linear-gradient(top,#5cb85c 0,#449d44 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5cb85c),to(#449d44));background-image:linear-gradient(to bottom,#5cb85c 0,#449d44 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);background-repeat:repeat-x}.progress-bar-info{background-image:-webkit-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-o-linear-gradient(top,#5bc0de 0,#31b0d5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#5bc0de),to(#31b0d5));background-image:linear-gradient(to bottom,#5bc0de 0,#31b0d5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);background-repeat:repeat-x}.progress-bar-warning{background-image:-webkit-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-o-linear-gradient(top,#f0ad4e 0,#ec971f 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f0ad4e),to(#ec971f));background-image:linear-gradient(to bottom,#f0ad4e 0,#ec971f 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);background-repeat:repeat-x}.progress-bar-danger{background-image:-webkit-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-o-linear-gradient(top,#d9534f 0,#c9302c 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9534f),to(#c9302c));background-image:linear-gradient(to bottom,#d9534f 0,#c9302c 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);background-repeat:repeat-x}.progress-bar-striped{background-image:-webkit-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-image:-o-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-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)}.list-group{border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{text-shadow:0 -1px 0 #286090;background-image:-webkit-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2b669a 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2b669a));background-image:linear-gradient(to bottom,#337ab7 0,#2b669a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);background-repeat:repeat-x;border-color:#2b669a}.list-group-item.active .badge,.list-group-item.active:focus .badge,.list-group-item.active:hover .badge{text-shadow:none}.panel{-webkit-box-shadow:0 1px 2px rgba(0,0,0,.05);box-shadow:0 1px 2px rgba(0,0,0,.05)}.panel-default>.panel-heading{background-image:-webkit-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-o-linear-gradient(top,#f5f5f5 0,#e8e8e8 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#e8e8e8));background-image:linear-gradient(to bottom,#f5f5f5 0,#e8e8e8 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);background-repeat:repeat-x}.panel-primary>.panel-heading{background-image:-webkit-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-o-linear-gradient(top,#337ab7 0,#2e6da4 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#337ab7),to(#2e6da4));background-image:linear-gradient(to bottom,#337ab7 0,#2e6da4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);background-repeat:repeat-x}.panel-success>.panel-heading{background-image:-webkit-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-o-linear-gradient(top,#dff0d8 0,#d0e9c6 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#dff0d8),to(#d0e9c6));background-image:linear-gradient(to bottom,#dff0d8 0,#d0e9c6 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);background-repeat:repeat-x}.panel-info>.panel-heading{background-image:-webkit-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-o-linear-gradient(top,#d9edf7 0,#c4e3f3 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#d9edf7),to(#c4e3f3));background-image:linear-gradient(to bottom,#d9edf7 0,#c4e3f3 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);background-repeat:repeat-x}.panel-warning>.panel-heading{background-image:-webkit-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-o-linear-gradient(top,#fcf8e3 0,#faf2cc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#fcf8e3),to(#faf2cc));background-image:linear-gradient(to bottom,#fcf8e3 0,#faf2cc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);background-repeat:repeat-x}.panel-danger>.panel-heading{background-image:-webkit-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-o-linear-gradient(top,#f2dede 0,#ebcccc 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#f2dede),to(#ebcccc));background-image:linear-gradient(to bottom,#f2dede 0,#ebcccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);background-repeat:repeat-x}.well{background-image:-webkit-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-o-linear-gradient(top,#e8e8e8 0,#f5f5f5 100%);background-image:-webkit-gradient(linear,left top,left bottom,from(#e8e8e8),to(#f5f5f5));background-image:linear-gradient(to bottom,#e8e8e8 0,#f5f5f5 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);background-repeat:repeat-x;border-color:#dcdcdc;-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 3px rgba(0,0,0,.05),0 1px 0 rgba(255,255,255,.1)}
6 | /*# sourceMappingURL=bootstrap-theme.min.css.map */
--------------------------------------------------------------------------------
/webui/static/css/bootstrap-theme.min.css.map:
--------------------------------------------------------------------------------
1 | {"version":3,"sources":["less/theme.less","less/mixins/vendor-prefixes.less","less/mixins/gradients.less","less/mixins/reset-filter.less"],"names":[],"mappings":";;;;AAmBA,YAAA,aAAA,UAAA,aAAA,aAAA,aAME,YAAA,EAAA,KAAA,EAAA,eC2CA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBDvCR,mBAAA,mBAAA,oBAAA,oBAAA,iBAAA,iBAAA,oBAAA,oBAAA,oBAAA,oBAAA,oBAAA,oBCsCA,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBDlCR,qBAAA,sBAAA,sBAAA,uBAAA,mBAAA,oBAAA,sBAAA,uBAAA,sBAAA,uBAAA,sBAAA,uBAAA,+BAAA,gCAAA,6BAAA,gCAAA,gCAAA,gCCiCA,mBAAA,KACQ,WAAA,KDlDV,mBAAA,oBAAA,iBAAA,oBAAA,oBAAA,oBAuBI,YAAA,KAyCF,YAAA,YAEE,iBAAA,KAKJ,aErEI,YAAA,EAAA,IAAA,EAAA,KACA,iBAAA,iDACA,iBAAA,4CAAA,iBAAA,qEAEA,iBAAA,+CCnBF,OAAA,+GH4CA,OAAA,0DACA,kBAAA,SAuC2C,aAAA,QAA2B,aAAA,KArCtE,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAgBN,aEtEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAiBN,aEvEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAkBN,UExEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,gBAAA,gBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,iBAAA,iBAEE,iBAAA,QACA,aAAA,QAMA,mBAAA,0BAAA,yBAAA,0BAAA,yBAAA,yBAAA,oBAAA,2BAAA,0BAAA,2BAAA,0BAAA,0BAAA,6BAAA,oCAAA,mCAAA,oCAAA,mCAAA,mCAME,iBAAA,QACA,iBAAA,KAmBN,aEzEI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,mBAAA,mBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,oBAAA,oBAEE,iBAAA,QACA,aAAA,QAMA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,uBAAA,8BAAA,6BAAA,8BAAA,6BAAA,6BAAA,gCAAA,uCAAA,sCAAA,uCAAA,sCAAA,sCAME,iBAAA,QACA,iBAAA,KAoBN,YE1EI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDAEA,OAAA,+GCnBF,OAAA,0DH4CA,kBAAA,SACA,aAAA,QAEA,kBAAA,kBAEE,iBAAA,QACA,oBAAA,EAAA,MAGF,mBAAA,mBAEE,iBAAA,QACA,aAAA,QAMA,qBAAA,4BAAA,2BAAA,4BAAA,2BAAA,2BAAA,sBAAA,6BAAA,4BAAA,6BAAA,4BAAA,4BAAA,+BAAA,sCAAA,qCAAA,sCAAA,qCAAA,qCAME,iBAAA,QACA,iBAAA,KA2BN,eAAA,WClCE,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBD2CV,0BAAA,0BE3FI,iBAAA,QACA,iBAAA,oDACA,iBAAA,+CAAA,iBAAA,wEACA,iBAAA,kDACA,OAAA,+GF0FF,kBAAA,SAEF,yBAAA,+BAAA,+BEhGI,iBAAA,QACA,iBAAA,oDACA,iBAAA,+CAAA,iBAAA,wEACA,iBAAA,kDACA,OAAA,+GFgGF,kBAAA,SASF,gBE7GI,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,OAAA,0DCnBF,kBAAA,SH+HA,cAAA,ICjEA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,iBD6DV,sCAAA,oCE7GI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD2CF,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBD0EV,cAAA,iBAEE,YAAA,EAAA,IAAA,EAAA,sBAIF,gBEhII,iBAAA,iDACA,iBAAA,4CACA,iBAAA,qEAAA,iBAAA,+CACA,OAAA,+GACA,OAAA,0DCnBF,kBAAA,SHkJA,cAAA,IAHF,sCAAA,oCEhII,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SD2CF,mBAAA,MAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,gBDgFV,8BAAA,iCAYI,YAAA,EAAA,KAAA,EAAA,gBAKJ,qBAAA,kBAAA,mBAGE,cAAA,EAqBF,yBAfI,mDAAA,yDAAA,yDAGE,MAAA,KE7JF,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,UFqKJ,OACE,YAAA,EAAA,IAAA,EAAA,qBC3HA,mBAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,MAAA,EAAA,IAAA,EAAA,sBAAA,EAAA,IAAA,IAAA,gBDsIV,eEtLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAKF,YEvLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAMF,eExLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAOF,cEzLI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF8KF,aAAA,QAeF,UEjMI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFuMJ,cE3MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFwMJ,sBE5MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFyMJ,mBE7MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF0MJ,sBE9MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF2MJ,qBE/MI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF+MJ,sBElLI,iBAAA,yKACA,iBAAA,oKACA,iBAAA,iKFyLJ,YACE,cAAA,IC9KA,mBAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,EAAA,IAAA,IAAA,iBDgLV,wBAAA,8BAAA,8BAGE,YAAA,EAAA,KAAA,EAAA,QEnOE,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFiOF,aAAA,QALF,+BAAA,qCAAA,qCAQI,YAAA,KAUJ,OCnME,mBAAA,EAAA,IAAA,IAAA,gBACQ,WAAA,EAAA,IAAA,IAAA,gBD4MV,8BE5PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFyPJ,8BE7PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF0PJ,8BE9PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF2PJ,2BE/PI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF4PJ,8BEhQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SF6PJ,6BEjQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFoQJ,MExQI,iBAAA,oDACA,iBAAA,+CACA,iBAAA,wEAAA,iBAAA,kDACA,OAAA,+GACA,kBAAA,SFsQF,aAAA,QC3NA,mBAAA,MAAA,EAAA,IAAA,IAAA,gBAAA,EAAA,IAAA,EAAA,qBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,gBAAA,EAAA,IAAA,EAAA","sourcesContent":["/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n//\n// Load core variables and mixins\n// --------------------------------------------------\n\n@import \"variables.less\";\n@import \"mixins.less\";\n\n\n//\n// Buttons\n// --------------------------------------------------\n\n// Common styles\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n text-shadow: 0 -1px 0 rgba(0,0,0,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 1px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n // Reset the shadow\n &:active,\n &.active {\n .box-shadow(inset 0 3px 5px rgba(0,0,0,.125));\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n .box-shadow(none);\n }\n\n .badge {\n text-shadow: none;\n }\n}\n\n// Mixin for generating new styles\n.btn-styles(@btn-color: #555) {\n #gradient > .vertical(@start-color: @btn-color; @end-color: darken(@btn-color, 12%));\n .reset-filter(); // Disable gradients for IE9 because filter bleeds through rounded corners; see https://github.com/twbs/bootstrap/issues/10620\n background-repeat: repeat-x;\n border-color: darken(@btn-color, 14%);\n\n &:hover,\n &:focus {\n background-color: darken(@btn-color, 12%);\n background-position: 0 -15px;\n }\n\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n border-color: darken(@btn-color, 14%);\n }\n\n &.disabled,\n &[disabled],\n fieldset[disabled] & {\n &,\n &:hover,\n &:focus,\n &.focus,\n &:active,\n &.active {\n background-color: darken(@btn-color, 12%);\n background-image: none;\n }\n }\n}\n\n// Common styles\n.btn {\n // Remove the gradient for the pressed/active state\n &:active,\n &.active {\n background-image: none;\n }\n}\n\n// Apply the mixin to the buttons\n.btn-default { .btn-styles(@btn-default-bg); text-shadow: 0 1px 0 #fff; border-color: #ccc; }\n.btn-primary { .btn-styles(@btn-primary-bg); }\n.btn-success { .btn-styles(@btn-success-bg); }\n.btn-info { .btn-styles(@btn-info-bg); }\n.btn-warning { .btn-styles(@btn-warning-bg); }\n.btn-danger { .btn-styles(@btn-danger-bg); }\n\n\n//\n// Images\n// --------------------------------------------------\n\n.thumbnail,\n.img-thumbnail {\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n\n\n//\n// Dropdowns\n// --------------------------------------------------\n\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%));\n background-color: darken(@dropdown-link-hover-bg, 5%);\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n background-color: darken(@dropdown-link-active-bg, 5%);\n}\n\n\n//\n// Navbar\n// --------------------------------------------------\n\n// Default navbar\n.navbar-default {\n #gradient > .vertical(@start-color: lighten(@navbar-default-bg, 10%); @end-color: @navbar-default-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered\n border-radius: @navbar-border-radius;\n @shadow: inset 0 1px 0 rgba(255,255,255,.15), 0 1px 5px rgba(0,0,0,.075);\n .box-shadow(@shadow);\n\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: darken(@navbar-default-link-active-bg, 5%); @end-color: darken(@navbar-default-link-active-bg, 2%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.075));\n }\n}\n.navbar-brand,\n.navbar-nav > li > a {\n text-shadow: 0 1px 0 rgba(255,255,255,.25);\n}\n\n// Inverted navbar\n.navbar-inverse {\n #gradient > .vertical(@start-color: lighten(@navbar-inverse-bg, 10%); @end-color: @navbar-inverse-bg);\n .reset-filter(); // Remove gradient in IE<10 to fix bug where dropdowns don't get triggered; see https://github.com/twbs/bootstrap/issues/10257\n border-radius: @navbar-border-radius;\n .navbar-nav > .open > a,\n .navbar-nav > .active > a {\n #gradient > .vertical(@start-color: @navbar-inverse-link-active-bg; @end-color: lighten(@navbar-inverse-link-active-bg, 2.5%));\n .box-shadow(inset 0 3px 9px rgba(0,0,0,.25));\n }\n\n .navbar-brand,\n .navbar-nav > li > a {\n text-shadow: 0 -1px 0 rgba(0,0,0,.25);\n }\n}\n\n// Undo rounded corners in static and fixed navbars\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n border-radius: 0;\n}\n\n// Fix active state of dropdown items in collapsed mode\n@media (max-width: @grid-float-breakpoint-max) {\n .navbar .navbar-nav .open .dropdown-menu > .active > a {\n &,\n &:hover,\n &:focus {\n color: #fff;\n #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%));\n }\n }\n}\n\n\n//\n// Alerts\n// --------------------------------------------------\n\n// Common styles\n.alert {\n text-shadow: 0 1px 0 rgba(255,255,255,.2);\n @shadow: inset 0 1px 0 rgba(255,255,255,.25), 0 1px 2px rgba(0,0,0,.05);\n .box-shadow(@shadow);\n}\n\n// Mixin for generating new styles\n.alert-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 7.5%));\n border-color: darken(@color, 15%);\n}\n\n// Apply the mixin to the alerts\n.alert-success { .alert-styles(@alert-success-bg); }\n.alert-info { .alert-styles(@alert-info-bg); }\n.alert-warning { .alert-styles(@alert-warning-bg); }\n.alert-danger { .alert-styles(@alert-danger-bg); }\n\n\n//\n// Progress bars\n// --------------------------------------------------\n\n// Give the progress background some depth\n.progress {\n #gradient > .vertical(@start-color: darken(@progress-bg, 4%); @end-color: @progress-bg)\n}\n\n// Mixin for generating new styles\n.progress-bar-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 10%));\n}\n\n// Apply the mixin to the progress bars\n.progress-bar { .progress-bar-styles(@progress-bar-bg); }\n.progress-bar-success { .progress-bar-styles(@progress-bar-success-bg); }\n.progress-bar-info { .progress-bar-styles(@progress-bar-info-bg); }\n.progress-bar-warning { .progress-bar-styles(@progress-bar-warning-bg); }\n.progress-bar-danger { .progress-bar-styles(@progress-bar-danger-bg); }\n\n// Reset the striped class because our mixins don't do multiple gradients and\n// the above custom styles override the new `.progress-bar-striped` in v3.2.0.\n.progress-bar-striped {\n #gradient > .striped();\n}\n\n\n//\n// List groups\n// --------------------------------------------------\n\n.list-group {\n border-radius: @border-radius-base;\n .box-shadow(0 1px 2px rgba(0,0,0,.075));\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n text-shadow: 0 -1px 0 darken(@list-group-active-bg, 10%);\n #gradient > .vertical(@start-color: @list-group-active-bg; @end-color: darken(@list-group-active-bg, 7.5%));\n border-color: darken(@list-group-active-border, 7.5%);\n\n .badge {\n text-shadow: none;\n }\n}\n\n\n//\n// Panels\n// --------------------------------------------------\n\n// Common styles\n.panel {\n .box-shadow(0 1px 2px rgba(0,0,0,.05));\n}\n\n// Mixin for generating new styles\n.panel-heading-styles(@color) {\n #gradient > .vertical(@start-color: @color; @end-color: darken(@color, 5%));\n}\n\n// Apply the mixin to the panel headings only\n.panel-default > .panel-heading { .panel-heading-styles(@panel-default-heading-bg); }\n.panel-primary > .panel-heading { .panel-heading-styles(@panel-primary-heading-bg); }\n.panel-success > .panel-heading { .panel-heading-styles(@panel-success-heading-bg); }\n.panel-info > .panel-heading { .panel-heading-styles(@panel-info-heading-bg); }\n.panel-warning > .panel-heading { .panel-heading-styles(@panel-warning-heading-bg); }\n.panel-danger > .panel-heading { .panel-heading-styles(@panel-danger-heading-bg); }\n\n\n//\n// Wells\n// --------------------------------------------------\n\n.well {\n #gradient > .vertical(@start-color: darken(@well-bg, 5%); @end-color: @well-bg);\n border-color: darken(@well-bg, 10%);\n @shadow: inset 0 1px 3px rgba(0,0,0,.05), 0 1px 0 rgba(255,255,255,.1);\n .box-shadow(@shadow);\n}\n","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They have been removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility) {\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// Gradients\n\n#gradient {\n\n // Horizontal gradient, from left to right\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n // Vertical gradient, from top to bottom\n //\n // Creates two color stops, start and end, by specifying a color and position for each color stop.\n // Color stops are not available in IE9 and below.\n .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) {\n background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Opera 12\n background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n background-repeat: repeat-x;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down\n }\n\n .directional(@start-color: #555; @end-color: #333; @deg: 45deg) {\n background-repeat: repeat-x;\n background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+\n background-image: -o-linear-gradient(@deg, @start-color, @end-color); // Opera 12\n background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10, Firefox 16+, Opera 12.10+, Safari 7+, Chrome 26+\n }\n .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) {\n background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: -o-linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color);\n background-repeat: no-repeat;\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)\",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback\n }\n .radial(@inner-color: #555; @outer-color: #333) {\n background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color);\n background-image: radial-gradient(circle, @inner-color, @outer-color);\n background-repeat: no-repeat;\n }\n .striped(@color: rgba(255,255,255,.15); @angle: 45deg) {\n background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent);\n }\n}\n","// Reset filters for IE\n//\n// When you need to remove a gradient background, do not forget to use this to reset\n// the IE filter for IE9 and below.\n\n.reset-filter() {\n filter: e(%(\"progid:DXImageTransform.Microsoft.gradient(enabled = false)\"));\n}\n"]}
--------------------------------------------------------------------------------
/webui/static/css/jquery.dataTables.css:
--------------------------------------------------------------------------------
1 | /*
2 | * Table styles
3 | */
4 | table.dataTable {
5 | width: 100%;
6 | margin: 0 auto;
7 | clear: both;
8 | border-collapse: separate;
9 | border-spacing: 0;
10 | /*
11 | * Header and footer styles
12 | */
13 | /*
14 | * Body styles
15 | */
16 | }
17 | table.dataTable thead th,
18 | table.dataTable tfoot th {
19 | font-weight: bold;
20 | }
21 | table.dataTable thead th,
22 | table.dataTable thead td {
23 | padding: 10px 18px;
24 | border-bottom: 1px solid #111;
25 | }
26 | table.dataTable thead th:active,
27 | table.dataTable thead td:active {
28 | outline: none;
29 | }
30 | table.dataTable tfoot th,
31 | table.dataTable tfoot td {
32 | padding: 10px 18px 6px 18px;
33 | border-top: 1px solid #111;
34 | }
35 | table.dataTable thead .sorting,
36 | table.dataTable thead .sorting_asc,
37 | table.dataTable thead .sorting_desc {
38 | cursor: pointer;
39 | *cursor: hand;
40 | }
41 | table.dataTable thead .sorting,
42 | table.dataTable thead .sorting_asc,
43 | table.dataTable thead .sorting_desc,
44 | table.dataTable thead .sorting_asc_disabled,
45 | table.dataTable thead .sorting_desc_disabled {
46 | background-repeat: no-repeat;
47 | background-position: center right;
48 | }
49 | table.dataTable thead .sorting {
50 | background-image: url("../images/sort_both.png");
51 | }
52 | table.dataTable thead .sorting_asc {
53 | background-image: url("../images/sort_asc.png");
54 | }
55 | table.dataTable thead .sorting_desc {
56 | background-image: url("../images/sort_desc.png");
57 | }
58 | table.dataTable thead .sorting_asc_disabled {
59 | background-image: url("../images/sort_asc_disabled.png");
60 | }
61 | table.dataTable thead .sorting_desc_disabled {
62 | background-image: url("../images/sort_desc_disabled.png");
63 | }
64 | table.dataTable tbody tr {
65 | background-color: #ffffff;
66 | }
67 | table.dataTable tbody tr.selected {
68 | background-color: #B0BED9;
69 | }
70 | table.dataTable tbody th,
71 | table.dataTable tbody td {
72 | padding: 8px 10px;
73 | }
74 | table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td {
75 | border-top: 1px solid #ddd;
76 | }
77 | table.dataTable.row-border tbody tr:first-child th,
78 | table.dataTable.row-border tbody tr:first-child td, table.dataTable.display tbody tr:first-child th,
79 | table.dataTable.display tbody tr:first-child td {
80 | border-top: none;
81 | }
82 | table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td {
83 | border-top: 1px solid #ddd;
84 | border-right: 1px solid #ddd;
85 | }
86 | table.dataTable.cell-border tbody tr th:first-child,
87 | table.dataTable.cell-border tbody tr td:first-child {
88 | border-left: 1px solid #ddd;
89 | }
90 | table.dataTable.cell-border tbody tr:first-child th,
91 | table.dataTable.cell-border tbody tr:first-child td {
92 | border-top: none;
93 | }
94 | table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd {
95 | background-color: #f9f9f9;
96 | }
97 | table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected {
98 | background-color: #acbad4;
99 | }
100 | table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover {
101 | background-color: #f6f6f6;
102 | }
103 | table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected {
104 | background-color: #aab7d1;
105 | }
106 | table.dataTable.order-column tbody tr > .sorting_1,
107 | table.dataTable.order-column tbody tr > .sorting_2,
108 | table.dataTable.order-column tbody tr > .sorting_3, table.dataTable.display tbody tr > .sorting_1,
109 | table.dataTable.display tbody tr > .sorting_2,
110 | table.dataTable.display tbody tr > .sorting_3 {
111 | background-color: #fafafa;
112 | }
113 | table.dataTable.order-column tbody tr.selected > .sorting_1,
114 | table.dataTable.order-column tbody tr.selected > .sorting_2,
115 | table.dataTable.order-column tbody tr.selected > .sorting_3, table.dataTable.display tbody tr.selected > .sorting_1,
116 | table.dataTable.display tbody tr.selected > .sorting_2,
117 | table.dataTable.display tbody tr.selected > .sorting_3 {
118 | background-color: #acbad5;
119 | }
120 | table.dataTable.display tbody tr.odd > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd > .sorting_1 {
121 | background-color: #f1f1f1;
122 | }
123 | table.dataTable.display tbody tr.odd > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd > .sorting_2 {
124 | background-color: #f3f3f3;
125 | }
126 | table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd > .sorting_3 {
127 | background-color: whitesmoke;
128 | }
129 | table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 {
130 | background-color: #a6b4cd;
131 | }
132 | table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 {
133 | background-color: #a8b5cf;
134 | }
135 | table.dataTable.display tbody tr.odd.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_3 {
136 | background-color: #a9b7d1;
137 | }
138 | table.dataTable.display tbody tr.even > .sorting_1, table.dataTable.order-column.stripe tbody tr.even > .sorting_1 {
139 | background-color: #fafafa;
140 | }
141 | table.dataTable.display tbody tr.even > .sorting_2, table.dataTable.order-column.stripe tbody tr.even > .sorting_2 {
142 | background-color: #fcfcfc;
143 | }
144 | table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column.stripe tbody tr.even > .sorting_3 {
145 | background-color: #fefefe;
146 | }
147 | table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 {
148 | background-color: #acbad5;
149 | }
150 | table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 {
151 | background-color: #aebcd6;
152 | }
153 | table.dataTable.display tbody tr.even.selected > .sorting_3, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_3 {
154 | background-color: #afbdd8;
155 | }
156 | table.dataTable.display tbody tr:hover > .sorting_1, table.dataTable.order-column.hover tbody tr:hover > .sorting_1 {
157 | background-color: #eaeaea;
158 | }
159 | table.dataTable.display tbody tr:hover > .sorting_2, table.dataTable.order-column.hover tbody tr:hover > .sorting_2 {
160 | background-color: #ececec;
161 | }
162 | table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-column.hover tbody tr:hover > .sorting_3 {
163 | background-color: #efefef;
164 | }
165 | table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 {
166 | background-color: #a2aec7;
167 | }
168 | table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 {
169 | background-color: #a3b0c9;
170 | }
171 | table.dataTable.display tbody tr:hover.selected > .sorting_3, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_3 {
172 | background-color: #a5b2cb;
173 | }
174 | table.dataTable.no-footer {
175 | border-bottom: 1px solid #111;
176 | }
177 | table.dataTable.nowrap th, table.dataTable.nowrap td {
178 | white-space: nowrap;
179 | }
180 | table.dataTable.compact thead th,
181 | table.dataTable.compact thead td {
182 | padding: 4px 17px 4px 4px;
183 | }
184 | table.dataTable.compact tfoot th,
185 | table.dataTable.compact tfoot td {
186 | padding: 4px;
187 | }
188 | table.dataTable.compact tbody th,
189 | table.dataTable.compact tbody td {
190 | padding: 4px;
191 | }
192 | table.dataTable th.dt-left,
193 | table.dataTable td.dt-left {
194 | text-align: left;
195 | }
196 | table.dataTable th.dt-center,
197 | table.dataTable td.dt-center,
198 | table.dataTable td.dataTables_empty {
199 | text-align: center;
200 | }
201 | table.dataTable th.dt-right,
202 | table.dataTable td.dt-right {
203 | text-align: right;
204 | }
205 | table.dataTable th.dt-justify,
206 | table.dataTable td.dt-justify {
207 | text-align: justify;
208 | }
209 | table.dataTable th.dt-nowrap,
210 | table.dataTable td.dt-nowrap {
211 | white-space: nowrap;
212 | }
213 | table.dataTable thead th.dt-head-left,
214 | table.dataTable thead td.dt-head-left,
215 | table.dataTable tfoot th.dt-head-left,
216 | table.dataTable tfoot td.dt-head-left {
217 | text-align: left;
218 | }
219 | table.dataTable thead th.dt-head-center,
220 | table.dataTable thead td.dt-head-center,
221 | table.dataTable tfoot th.dt-head-center,
222 | table.dataTable tfoot td.dt-head-center {
223 | text-align: center;
224 | }
225 | table.dataTable thead th.dt-head-right,
226 | table.dataTable thead td.dt-head-right,
227 | table.dataTable tfoot th.dt-head-right,
228 | table.dataTable tfoot td.dt-head-right {
229 | text-align: right;
230 | }
231 | table.dataTable thead th.dt-head-justify,
232 | table.dataTable thead td.dt-head-justify,
233 | table.dataTable tfoot th.dt-head-justify,
234 | table.dataTable tfoot td.dt-head-justify {
235 | text-align: justify;
236 | }
237 | table.dataTable thead th.dt-head-nowrap,
238 | table.dataTable thead td.dt-head-nowrap,
239 | table.dataTable tfoot th.dt-head-nowrap,
240 | table.dataTable tfoot td.dt-head-nowrap {
241 | white-space: nowrap;
242 | }
243 | table.dataTable tbody th.dt-body-left,
244 | table.dataTable tbody td.dt-body-left {
245 | text-align: left;
246 | }
247 | table.dataTable tbody th.dt-body-center,
248 | table.dataTable tbody td.dt-body-center {
249 | text-align: center;
250 | }
251 | table.dataTable tbody th.dt-body-right,
252 | table.dataTable tbody td.dt-body-right {
253 | text-align: right;
254 | }
255 | table.dataTable tbody th.dt-body-justify,
256 | table.dataTable tbody td.dt-body-justify {
257 | text-align: justify;
258 | }
259 | table.dataTable tbody th.dt-body-nowrap,
260 | table.dataTable tbody td.dt-body-nowrap {
261 | white-space: nowrap;
262 | }
263 |
264 | table.dataTable,
265 | table.dataTable th,
266 | table.dataTable td {
267 | -webkit-box-sizing: content-box;
268 | box-sizing: content-box;
269 | }
270 |
271 | /*
272 | * Control feature layout
273 | */
274 | .dataTables_wrapper {
275 | position: relative;
276 | clear: both;
277 | *zoom: 1;
278 | zoom: 1;
279 | }
280 | .dataTables_wrapper .dataTables_length {
281 | float: left;
282 | }
283 | .dataTables_wrapper .dataTables_filter {
284 | float: right;
285 | text-align: right;
286 | }
287 | .dataTables_wrapper .dataTables_filter input {
288 | margin-left: 0.5em;
289 | }
290 | .dataTables_wrapper .dataTables_info {
291 | clear: both;
292 | float: left;
293 | padding-top: 0.755em;
294 | }
295 | .dataTables_wrapper .dataTables_paginate {
296 | float: right;
297 | text-align: right;
298 | padding-top: 0.25em;
299 | }
300 | .dataTables_wrapper .dataTables_paginate .paginate_button {
301 | box-sizing: border-box;
302 | display: inline-block;
303 | min-width: 1.5em;
304 | padding: 0.5em 1em;
305 | margin-left: 2px;
306 | text-align: center;
307 | text-decoration: none !important;
308 | cursor: pointer;
309 | *cursor: hand;
310 | color: #333 !important;
311 | border: 1px solid transparent;
312 | border-radius: 2px;
313 | }
314 | .dataTables_wrapper .dataTables_paginate .paginate_button.current, .dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {
315 | color: #333 !important;
316 | border: 1px solid #979797;
317 | background-color: white;
318 | background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, white), color-stop(100%, #dcdcdc));
319 | /* Chrome,Safari4+ */
320 | background: -webkit-linear-gradient(top, white 0%, #dcdcdc 100%);
321 | /* Chrome10+,Safari5.1+ */
322 | background: -moz-linear-gradient(top, white 0%, #dcdcdc 100%);
323 | /* FF3.6+ */
324 | background: -ms-linear-gradient(top, white 0%, #dcdcdc 100%);
325 | /* IE10+ */
326 | background: -o-linear-gradient(top, white 0%, #dcdcdc 100%);
327 | /* Opera 11.10+ */
328 | background: linear-gradient(to bottom, white 0%, #dcdcdc 100%);
329 | /* W3C */
330 | }
331 | .dataTables_wrapper .dataTables_paginate .paginate_button.disabled, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover, .dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active {
332 | cursor: default;
333 | color: #666 !important;
334 | border: 1px solid transparent;
335 | background: transparent;
336 | box-shadow: none;
337 | }
338 | .dataTables_wrapper .dataTables_paginate .paginate_button:hover {
339 | color: white !important;
340 | border: 1px solid #111;
341 | background-color: #585858;
342 | background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));
343 | /* Chrome,Safari4+ */
344 | background: -webkit-linear-gradient(top, #585858 0%, #111 100%);
345 | /* Chrome10+,Safari5.1+ */
346 | background: -moz-linear-gradient(top, #585858 0%, #111 100%);
347 | /* FF3.6+ */
348 | background: -ms-linear-gradient(top, #585858 0%, #111 100%);
349 | /* IE10+ */
350 | background: -o-linear-gradient(top, #585858 0%, #111 100%);
351 | /* Opera 11.10+ */
352 | background: linear-gradient(to bottom, #585858 0%, #111 100%);
353 | /* W3C */
354 | }
355 | .dataTables_wrapper .dataTables_paginate .paginate_button:active {
356 | outline: none;
357 | background-color: #2b2b2b;
358 | background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));
359 | /* Chrome,Safari4+ */
360 | background: -webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
361 | /* Chrome10+,Safari5.1+ */
362 | background: -moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
363 | /* FF3.6+ */
364 | background: -ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
365 | /* IE10+ */
366 | background: -o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);
367 | /* Opera 11.10+ */
368 | background: linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);
369 | /* W3C */
370 | box-shadow: inset 0 0 3px #111;
371 | }
372 | .dataTables_wrapper .dataTables_paginate .ellipsis {
373 | padding: 0 1em;
374 | }
375 | .dataTables_wrapper .dataTables_processing {
376 | position: absolute;
377 | top: 50%;
378 | left: 50%;
379 | width: 100%;
380 | height: 40px;
381 | margin-left: -50%;
382 | margin-top: -25px;
383 | padding-top: 20px;
384 | text-align: center;
385 | font-size: 1.2em;
386 | background-color: white;
387 | background: -webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255, 255, 255, 0)), color-stop(25%, rgba(255, 255, 255, 0.9)), color-stop(75%, rgba(255, 255, 255, 0.9)), color-stop(100%, rgba(255, 255, 255, 0)));
388 | background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
389 | background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
390 | background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
391 | background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
392 | background: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.9) 25%, rgba(255, 255, 255, 0.9) 75%, rgba(255, 255, 255, 0) 100%);
393 | }
394 | .dataTables_wrapper .dataTables_length,
395 | .dataTables_wrapper .dataTables_filter,
396 | .dataTables_wrapper .dataTables_info,
397 | .dataTables_wrapper .dataTables_processing,
398 | .dataTables_wrapper .dataTables_paginate {
399 | color: #333;
400 | }
401 | .dataTables_wrapper .dataTables_scroll {
402 | clear: both;
403 | }
404 | .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody {
405 | *margin-top: -1px;
406 | -webkit-overflow-scrolling: touch;
407 | }
408 | .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th, .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td {
409 | vertical-align: middle;
410 | }
411 | .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody th > div.dataTables_sizing,
412 | .dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody td > div.dataTables_sizing {
413 | height: 0;
414 | overflow: hidden;
415 | margin: 0 !important;
416 | padding: 0 !important;
417 | }
418 | .dataTables_wrapper.no-footer .dataTables_scrollBody {
419 | border-bottom: 1px solid #111;
420 | }
421 | .dataTables_wrapper.no-footer div.dataTables_scrollHead table,
422 | .dataTables_wrapper.no-footer div.dataTables_scrollBody table {
423 | border-bottom: none;
424 | }
425 | .dataTables_wrapper:after {
426 | visibility: hidden;
427 | display: block;
428 | content: "";
429 | clear: both;
430 | height: 0;
431 | }
432 |
433 | @media screen and (max-width: 767px) {
434 | .dataTables_wrapper .dataTables_info,
435 | .dataTables_wrapper .dataTables_paginate {
436 | float: none;
437 | text-align: center;
438 | }
439 | .dataTables_wrapper .dataTables_paginate {
440 | margin-top: 0.5em;
441 | }
442 | }
443 | @media screen and (max-width: 640px) {
444 | .dataTables_wrapper .dataTables_length,
445 | .dataTables_wrapper .dataTables_filter {
446 | float: none;
447 | text-align: center;
448 | }
449 | .dataTables_wrapper .dataTables_filter {
450 | margin-top: 0.5em;
451 | }
452 | }
453 |
--------------------------------------------------------------------------------
/webui/static/js/bootstrap.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.3.7 (http://getbootstrap.com)
3 | * Copyright 2011-2016 Twitter, Inc.
4 | * Licensed under the MIT license
5 | */
6 | if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>3)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){if(a(b.target).is(this))return b.handleObj.handler.apply(this,arguments)}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.7",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a("#"===f?[]:f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.7",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c).prop(c,!0)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c).prop(c,!1))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target).closest(".btn");b.call(d,"toggle"),a(c.target).is('input[type="radio"], input[type="checkbox"]')||(c.preventDefault(),d.is("input,button")?d.trigger("focus"):d.find("input:visible,button:visible").first().trigger("focus"))}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.7",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));if(!(a>this.$items.length-1||a<0))return this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){if(!this.sliding)return this.slide("next")},c.prototype.prev=function(){if(!this.sliding)return this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.7",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.7",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&jdocument.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);if(c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),!c.isInStateTrue())return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-mo.width?"left":"left"==h&&k.left-lg.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;jg.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null,a.$element=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;!e&&/destroy|hide/.test(b)||(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.7",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:''}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.7",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b=e[a]&&(void 0===e[a+1]||b .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.7",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return e=a-d&&"bottom"},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
--------------------------------------------------------------------------------
/webui/static/js/npm.js:
--------------------------------------------------------------------------------
1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
2 | require('../../js/transition.js')
3 | require('../../js/alert.js')
4 | require('../../js/button.js')
5 | require('../../js/carousel.js')
6 | require('../../js/collapse.js')
7 | require('../../js/dropdown.js')
8 | require('../../js/modal.js')
9 | require('../../js/tooltip.js')
10 | require('../../js/popover.js')
11 | require('../../js/scrollspy.js')
12 | require('../../js/tab.js')
13 | require('../../js/affix.js')
--------------------------------------------------------------------------------
/webui/templates/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
43 |
44 |
45 |
46 |
47 |
57 |
58 |
59 |
72 |
73 |
74 |
75 |
76 |
77 |
78 | {% for col in columns %}
79 | {{ col }} |
80 | {% endfor %}
81 |
82 |
83 |
84 |
85 |