├── static ├── job.log ├── img │ ├── logo.png │ ├── loading.gif │ ├── MIT_logo.svg.png │ └── mit_csail_logo.png ├── font-awesome-4.7.0 │ ├── fonts │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ └── fontawesome-webfont.woff2 │ ├── less │ │ ├── screen-reader.less │ │ ├── fixed-width.less │ │ ├── larger.less │ │ ├── list.less │ │ ├── core.less │ │ ├── stacked.less │ │ ├── font-awesome.less │ │ ├── bordered-pulled.less │ │ ├── rotated-flipped.less │ │ ├── path.less │ │ ├── animated.less │ │ ├── mixins.less │ │ └── variables.less │ ├── scss │ │ ├── _fixed-width.scss │ │ ├── _screen-reader.scss │ │ ├── _larger.scss │ │ ├── _list.scss │ │ ├── _core.scss │ │ ├── font-awesome.scss │ │ ├── _stacked.scss │ │ ├── _bordered-pulled.scss │ │ ├── _rotated-flipped.scss │ │ ├── _path.scss │ │ ├── _animated.scss │ │ ├── _mixins.scss │ │ └── _variables.scss │ └── HELP-US-OUT.txt └── css │ ├── multiselect.css │ ├── d3_visualization.css │ ├── style.css │ └── bootstrap.css ├── database_temp.ini ├── datasets ├── shuttle.mat └── annthyroid.mat ├── screenshots ├── input.png ├── results.jpg └── architecture.jpg ├── .gitignore ├── requirements.txt ├── templates ├── running_logs.html ├── result_summary.html ├── about.html ├── index.html └── form.html ├── config.py ├── autood_parameters.py ├── README.md ├── connect.py ├── results ├── results_spambase_csv_1659113854.csv ├── results_spambase_csv_1659116425.csv ├── log_spambase_csv_csv_1659980531 ├── log_spambase_csv_csv_1659980693 ├── log_spambase_csv_csv_1659113854 └── log_spambase_csv_csv_1659116425 └── app.py /static/job.log: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /database_temp.ini: -------------------------------------------------------------------------------- 1 | [postgresql] 2 | host= 3 | database= 4 | user= 5 | password= -------------------------------------------------------------------------------- /datasets/shuttle.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/datasets/shuttle.mat -------------------------------------------------------------------------------- /static/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/static/img/logo.png -------------------------------------------------------------------------------- /screenshots/input.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/screenshots/input.png -------------------------------------------------------------------------------- /static/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/static/img/loading.gif -------------------------------------------------------------------------------- /datasets/annthyroid.mat: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/datasets/annthyroid.mat -------------------------------------------------------------------------------- /screenshots/results.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/screenshots/results.jpg -------------------------------------------------------------------------------- /static/img/MIT_logo.svg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/static/img/MIT_logo.svg.png -------------------------------------------------------------------------------- /screenshots/architecture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/screenshots/architecture.jpg -------------------------------------------------------------------------------- /static/img/mit_csail_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/static/img/mit_csail_logo.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | database.ini 2 | data/ 3 | domo_visualization_old/ 4 | experiments/ 5 | files/ 6 | AutoOD_demo.code-workspace 7 | __pycache__/ -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/static/font-awesome-4.7.0/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/static/font-awesome-4.7.0/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/static/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dhofmann34/AutoOD_Demo/HEAD/static/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/less/screen-reader.less: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { .sr-only(); } 5 | .sr-only-focusable { .sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==2.0.3 2 | Flask_Navigation==0.2.0 3 | loguru==0.5.3 4 | numpy==1.22.3 5 | pandas==1.4.2 6 | psycopg2==2.9.3 7 | scikit_learn==1.1.2 8 | scipy==1.7.3 9 | Werkzeug==2.0.3 10 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/scss/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { @include sr-only(); } 5 | .sr-only-focusable { @include sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/HELP-US-OUT.txt: -------------------------------------------------------------------------------- 1 | I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, 2 | Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, 3 | comprehensive icon sets or copy and paste your own. 4 | 5 | Please. Check it out. 6 | 7 | -Dave Gandy 8 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | @import "screen-reader"; 19 | -------------------------------------------------------------------------------- /templates/running_logs.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AutoOD: Automatic Outlier Detection 6 | 7 | 8 |
9 |

AutoOD Running Logs:

10 |
11 |

12 |       
13 |
14 | 15 | -------------------------------------------------------------------------------- /config.py: -------------------------------------------------------------------------------- 1 | from configparser import ConfigParser 2 | 3 | 4 | def config(filename='database.ini', section='postgresql'): 5 | # create a parser 6 | parser = ConfigParser() 7 | # read config file 8 | parser.read(filename) 9 | 10 | # get section, default to postgresql 11 | db = {} 12 | if parser.has_section(section): 13 | params = parser.items(section) 14 | for param in params: 15 | db[param[0]] = param[1] 16 | else: 17 | raise Exception('Section {0} not found in the {1} file'.format(section, filename)) 18 | 19 | return db -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "animated.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | @import "screen-reader.less"; 19 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .@{fa-css-prefix}-pull-left { float: left; } 11 | .@{fa-css-prefix}-pull-right { float: right; } 12 | 13 | .@{fa-css-prefix} { 14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .@{fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .#{$fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), 9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/less/animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .@{fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /autood_parameters.py: -------------------------------------------------------------------------------- 1 | from dataclasses import dataclass 2 | from typing import List 3 | 4 | 5 | @dataclass 6 | class AutoODDefaultParameters: 7 | dataset: str 8 | k_range: List[int] 9 | if_range: List[float] 10 | N_range: List[int] 11 | 12 | 13 | autood_datasets_to_parameters = { 14 | "pageblocks": AutoODDefaultParameters( 15 | dataset="PageBlocks", 16 | k_range=list(range(10, 110, 10)), 17 | if_range=[0.5, 0.6, 0.7, 0.8, 0.9], 18 | N_range=[0.05, 0.07, 0.09, 0.11, 0.13, 0.15] 19 | ) 20 | } 21 | 22 | 23 | def get_default_parameters(dataset): 24 | if dataset in autood_datasets_to_parameters: 25 | return autood_datasets_to_parameters[dataset] 26 | return AutoODDefaultParameters( 27 | dataset=dataset, 28 | k_range=list(range(10, 110, 10)), 29 | if_range=[0.5, 0.6, 0.7, 0.8, 0.9], 30 | N_range=[0.05, 0.07, 0.09, 0.11, 0.13, 0.15] 31 | ) -------------------------------------------------------------------------------- /static/css/multiselect.css: -------------------------------------------------------------------------------- 1 | 2 | .multiselect-container { 3 | position: absolute; 4 | list-style-type: none; 5 | margin: 0; 6 | padding: 0 7 | } 8 | 9 | .multiselect-container .input-group { 10 | margin: 5px 11 | } 12 | 13 | .multiselect-container > li { 14 | padding: 0 15 | } 16 | 17 | .multiselect-container > li > a.multiselect-all label { 18 | font-weight: 700 19 | } 20 | 21 | .multiselect-container > li.multiselect-group label { 22 | margin: 0; 23 | padding: 3px 20px 3px 20px; 24 | height: 100%; 25 | font-weight: 700 26 | } 27 | 28 | .multiselect-container > li.multiselect-group-clickable label { 29 | cursor: pointer 30 | } 31 | 32 | .multiselect-container > li > a { 33 | padding: 0 34 | } 35 | 36 | .multiselect-container > li > a > label { 37 | margin: 0; 38 | height: 100%; 39 | cursor: pointer; 40 | font-weight: 400; 41 | padding: 3px 20px 3px 40px 42 | } 43 | 44 | .multiselect-container > li > a > label.radio, .multiselect-container > li > a > label.checkbox { 45 | margin: 0 46 | } 47 | 48 | .multiselect-container > li > a > label > input[type=checkbox] { 49 | margin-bottom: 5px 50 | } 51 | 52 | .btn-group > .btn-group:nth-child(2) > .multiselect.btn { 53 | border-top-left-radius: 4px; 54 | border-bottom-left-radius: 4px 55 | } 56 | 57 | .form-inline .multiselect-container label.checkbox, .form-inline .multiselect-container label.radio { 58 | padding: 3px 20px 3px 40px 59 | } 60 | 61 | .form-inline .multiselect-container li a label.checkbox input[type=checkbox], .form-inline .multiselect-container li a label.radio input[type=radio] { 62 | margin-left: -20px; 63 | margin-right: 0 64 | } -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | .fa-icon-rotate(@degrees, @rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})"; 16 | -webkit-transform: rotate(@degrees); 17 | -ms-transform: rotate(@degrees); 18 | transform: rotate(@degrees); 19 | } 20 | 21 | .fa-icon-flip(@horiz, @vert, @rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)"; 23 | -webkit-transform: scale(@horiz, @vert); 24 | -ms-transform: scale(@horiz, @vert); 25 | transform: scale(@horiz, @vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | .sr-only() { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | .sr-only-focusable() { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | 12 | } 13 | 14 | @mixin fa-icon-rotate($degrees, $rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; 16 | -webkit-transform: rotate($degrees); 17 | -ms-transform: rotate($degrees); 18 | transform: rotate($degrees); 19 | } 20 | 21 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; 23 | -webkit-transform: scale($horiz, $vert); 24 | -ms-transform: scale($horiz, $vert); 25 | transform: scale($horiz, $vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | @mixin sr-only { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | @mixin sr-only-focusable { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # A Demonstration of AutoOD: A Self-Tuning Anomaly Detection System 2 | 3 | ## About AutoOD: 4 | AutoOD is a self-tuning anomaly detection system to address the challenges of method selection and hyper-parameter tuning while remaining unsupervised. AutoOD frees users from the tedious manual tuning process often required for anomaly detection by intelligently identifying high likelihood inliers and outliers. AutoOD features a responsive visual interface allowing for seamless user interaction providing the user with insightful knowledge of how AutoOD operates. 5 | 6 | AutoOD outperforms the best unsupervised anomaly detection methods, yielding results similar to supervised methods that have access to ground truth labels. 7 | 8 | This work has been accepted for publication at VLDB 2022 (48th International Conference on Very Large Databases) one of the most prestigious conferences in database systems. https://dl.acm.org/doi/abs/10.14778/3554821.3554880 9 | 10 | Current hosted version: https://autood.wpi.edu/ 11 | 12 | This work was supported in part by NSF under grants IIS1910880, CSSI-2103832, CNS-1852498, NRT-HDR-1815866 and by 13 | the U.S. Dept. of Education under grant P200A180088. 14 | 15 | ### AutoOD Architecture: 16 | ![Alt text](https://github.com/dhofmann34/AutoOD_Demo/blob/main/screenshots/architecture.jpg "AutoOD Architecture") 17 | 18 | 19 | ### Input Interface: 20 | ![Alt text](https://github.com/dhofmann34/AutoOD_Demo/blob/main/screenshots/input.png "Input Interface") 21 | Users can upload data, provide their own anomaly detection methods, specify the column of labels, and customize the expected percentage range of anomalies in their dataset. 22 | 23 | ### Data Analytics Display: 24 | ![Alt text](https://github.com/dhofmann34/AutoOD_Demo/blob/main/screenshots/results.jpg "Data Analytics Display") 25 | Users can filter the chart based on metrics provided and interact with points by hovering over them to view summery statistics. Clicking on a point will provide that respective point's anomaly score for each unsupervised detector and attribute values from the input dataset. In addition, by moving the slider through each iteration, the user can watch the reliable object set change, and at any time select a point to view the contribution of each detector to its status. 26 | 27 | ## Instructions: 28 | To run AutoOD, download the code and fill out the "database_temp.ini" file with the information required to connect to a local PostgreSQL database. Once completed rename the file "database.ini". Now running the command "python app.py" in a terminal at the root of the project directory will lunch AutoOD on a local webserver. 29 | 30 | Python version: 3.9.12
31 | Please see requirements.txt for libraries and their versions 32 | 33 | A hosted web version of AutoOD is coming soon. The link will be provided here. 34 | -------------------------------------------------------------------------------- /templates/result_summary.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | STAND: Self-Tuning Anomaly Detection 4 | 5 | 6 | 7 | 8 | 10 | 11 | 12 | 19 | 20 | 21 | 22 | 33 | 34 |
35 |

STAND: Self-Tuning Anomaly Detection

36 |
37 |
38 |

Detection Results

39 |
40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 |
F-1 of AutoOD{{ autood_f1 }}
F-1 of Best Unsupervised Detector{{ best_f1 }}
Best Unsupervised Detector{{best_method}}
F-1 of Majority Vote0.4059131506005544
58 |
59 | 60 | {% if final_results %} 61 |

Download Final Results:

62 | 63 | 64 | 65 | 66 | 67 |
Detection Results:Outlier Results
68 | {% endif %} 69 | 70 | {% if training_log %} 71 |

Download Training Log:

72 | 73 | 74 | 75 | 76 | 77 |
Training Log:Training Log
78 | {% endif %} 79 | 80 |
81 | 82 | 83 |
84 | 85 | -------------------------------------------------------------------------------- /templates/about.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | 13 | About Page 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |

AutoOD: A Self-Tuning Anomaly Detection System

30 | 31 |

32 | About AutoOD: 33 |
34 | AutoOD is a self-tuning anomaly detection system designed to address the challenges of method selection and hyper-parameter tuning while remaining unsupervised. 35 | AutoOD frees users from the tedious manual tuning process often required for anomaly detection by intelligently identifying high likelihood inliers and outliers. 36 | AutoOD features a responsive visual interface allowing for seamless interaction providing the user with insightful knowledge of how AutoOD operates. AutoOD outperforms 37 | the best unsupervised anomaly detection methods, yielding results similar to supervised methods that have access to ground truth labels. 38 |
39 |
40 | This work has been accepted for publication at VLDB 2022 (48th International Conference on Very Large Databases) one of the most prestigious conferences in database systems. 41 |
42 |
43 | Getting Started: 44 | First, upload the dataset you are interested in examining. AutoOD currently accepts CSV and ARFF files. Next, select the unsupervised outlier detection methods you 45 | want to run AutoOD with, and provide the column names for the id column and label column from your dataset. Lastly, input the minimum and maximum percentage range for 46 | the number of outliers you expect are contained within your dataset. 47 |
48 |
49 | The Team: WPI Anomaly Detection 50 |
51 | GitHub AutoOD Demo 52 | 53 |

54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /connect.py: -------------------------------------------------------------------------------- 1 | import pandas as pd 2 | import psycopg2 3 | from config import config 4 | import psycopg2.extras as extras 5 | import numpy as np 6 | from sklearn.manifold import TSNE 7 | 8 | # get data types of our columns 9 | def getColumnDtypes(dataTypes): 10 | dataList = [] 11 | for x in dataTypes: 12 | if(x == 'int64'): 13 | dataList.append('int') 14 | elif (x == 'float64'): 15 | dataList.append('float') 16 | elif (x == 'bool'): 17 | dataList.append('boolean') 18 | else: 19 | dataList.append('varchar') 20 | return dataList 21 | 22 | # create input table in DB 23 | def create_input_table(data): 24 | conn = None 25 | try: 26 | # read connection parameters 27 | params = config() # get DB info from config.py 28 | 29 | # connect to the PostgreSQL server 30 | print('Connecting to the PostgreSQL database...') 31 | conn = psycopg2.connect(**params) 32 | cur = conn.cursor() # create a cursor 33 | 34 | cur.execute(""" 35 | DROP TABLE 36 | detectors, 37 | predictions, 38 | reliable, 39 | tsne, 40 | input 41 | """) 42 | 43 | cur.execute('CREATE TABLE detectors (id integer, detector text, k integer, n integer, prediction integer, score float);') 44 | cur.execute('CREATE TABLE predictions (id integer, prediction integer, correct integer);') 45 | cur.execute('CREATE TABLE reliable (id integer, iteration integer, reliable integer);') 46 | cur.execute('CREATE TABLE tsne (id integer, tsne1 float, tsne2 float);') 47 | 48 | 49 | columnName = list(data.columns.values) 50 | columnDataType = getColumnDtypes(data.dtypes) 51 | createTableStatement = 'CREATE TABLE IF NOT EXISTS input (' 52 | for i in range(len(columnDataType)): 53 | createTableStatement = createTableStatement + str(columnName[i]) + ' ' + columnDataType[i] + ',' 54 | createTableStatement = createTableStatement[:-1] + ' );' 55 | cur.execute(createTableStatement) 56 | conn.commit() 57 | cur.close() # close the communication with the PostgreSQL 58 | 59 | except (Exception, psycopg2.DatabaseError) as error: 60 | print(error) 61 | 62 | finally: 63 | if conn is not None: 64 | conn.close() 65 | print('Database connection closed, inserted successfully.') 66 | 67 | 68 | def insert_input(table, data): # we can use this fucntion to add to our databse. params: table name and values. THen call this functions from autood 69 | """ Takes df, connects to the PostgreSQL database server, uploads to postgres """ 70 | conn = None 71 | try: 72 | # read connection parameters 73 | params = config() # get DB info from config.py 74 | 75 | # connect to the PostgreSQL server 76 | print('Connecting to the PostgreSQL database...') 77 | conn = psycopg2.connect(**params) 78 | 79 | cur = conn.cursor() # create a cursor 80 | 81 | cols = ','.join(list(data.columns)) 82 | query = "INSERT INTO %s(%s) VALUES %%s" % (table, cols) 83 | tuples = [tuple(x) for x in data.to_numpy()] 84 | extras.execute_values(cur, query, tuples) 85 | conn.commit() 86 | cur.close() # close the communication with the PostgreSQL 87 | 88 | except (Exception, psycopg2.DatabaseError) as error: 89 | print(error) 90 | 91 | finally: 92 | if conn is not None: 93 | conn.close() 94 | print('Database connection closed, inserted successfully.') 95 | 96 | def insert_tsne(table, data, label_col_name, index_col_name): 97 | id = data[index_col_name] 98 | data = data.drop(index_col_name, 1) 99 | data = data.drop(label_col_name, 1) 100 | tsne = TSNE(n_components=2, learning_rate = "auto", perplexity = 5, verbose=1, early_exaggeration = 12, random_state=123) # perplexity for pagblocks: 30 101 | fit = tsne.fit_transform(data) 102 | fit_df = pd.DataFrame() 103 | fit_df["id"] = id 104 | fit_df["tsne1"] = fit[:,0] 105 | fit_df["tsne2"] = fit[:,1] 106 | insert_input(table, fit_df) 107 | 108 | 109 | 110 | 111 | 112 | 113 | # if __name__ == '__main__': 114 | # connect() -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | 13 | AutoOD Results 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
31 |
32 | 33 | 34 |
35 |

36 |
37 |

38 | 39 |
40 |
41 |
42 | 43 |
44 |
Filtering:
45 | 46 |
47 |
48 | 49 | 50 |
51 |
52 | 53 | 54 |
55 |
56 | 57 | 58 |
59 |
60 | 61 | 66 | 67 |
68 | 69 | 73 | 74 | 75 | 76 | 98 | 99 | 100 | 101 | 102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 | 112 | 113 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /results/results_spambase_csv_1659113854.csv: -------------------------------------------------------------------------------- 1 | ,0 2 | 0,0 3 | 1,0 4 | 2,0 5 | 3,0 6 | 4,0 7 | 5,1 8 | 6,1 9 | 7,1 10 | 8,0 11 | 9,1 12 | 10,0 13 | 11,0 14 | 12,1 15 | 13,1 16 | 14,0 17 | 15,0 18 | 16,0 19 | 17,1 20 | 18,0 21 | 19,0 22 | 20,0 23 | 21,0 24 | 22,0 25 | 23,1 26 | 24,0 27 | 25,1 28 | 26,1 29 | 27,0 30 | 28,1 31 | 29,0 32 | 30,0 33 | 31,0 34 | 32,1 35 | 33,0 36 | 34,1 37 | 35,0 38 | 36,0 39 | 37,0 40 | 38,1 41 | 39,1 42 | 40,1 43 | 41,0 44 | 42,0 45 | 43,1 46 | 44,0 47 | 45,1 48 | 46,0 49 | 47,0 50 | 48,0 51 | 49,1 52 | 50,1 53 | 51,0 54 | 52,0 55 | 53,1 56 | 54,1 57 | 55,0 58 | 56,1 59 | 57,0 60 | 58,1 61 | 59,0 62 | 60,1 63 | 61,0 64 | 62,1 65 | 63,0 66 | 64,1 67 | 65,0 68 | 66,1 69 | 67,1 70 | 68,0 71 | 69,0 72 | 70,0 73 | 71,1 74 | 72,1 75 | 73,0 76 | 74,0 77 | 75,0 78 | 76,0 79 | 77,0 80 | 78,0 81 | 79,0 82 | 80,0 83 | 81,1 84 | 82,0 85 | 83,0 86 | 84,1 87 | 85,1 88 | 86,1 89 | 87,0 90 | 88,0 91 | 89,0 92 | 90,1 93 | 91,0 94 | 92,0 95 | 93,0 96 | 94,0 97 | 95,1 98 | 96,0 99 | 97,0 100 | 98,0 101 | 99,0 102 | 100,0 103 | 101,1 104 | 102,1 105 | 103,0 106 | 104,0 107 | 105,0 108 | 106,0 109 | 107,0 110 | 108,0 111 | 109,1 112 | 110,0 113 | 111,0 114 | 112,0 115 | 113,0 116 | 114,1 117 | 115,1 118 | 116,0 119 | 117,0 120 | 118,0 121 | 119,0 122 | 120,1 123 | 121,0 124 | 122,0 125 | 123,0 126 | 124,0 127 | 125,1 128 | 126,1 129 | 127,0 130 | 128,0 131 | 129,1 132 | 130,0 133 | 131,1 134 | 132,0 135 | 133,0 136 | 134,0 137 | 135,0 138 | 136,0 139 | 137,1 140 | 138,0 141 | 139,0 142 | 140,0 143 | 141,0 144 | 142,0 145 | 143,0 146 | 144,1 147 | 145,0 148 | 146,0 149 | 147,1 150 | 148,1 151 | 149,0 152 | 150,0 153 | 151,1 154 | 152,0 155 | 153,0 156 | 154,0 157 | 155,0 158 | 156,0 159 | 157,0 160 | 158,0 161 | 159,1 162 | 160,1 163 | 161,1 164 | 162,1 165 | 163,0 166 | 164,1 167 | 165,0 168 | 166,1 169 | 167,0 170 | 168,0 171 | 169,0 172 | 170,0 173 | 171,0 174 | 172,1 175 | 173,1 176 | 174,1 177 | 175,0 178 | 176,1 179 | 177,0 180 | 178,0 181 | 179,1 182 | 180,0 183 | 181,0 184 | 182,0 185 | 183,1 186 | 184,0 187 | 185,0 188 | 186,1 189 | 187,1 190 | 188,1 191 | 189,1 192 | 190,0 193 | 191,0 194 | 192,0 195 | 193,0 196 | 194,1 197 | 195,1 198 | 196,0 199 | 197,0 200 | 198,0 201 | 199,1 202 | 200,1 203 | 201,0 204 | 202,0 205 | 203,0 206 | 204,1 207 | 205,0 208 | 206,0 209 | 207,0 210 | 208,1 211 | 209,0 212 | 210,0 213 | 211,0 214 | 212,1 215 | 213,1 216 | 214,0 217 | 215,1 218 | 216,0 219 | 217,0 220 | 218,0 221 | 219,0 222 | 220,0 223 | 221,1 224 | 222,0 225 | 223,1 226 | 224,0 227 | 225,1 228 | 226,0 229 | 227,1 230 | 228,0 231 | 229,0 232 | 230,1 233 | 231,0 234 | 232,0 235 | 233,0 236 | 234,0 237 | 235,1 238 | 236,0 239 | 237,0 240 | 238,0 241 | 239,0 242 | 240,0 243 | 241,0 244 | 242,0 245 | 243,0 246 | 244,0 247 | 245,0 248 | 246,0 249 | 247,0 250 | 248,0 251 | 249,1 252 | 250,0 253 | 251,0 254 | 252,0 255 | 253,1 256 | 254,0 257 | 255,1 258 | 256,1 259 | 257,1 260 | 258,0 261 | 259,1 262 | 260,0 263 | 261,0 264 | 262,1 265 | 263,1 266 | 264,1 267 | 265,0 268 | 266,0 269 | 267,0 270 | 268,0 271 | 269,0 272 | 270,1 273 | 271,0 274 | 272,1 275 | 273,1 276 | 274,0 277 | 275,1 278 | 276,0 279 | 277,0 280 | 278,1 281 | 279,1 282 | 280,1 283 | 281,0 284 | 282,1 285 | 283,0 286 | 284,1 287 | 285,0 288 | 286,1 289 | 287,1 290 | 288,0 291 | 289,0 292 | 290,1 293 | 291,0 294 | 292,0 295 | 293,0 296 | 294,0 297 | 295,1 298 | 296,1 299 | 297,1 300 | 298,0 301 | 299,0 302 | 300,1 303 | 301,0 304 | 302,0 305 | 303,1 306 | 304,1 307 | 305,0 308 | 306,1 309 | 307,0 310 | 308,1 311 | 309,1 312 | 310,1 313 | 311,1 314 | 312,0 315 | 313,0 316 | 314,0 317 | 315,0 318 | 316,1 319 | 317,1 320 | 318,0 321 | 319,0 322 | 320,0 323 | 321,1 324 | 322,0 325 | 323,1 326 | 324,1 327 | 325,0 328 | 326,0 329 | 327,1 330 | 328,1 331 | 329,1 332 | 330,1 333 | 331,0 334 | 332,1 335 | 333,0 336 | 334,1 337 | 335,1 338 | 336,1 339 | 337,1 340 | 338,0 341 | 339,0 342 | 340,0 343 | 341,1 344 | 342,1 345 | 343,1 346 | 344,0 347 | 345,0 348 | 346,1 349 | 347,1 350 | 348,1 351 | 349,0 352 | 350,1 353 | 351,0 354 | 352,0 355 | 353,0 356 | 354,1 357 | 355,0 358 | 356,0 359 | 357,1 360 | 358,0 361 | 359,1 362 | 360,1 363 | 361,0 364 | 362,1 365 | 363,1 366 | 364,1 367 | 365,0 368 | 366,0 369 | 367,0 370 | 368,1 371 | 369,0 372 | 370,1 373 | 371,0 374 | 372,0 375 | 373,1 376 | 374,1 377 | 375,1 378 | 376,1 379 | 377,0 380 | 378,0 381 | 379,0 382 | 380,0 383 | 381,1 384 | 382,1 385 | 383,1 386 | 384,0 387 | 385,0 388 | 386,0 389 | 387,0 390 | 388,1 391 | 389,0 392 | 390,0 393 | 391,0 394 | 392,0 395 | 393,0 396 | 394,0 397 | 395,1 398 | 396,0 399 | 397,1 400 | 398,1 401 | 399,0 402 | 400,1 403 | 401,1 404 | 402,0 405 | 403,0 406 | 404,0 407 | 405,0 408 | 406,0 409 | 407,1 410 | 408,1 411 | 409,0 412 | 410,0 413 | 411,1 414 | 412,1 415 | 413,0 416 | 414,1 417 | 415,0 418 | 416,1 419 | 417,1 420 | 418,0 421 | 419,0 422 | 420,0 423 | 421,1 424 | 422,1 425 | 423,0 426 | 424,0 427 | 425,1 428 | 426,1 429 | 427,1 430 | 428,0 431 | 429,0 432 | 430,0 433 | 431,1 434 | 432,0 435 | 433,1 436 | 434,1 437 | 435,1 438 | 436,1 439 | 437,0 440 | 438,1 441 | 439,0 442 | 440,1 443 | 441,1 444 | 442,0 445 | 443,1 446 | 444,0 447 | 445,1 448 | 446,1 449 | 447,1 450 | 448,1 451 | 449,1 452 | 450,1 453 | 451,1 454 | 452,0 455 | 453,0 456 | 454,0 457 | 455,1 458 | 456,0 459 | 457,1 460 | 458,1 461 | 459,1 462 | 460,1 463 | 461,0 464 | 462,1 465 | 463,1 466 | 464,0 467 | 465,0 468 | 466,0 469 | 467,0 470 | 468,1 471 | 469,1 472 | 470,0 473 | 471,1 474 | 472,0 475 | 473,0 476 | 474,0 477 | 475,1 478 | 476,0 479 | 477,0 480 | 478,0 481 | 479,1 482 | 480,0 483 | 481,0 484 | 482,1 485 | 483,0 486 | 484,0 487 | 485,1 488 | 486,0 489 | 487,0 490 | 488,0 491 | 489,0 492 | 490,1 493 | 491,0 494 | 492,1 495 | 493,0 496 | 494,0 497 | 495,1 498 | 496,1 499 | 497,0 500 | 498,1 501 | 499,0 502 | -------------------------------------------------------------------------------- /results/results_spambase_csv_1659116425.csv: -------------------------------------------------------------------------------- 1 | ,0 2 | 0,0 3 | 1,0 4 | 2,0 5 | 3,0 6 | 4,0 7 | 5,1 8 | 6,1 9 | 7,1 10 | 8,0 11 | 9,1 12 | 10,1 13 | 11,0 14 | 12,1 15 | 13,1 16 | 14,0 17 | 15,0 18 | 16,0 19 | 17,1 20 | 18,0 21 | 19,1 22 | 20,1 23 | 21,0 24 | 22,1 25 | 23,1 26 | 24,0 27 | 25,1 28 | 26,1 29 | 27,0 30 | 28,1 31 | 29,1 32 | 30,1 33 | 31,0 34 | 32,1 35 | 33,0 36 | 34,1 37 | 35,0 38 | 36,0 39 | 37,1 40 | 38,1 41 | 39,1 42 | 40,1 43 | 41,0 44 | 42,0 45 | 43,1 46 | 44,0 47 | 45,1 48 | 46,0 49 | 47,0 50 | 48,0 51 | 49,1 52 | 50,1 53 | 51,0 54 | 52,0 55 | 53,1 56 | 54,1 57 | 55,0 58 | 56,1 59 | 57,0 60 | 58,1 61 | 59,0 62 | 60,1 63 | 61,1 64 | 62,1 65 | 63,1 66 | 64,1 67 | 65,0 68 | 66,1 69 | 67,1 70 | 68,0 71 | 69,1 72 | 70,0 73 | 71,1 74 | 72,1 75 | 73,0 76 | 74,0 77 | 75,1 78 | 76,0 79 | 77,0 80 | 78,0 81 | 79,0 82 | 80,1 83 | 81,1 84 | 82,1 85 | 83,1 86 | 84,1 87 | 85,1 88 | 86,1 89 | 87,0 90 | 88,0 91 | 89,0 92 | 90,1 93 | 91,0 94 | 92,0 95 | 93,1 96 | 94,0 97 | 95,1 98 | 96,0 99 | 97,0 100 | 98,0 101 | 99,0 102 | 100,0 103 | 101,1 104 | 102,1 105 | 103,1 106 | 104,0 107 | 105,0 108 | 106,1 109 | 107,0 110 | 108,0 111 | 109,1 112 | 110,0 113 | 111,0 114 | 112,0 115 | 113,0 116 | 114,1 117 | 115,1 118 | 116,1 119 | 117,0 120 | 118,1 121 | 119,0 122 | 120,1 123 | 121,0 124 | 122,0 125 | 123,0 126 | 124,1 127 | 125,1 128 | 126,1 129 | 127,0 130 | 128,0 131 | 129,1 132 | 130,0 133 | 131,1 134 | 132,0 135 | 133,0 136 | 134,1 137 | 135,0 138 | 136,1 139 | 137,1 140 | 138,0 141 | 139,0 142 | 140,0 143 | 141,0 144 | 142,0 145 | 143,0 146 | 144,1 147 | 145,1 148 | 146,0 149 | 147,1 150 | 148,1 151 | 149,0 152 | 150,0 153 | 151,1 154 | 152,0 155 | 153,0 156 | 154,0 157 | 155,0 158 | 156,1 159 | 157,1 160 | 158,1 161 | 159,1 162 | 160,1 163 | 161,1 164 | 162,1 165 | 163,0 166 | 164,1 167 | 165,0 168 | 166,1 169 | 167,0 170 | 168,0 171 | 169,0 172 | 170,0 173 | 171,0 174 | 172,1 175 | 173,1 176 | 174,1 177 | 175,0 178 | 176,1 179 | 177,0 180 | 178,0 181 | 179,1 182 | 180,0 183 | 181,0 184 | 182,0 185 | 183,1 186 | 184,0 187 | 185,0 188 | 186,1 189 | 187,1 190 | 188,1 191 | 189,1 192 | 190,0 193 | 191,0 194 | 192,0 195 | 193,0 196 | 194,1 197 | 195,1 198 | 196,1 199 | 197,1 200 | 198,0 201 | 199,1 202 | 200,1 203 | 201,0 204 | 202,0 205 | 203,0 206 | 204,1 207 | 205,0 208 | 206,0 209 | 207,0 210 | 208,1 211 | 209,1 212 | 210,0 213 | 211,0 214 | 212,1 215 | 213,1 216 | 214,0 217 | 215,1 218 | 216,0 219 | 217,1 220 | 218,0 221 | 219,0 222 | 220,1 223 | 221,1 224 | 222,0 225 | 223,1 226 | 224,0 227 | 225,1 228 | 226,0 229 | 227,1 230 | 228,0 231 | 229,0 232 | 230,1 233 | 231,0 234 | 232,0 235 | 233,0 236 | 234,0 237 | 235,1 238 | 236,0 239 | 237,1 240 | 238,0 241 | 239,0 242 | 240,0 243 | 241,0 244 | 242,0 245 | 243,0 246 | 244,0 247 | 245,0 248 | 246,0 249 | 247,0 250 | 248,0 251 | 249,1 252 | 250,0 253 | 251,0 254 | 252,1 255 | 253,1 256 | 254,0 257 | 255,1 258 | 256,1 259 | 257,1 260 | 258,0 261 | 259,1 262 | 260,0 263 | 261,0 264 | 262,1 265 | 263,1 266 | 264,1 267 | 265,0 268 | 266,0 269 | 267,0 270 | 268,0 271 | 269,0 272 | 270,1 273 | 271,0 274 | 272,1 275 | 273,1 276 | 274,0 277 | 275,1 278 | 276,0 279 | 277,0 280 | 278,1 281 | 279,1 282 | 280,1 283 | 281,0 284 | 282,1 285 | 283,0 286 | 284,1 287 | 285,0 288 | 286,1 289 | 287,1 290 | 288,1 291 | 289,0 292 | 290,1 293 | 291,0 294 | 292,0 295 | 293,0 296 | 294,0 297 | 295,1 298 | 296,1 299 | 297,1 300 | 298,0 301 | 299,0 302 | 300,1 303 | 301,0 304 | 302,1 305 | 303,1 306 | 304,1 307 | 305,0 308 | 306,1 309 | 307,0 310 | 308,1 311 | 309,1 312 | 310,1 313 | 311,1 314 | 312,0 315 | 313,1 316 | 314,1 317 | 315,0 318 | 316,1 319 | 317,1 320 | 318,0 321 | 319,0 322 | 320,0 323 | 321,1 324 | 322,0 325 | 323,1 326 | 324,1 327 | 325,0 328 | 326,0 329 | 327,1 330 | 328,1 331 | 329,1 332 | 330,1 333 | 331,0 334 | 332,1 335 | 333,0 336 | 334,1 337 | 335,1 338 | 336,1 339 | 337,1 340 | 338,0 341 | 339,1 342 | 340,1 343 | 341,1 344 | 342,1 345 | 343,1 346 | 344,0 347 | 345,0 348 | 346,1 349 | 347,1 350 | 348,1 351 | 349,0 352 | 350,1 353 | 351,0 354 | 352,0 355 | 353,0 356 | 354,1 357 | 355,1 358 | 356,0 359 | 357,1 360 | 358,0 361 | 359,1 362 | 360,1 363 | 361,0 364 | 362,1 365 | 363,1 366 | 364,1 367 | 365,0 368 | 366,0 369 | 367,0 370 | 368,1 371 | 369,0 372 | 370,1 373 | 371,0 374 | 372,0 375 | 373,1 376 | 374,1 377 | 375,1 378 | 376,1 379 | 377,0 380 | 378,0 381 | 379,1 382 | 380,1 383 | 381,1 384 | 382,1 385 | 383,1 386 | 384,0 387 | 385,0 388 | 386,0 389 | 387,0 390 | 388,1 391 | 389,0 392 | 390,0 393 | 391,0 394 | 392,0 395 | 393,0 396 | 394,0 397 | 395,1 398 | 396,0 399 | 397,1 400 | 398,1 401 | 399,0 402 | 400,1 403 | 401,1 404 | 402,0 405 | 403,1 406 | 404,0 407 | 405,1 408 | 406,0 409 | 407,1 410 | 408,1 411 | 409,0 412 | 410,0 413 | 411,1 414 | 412,1 415 | 413,0 416 | 414,1 417 | 415,0 418 | 416,1 419 | 417,1 420 | 418,0 421 | 419,0 422 | 420,0 423 | 421,1 424 | 422,1 425 | 423,1 426 | 424,1 427 | 425,1 428 | 426,1 429 | 427,1 430 | 428,0 431 | 429,0 432 | 430,1 433 | 431,1 434 | 432,0 435 | 433,1 436 | 434,1 437 | 435,1 438 | 436,1 439 | 437,0 440 | 438,1 441 | 439,0 442 | 440,1 443 | 441,1 444 | 442,0 445 | 443,1 446 | 444,0 447 | 445,1 448 | 446,1 449 | 447,1 450 | 448,1 451 | 449,1 452 | 450,1 453 | 451,1 454 | 452,0 455 | 453,1 456 | 454,0 457 | 455,1 458 | 456,0 459 | 457,1 460 | 458,1 461 | 459,1 462 | 460,1 463 | 461,0 464 | 462,1 465 | 463,1 466 | 464,1 467 | 465,0 468 | 466,0 469 | 467,0 470 | 468,1 471 | 469,1 472 | 470,0 473 | 471,1 474 | 472,0 475 | 473,1 476 | 474,0 477 | 475,1 478 | 476,1 479 | 477,0 480 | 478,0 481 | 479,1 482 | 480,0 483 | 481,0 484 | 482,1 485 | 483,0 486 | 484,0 487 | 485,1 488 | 486,1 489 | 487,0 490 | 488,0 491 | 489,0 492 | 490,1 493 | 491,1 494 | 492,1 495 | 493,1 496 | 494,0 497 | 495,1 498 | 496,1 499 | 497,1 500 | 498,1 501 | 499,0 502 | -------------------------------------------------------------------------------- /templates/form.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | AutoOD: A Self-Tuning Anomaly Detection System 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 20 | 21 | 22 | 23 | 25 | 26 | 27 | 32 | 63 | 64 |
65 |

AutoOD: A Self-Tuning Anomaly Detection System

66 |
67 |
68 |

Enter Input File and Parameters

69 |
70 | 71 | 72 | 73 | 84 | 85 | 86 | 87 | 101 | 102 | 103 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 134 | 135 |
Input File 74 |
75 | 76 | 82 |
83 |
Detection Methods
Index Column Name
Label Column Name
Percentage of Outliers: Min (%)
Percentage of Outliers: Max (%)
129 |
130 | 131 |
132 |
133 |
136 |
137 | {% with messages = get_flashed_messages() %} 138 | {% if messages %} 139 | 144 | {% endif %} 145 | {% endwith %} 146 |
147 |

Log Messages:

148 |
149 |

150 |         
151 |
152 |
153 | -------------------------------------------------------------------------------- /results/log_spambase_csv_csv_1659980531: -------------------------------------------------------------------------------- 1 | 2022-08-08T13:40:36.614556-0400 - selected methods = ['lof', 'knn', 'if', 'mahala'] 2 | 2022-08-08T13:40:36.617567-0400 - Start calling autood with file spambase_csv.csv...indexColName = id, labelColName = label 3 | 2022-08-08T13:40:36.620558-0400 - Parameters: outlier_percentage_min = 5.0%, outlier_percentage_max = 15.0% 4 | 2022-08-08T13:40:36.623555-0400 - Dataset Name = spambase_csv 5 | 2022-08-08T13:40:36.626557-0400 - Outlier Range defined as [5.0%, 15.0%] 6 | 2022-08-08T13:40:59.328349-0400 - Dataset size = (4601, 57), dataset label size = (4601,) 7 | 2022-08-08T13:40:59.330349-0400 - Start running LOF with k=[10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 8 | 2022-08-08T13:41:10.671781-0400 - Best LOF F-1 = 0.2516979624450659 9 | 2022-08-08T13:41:10.674781-0400 - Start running KNN with k=[10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 10 | 2022-08-08T13:41:20.653890-0400 - Best KNN F-1 = 0.4083100279664402 11 | 2022-08-08T13:41:20.655891-0400 - Start running Isolation Forest with max feature = [0.5, 0.6, 0.7, 0.8, 0.9] 12 | 2022-08-08T13:41:26.073262-0400 - Best IF F-1 = 0.17871576111360576 13 | 2022-08-08T13:41:26.075261-0400 - Start running Mahalanobis.. 14 | 2022-08-08T13:41:26.754262-0400 - Best Mahala F-1 = 0.18777467039552537 15 | 2022-08-08T13:41:26.757260-0400 - Best Unsupervised F-1 Score = 0.4083100279664402 16 | 2022-08-08T13:41:26.758263-0400 - Best Unsupervised Outlier Detection Method = ['KNN'] 17 | 2022-08-08T13:41:26.776261-0400 - Instance Index Ranges: [[0, 60], [60, 120], [120, 150], [150, 156]] 18 | 2022-08-08T13:41:26.780260-0400 - Detector Index Ranges: [[0, 10], [10, 20], [20, 25], [25, 26]] 19 | 2022-08-08T13:41:26.821259-0400 - F1 for Majority Vote:0.1387341772151899 20 | 2022-08-08T13:41:26.824259-0400 - ################################################################## 21 | 2022-08-08T13:41:26.827264-0400 - Start First-round AutoOD training... 22 | 2022-08-08T13:41:27.235295-0400 - Iteration = 0, F-1 score = 0.0033039647577092508 23 | 2022-08-08T13:41:27.662428-0400 - Iteration = 1, F-1 score = 0.0033039647577092508 24 | 2022-08-08T13:41:31.458566-0400 - Iteration = 2, F-1 score = 0.0033039647577092508 25 | 2022-08-08T13:41:31.856568-0400 - Iteration = 3, F-1 score = 0.0033039647577092508 26 | 2022-08-08T13:41:32.317533-0400 - Iteration = 4, F-1 score = 0.0033039647577092508 27 | 2022-08-08T13:41:32.808567-0400 - Iteration = 5, F-1 score = 0.005500550055005501 28 | 2022-08-08T13:41:33.320656-0400 - Iteration = 6, F-1 score = 0.005500550055005501 29 | 2022-08-08T13:41:33.897611-0400 - Iteration = 7, F-1 score = 0.005500550055005501 30 | 2022-08-08T13:41:34.511698-0400 - Iteration = 8, F-1 score = 0.08553326293558607 31 | 2022-08-08T13:41:35.245836-0400 - Iteration = 9, F-1 score = 0.228544776119403 32 | 2022-08-08T13:41:36.030836-0400 - Iteration = 10, F-1 score = 0.23474615742897068 33 | 2022-08-08T13:41:36.881869-0400 - Iteration = 11, F-1 score = 0.238073182028717 34 | 2022-08-08T13:41:37.737899-0400 - Iteration = 12, F-1 score = 0.24574321214910264 35 | 2022-08-08T13:41:38.587002-0400 - Iteration = 13, F-1 score = 0.24457775726811262 36 | 2022-08-08T13:41:39.441111-0400 - Iteration = 14, F-1 score = 0.24306839186691315 37 | 2022-08-08T13:41:40.310173-0400 - Iteration = 15, F-1 score = 0.2504604051565378 38 | 2022-08-08T13:41:41.193263-0400 - Iteration = 16, F-1 score = 0.24826949700046147 39 | 2022-08-08T13:41:42.022640-0400 - Iteration = 17, F-1 score = 0.24318076745261213 40 | 2022-08-08T13:41:42.863695-0400 - Iteration = 18, F-1 score = 0.24931002759889606 41 | 2022-08-08T13:41:43.686787-0400 - Iteration = 19, F-1 score = 0.24387990762124714 42 | 2022-08-08T13:41:44.534877-0400 - Iteration = 20, F-1 score = 0.24387990762124714 43 | 2022-08-08T13:41:45.398058-0400 - Iteration = 21, F-1 score = 0.24387990762124714 44 | 2022-08-08T13:41:46.239154-0400 - Iteration = 22, F-1 score = 0.24387990762124714 45 | 2022-08-08T13:41:47.079120-0400 - Iteration = 23, F-1 score = 0.24387990762124714 46 | 2022-08-08T13:41:49.058727-0400 - ################################################################## 47 | 2022-08-08T13:41:49.062145-0400 - Start Second-round AutoOD training... 48 | 2022-08-08T13:41:49.195143-0400 - Iteration = 0, F-1 score = 0.5358702432938242 49 | 2022-08-08T13:41:49.356143-0400 - Iteration = 1, F-1 score = 0.5879446640316206 50 | 2022-08-08T13:41:49.579146-0400 - Iteration = 2, F-1 score = 0.5768152866242038 51 | 2022-08-08T13:41:49.858143-0400 - Iteration = 3, F-1 score = 0.5654230162900683 52 | 2022-08-08T13:41:50.197144-0400 - Iteration = 4, F-1 score = 0.5609887157442235 53 | 2022-08-08T13:41:50.543146-0400 - Iteration = 5, F-1 score = 0.5495172413793104 54 | 2022-08-08T13:41:50.866144-0400 - Iteration = 6, F-1 score = 0.5391353489686351 55 | 2022-08-08T13:41:51.203144-0400 - Iteration = 7, F-1 score = 0.5349841635473653 56 | 2022-08-08T13:41:51.540181-0400 - Iteration = 8, F-1 score = 0.5268722466960353 57 | 2022-08-08T13:41:51.873144-0400 - Iteration = 9, F-1 score = 0.5239369610466846 58 | 2022-08-08T13:41:52.251145-0400 - Iteration = 10, F-1 score = 0.5151971110442372 59 | 2022-08-08T13:41:52.623181-0400 - Iteration = 11, F-1 score = 0.5062671965759706 60 | 2022-08-08T13:41:53.003186-0400 - Iteration = 12, F-1 score = 0.5013893176906452 61 | 2022-08-08T13:41:53.391144-0400 - Iteration = 13, F-1 score = 0.4904717275851297 62 | 2022-08-08T13:41:53.783142-0400 - Iteration = 14, F-1 score = 0.48149319835495097 63 | 2022-08-08T13:41:54.188540-0400 - Iteration = 15, F-1 score = 0.4740882917466411 64 | 2022-08-08T13:41:54.600539-0400 - Iteration = 16, F-1 score = 0.46849757673667203 65 | 2022-08-08T13:41:55.021506-0400 - Iteration = 17, F-1 score = 0.4649951155975252 66 | 2022-08-08T13:41:55.455234-0400 - Iteration = 18, F-1 score = 0.4596191726854892 67 | 2022-08-08T13:41:55.904234-0400 - Iteration = 19, F-1 score = 0.45300564596479576 68 | 2022-08-08T13:41:56.339236-0400 - Iteration = 20, F-1 score = 0.4446680080482897 69 | 2022-08-08T13:41:56.783241-0400 - Iteration = 21, F-1 score = 0.43941950725615925 70 | 2022-08-08T13:41:57.228326-0400 - Iteration = 22, F-1 score = 0.4378176889190105 71 | 2022-08-08T13:41:57.675326-0400 - Iteration = 23, F-1 score = 0.43300375042618483 72 | 2022-08-08T13:41:58.163422-0400 - Iteration = 24, F-1 score = 0.42532690984170685 73 | 2022-08-08T13:41:58.662422-0400 - Iteration = 25, F-1 score = 0.42537056187521544 74 | 2022-08-08T13:41:59.145437-0400 - Iteration = 26, F-1 score = 0.4254583189207886 75 | 2022-08-08T13:41:59.628415-0400 - Iteration = 27, F-1 score = 0.4245152354570637 76 | 2022-08-08T13:42:00.101074-0400 - Iteration = 28, F-1 score = 0.4236760124610592 77 | 2022-08-08T13:42:00.618109-0400 - Iteration = 29, F-1 score = 0.4253990284524636 78 | 2022-08-08T13:42:01.102066-0400 - Iteration = 30, F-1 score = 0.4228491814698711 79 | 2022-08-08T13:42:01.632399-0400 - Iteration = 31, F-1 score = 0.42233856893542754 80 | 2022-08-08T13:42:02.112399-0400 - Iteration = 32, F-1 score = 0.42219120725750175 81 | 2022-08-08T13:42:02.626397-0400 - Iteration = 33, F-1 score = 0.42299651567944246 82 | 2022-08-08T13:42:03.109196-0400 - Iteration = 34, F-1 score = 0.4217543859649123 83 | 2022-08-08T13:42:03.600233-0400 - Iteration = 35, F-1 score = 0.4187522030313712 84 | 2022-08-08T13:42:04.133327-0400 - Iteration = 36, F-1 score = 0.4226441631504923 85 | 2022-08-08T13:42:04.634323-0400 - Iteration = 37, F-1 score = 0.4177840508115737 86 | 2022-08-08T13:42:05.165415-0400 - Iteration = 38, F-1 score = 0.4184897671136203 87 | 2022-08-08T13:42:05.672492-0400 - Iteration = 39, F-1 score = 0.4176678445229682 88 | 2022-08-08T13:42:06.182583-0400 - Iteration = 40, F-1 score = 0.41725601131541723 89 | 2022-08-08T13:42:06.704584-0400 - Iteration = 41, F-1 score = 0.41433132316424265 90 | 2022-08-08T13:42:07.219671-0400 - Iteration = 42, F-1 score = 0.4127886323268206 91 | 2022-08-08T13:42:07.716672-0400 - Iteration = 43, F-1 score = 0.41433132316424265 92 | 2022-08-08T13:42:08.228811-0400 - Iteration = 44, F-1 score = 0.41406249999999994 93 | 2022-08-08T13:42:08.758772-0400 - Iteration = 45, F-1 score = 0.4132290184921764 94 | 2022-08-08T13:42:09.301941-0400 - Iteration = 46, F-1 score = 0.4129353233830846 95 | 2022-08-08T13:42:09.826941-0400 - Iteration = 47, F-1 score = 0.4130821187344472 96 | 2022-08-08T13:42:10.339078-0400 - Iteration = 48, F-1 score = 0.4088476632179807 97 | 2022-08-08T13:42:10.875078-0400 - Iteration = 49, F-1 score = 0.4088476632179807 98 | 2022-08-08T13:42:11.087042-0400 - Length of prediction results = 4601 99 | 2022-08-08T13:42:11.092044-0400 - Final AutoOD F-1 Score= 0.4088476632179807 100 | -------------------------------------------------------------------------------- /results/log_spambase_csv_csv_1659980693: -------------------------------------------------------------------------------- 1 | 2022-08-08T13:43:21.362272-0400 - selected methods = ['lof', 'knn', 'if', 'mahala'] 2 | 2022-08-08T13:43:21.365274-0400 - Start calling autood with file spambase_csv.csv...indexColName = id, labelColName = label 3 | 2022-08-08T13:43:21.368270-0400 - Parameters: outlier_percentage_min = 5.0%, outlier_percentage_max = 15.0% 4 | 2022-08-08T13:43:21.370270-0400 - Dataset Name = spambase_csv 5 | 2022-08-08T13:43:21.373270-0400 - Outlier Range defined as [5.0%, 15.0%] 6 | 2022-08-08T13:43:44.226709-0400 - Dataset size = (4601, 57), dataset label size = (4601,) 7 | 2022-08-08T13:43:44.228710-0400 - Start running LOF with k=[10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 8 | 2022-08-08T13:43:55.506127-0400 - Best LOF F-1 = 0.2516979624450659 9 | 2022-08-08T13:43:55.510124-0400 - Start running KNN with k=[10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 10 | 2022-08-08T13:44:06.654262-0400 - Best KNN F-1 = 0.4083100279664402 11 | 2022-08-08T13:44:06.657231-0400 - Start running Isolation Forest with max feature = [0.5, 0.6, 0.7, 0.8, 0.9] 12 | 2022-08-08T13:44:11.963222-0400 - Best IF F-1 = 0.17871576111360576 13 | 2022-08-08T13:44:11.965223-0400 - Start running Mahalanobis.. 14 | 2022-08-08T13:44:12.602223-0400 - Best Mahala F-1 = 0.18777467039552537 15 | 2022-08-08T13:44:12.605223-0400 - Best Unsupervised F-1 Score = 0.4083100279664402 16 | 2022-08-08T13:44:12.607223-0400 - Best Unsupervised Outlier Detection Method = ['KNN'] 17 | 2022-08-08T13:44:12.623224-0400 - Instance Index Ranges: [[0, 60], [60, 120], [120, 150], [150, 156]] 18 | 2022-08-08T13:44:12.625222-0400 - Detector Index Ranges: [[0, 10], [10, 20], [20, 25], [25, 26]] 19 | 2022-08-08T13:44:12.669224-0400 - F1 for Majority Vote:0.1387341772151899 20 | 2022-08-08T13:44:12.673224-0400 - ################################################################## 21 | 2022-08-08T13:44:12.675222-0400 - Start First-round AutoOD training... 22 | 2022-08-08T13:44:13.077226-0400 - Iteration = 0, F-1 score = 0.0033039647577092508 23 | 2022-08-08T13:44:13.505222-0400 - Iteration = 1, F-1 score = 0.0033039647577092508 24 | 2022-08-08T13:44:13.924257-0400 - Iteration = 2, F-1 score = 0.0033039647577092508 25 | 2022-08-08T13:44:14.352258-0400 - Iteration = 3, F-1 score = 0.0033039647577092508 26 | 2022-08-08T13:44:14.800259-0400 - Iteration = 4, F-1 score = 0.0033039647577092508 27 | 2022-08-08T13:44:15.255407-0400 - Iteration = 5, F-1 score = 0.005500550055005501 28 | 2022-08-08T13:44:15.793373-0400 - Iteration = 6, F-1 score = 0.005500550055005501 29 | 2022-08-08T13:44:16.354370-0400 - Iteration = 7, F-1 score = 0.005500550055005501 30 | 2022-08-08T13:44:16.937413-0400 - Iteration = 8, F-1 score = 0.08553326293558607 31 | 2022-08-08T13:44:17.617290-0400 - Iteration = 9, F-1 score = 0.228544776119403 32 | 2022-08-08T13:44:18.423290-0400 - Iteration = 10, F-1 score = 0.23474615742897068 33 | 2022-08-08T13:44:19.233289-0400 - Iteration = 11, F-1 score = 0.238073182028717 34 | 2022-08-08T13:44:20.031023-0400 - Iteration = 12, F-1 score = 0.24574321214910264 35 | 2022-08-08T13:44:20.985019-0400 - Iteration = 13, F-1 score = 0.24457775726811262 36 | 2022-08-08T13:44:21.870056-0400 - Iteration = 14, F-1 score = 0.24306839186691315 37 | 2022-08-08T13:44:22.734021-0400 - Iteration = 15, F-1 score = 0.2504604051565378 38 | 2022-08-08T13:44:23.565019-0400 - Iteration = 16, F-1 score = 0.24826949700046147 39 | 2022-08-08T13:44:24.384017-0400 - Iteration = 17, F-1 score = 0.24318076745261213 40 | 2022-08-08T13:44:25.205057-0400 - Iteration = 18, F-1 score = 0.24931002759889606 41 | 2022-08-08T13:44:26.024055-0400 - Iteration = 19, F-1 score = 0.24387990762124714 42 | 2022-08-08T13:44:26.819851-0400 - Iteration = 20, F-1 score = 0.24387990762124714 43 | 2022-08-08T13:44:27.673816-0400 - Iteration = 21, F-1 score = 0.24387990762124714 44 | 2022-08-08T13:44:28.503862-0400 - Iteration = 22, F-1 score = 0.24387990762124714 45 | 2022-08-08T13:44:29.353814-0400 - Iteration = 23, F-1 score = 0.24387990762124714 46 | 2022-08-08T13:44:31.366220-0400 - ################################################################## 47 | 2022-08-08T13:44:31.369440-0400 - Start Second-round AutoOD training... 48 | 2022-08-08T13:44:31.508438-0400 - Iteration = 0, F-1 score = 0.5358702432938242 49 | 2022-08-08T13:44:31.678441-0400 - Iteration = 1, F-1 score = 0.5879446640316206 50 | 2022-08-08T13:44:31.933473-0400 - Iteration = 2, F-1 score = 0.5768152866242038 51 | 2022-08-08T13:44:32.212475-0400 - Iteration = 3, F-1 score = 0.5654230162900683 52 | 2022-08-08T13:44:32.499475-0400 - Iteration = 4, F-1 score = 0.5609887157442235 53 | 2022-08-08T13:44:32.794475-0400 - Iteration = 5, F-1 score = 0.5495172413793104 54 | 2022-08-08T13:44:33.153475-0400 - Iteration = 6, F-1 score = 0.5391353489686351 55 | 2022-08-08T13:44:33.476444-0400 - Iteration = 7, F-1 score = 0.5349841635473653 56 | 2022-08-08T13:44:33.826441-0400 - Iteration = 8, F-1 score = 0.5268722466960353 57 | 2022-08-08T13:44:34.188441-0400 - Iteration = 9, F-1 score = 0.5239369610466846 58 | 2022-08-08T13:44:34.525474-0400 - Iteration = 10, F-1 score = 0.5151971110442372 59 | 2022-08-08T13:44:34.883474-0400 - Iteration = 11, F-1 score = 0.5062671965759706 60 | 2022-08-08T13:44:35.282475-0400 - Iteration = 12, F-1 score = 0.5013893176906452 61 | 2022-08-08T13:44:35.646225-0400 - Iteration = 13, F-1 score = 0.4904717275851297 62 | 2022-08-08T13:44:36.057193-0400 - Iteration = 14, F-1 score = 0.48149319835495097 63 | 2022-08-08T13:44:36.438873-0400 - Iteration = 15, F-1 score = 0.4740882917466411 64 | 2022-08-08T13:44:36.825871-0400 - Iteration = 16, F-1 score = 0.46849757673667203 65 | 2022-08-08T13:44:37.263873-0400 - Iteration = 17, F-1 score = 0.4649951155975252 66 | 2022-08-08T13:44:37.691840-0400 - Iteration = 18, F-1 score = 0.4596191726854892 67 | 2022-08-08T13:44:38.126837-0400 - Iteration = 19, F-1 score = 0.45300564596479576 68 | 2022-08-08T13:44:38.547840-0400 - Iteration = 20, F-1 score = 0.4446680080482897 69 | 2022-08-08T13:44:39.011873-0400 - Iteration = 21, F-1 score = 0.43941950725615925 70 | 2022-08-08T13:44:39.478874-0400 - Iteration = 22, F-1 score = 0.4378176889190105 71 | 2022-08-08T13:44:39.942839-0400 - Iteration = 23, F-1 score = 0.43300375042618483 72 | 2022-08-08T13:44:40.407872-0400 - Iteration = 24, F-1 score = 0.42532690984170685 73 | 2022-08-08T13:44:40.868872-0400 - Iteration = 25, F-1 score = 0.42537056187521544 74 | 2022-08-08T13:44:41.360872-0400 - Iteration = 26, F-1 score = 0.4254583189207886 75 | 2022-08-08T13:44:41.838876-0400 - Iteration = 27, F-1 score = 0.4245152354570637 76 | 2022-08-08T13:44:42.321873-0400 - Iteration = 28, F-1 score = 0.4236760124610592 77 | 2022-08-08T13:44:42.806876-0400 - Iteration = 29, F-1 score = 0.4253990284524636 78 | 2022-08-08T13:44:43.324872-0400 - Iteration = 30, F-1 score = 0.4228491814698711 79 | 2022-08-08T13:44:43.789837-0400 - Iteration = 31, F-1 score = 0.42233856893542754 80 | 2022-08-08T13:44:44.285836-0400 - Iteration = 32, F-1 score = 0.42219120725750175 81 | 2022-08-08T13:44:44.782532-0400 - Iteration = 33, F-1 score = 0.42299651567944246 82 | 2022-08-08T13:44:45.277532-0400 - Iteration = 34, F-1 score = 0.4217543859649123 83 | 2022-08-08T13:44:45.785531-0400 - Iteration = 35, F-1 score = 0.4187522030313712 84 | 2022-08-08T13:44:46.283537-0400 - Iteration = 36, F-1 score = 0.4226441631504923 85 | 2022-08-08T13:44:46.798537-0400 - Iteration = 37, F-1 score = 0.4177840508115737 86 | 2022-08-08T13:44:47.287573-0400 - Iteration = 38, F-1 score = 0.4184897671136203 87 | 2022-08-08T13:44:47.787572-0400 - Iteration = 39, F-1 score = 0.4176678445229682 88 | 2022-08-08T13:44:48.342541-0400 - Iteration = 40, F-1 score = 0.41725601131541723 89 | 2022-08-08T13:44:48.852574-0400 - Iteration = 41, F-1 score = 0.41433132316424265 90 | 2022-08-08T13:44:49.350574-0400 - Iteration = 42, F-1 score = 0.4127886323268206 91 | 2022-08-08T13:44:49.856537-0400 - Iteration = 43, F-1 score = 0.41433132316424265 92 | 2022-08-08T13:44:50.375537-0400 - Iteration = 44, F-1 score = 0.41406249999999994 93 | 2022-08-08T13:44:50.907539-0400 - Iteration = 45, F-1 score = 0.4132290184921764 94 | 2022-08-08T13:44:51.404539-0400 - Iteration = 46, F-1 score = 0.4129353233830846 95 | 2022-08-08T13:44:51.941541-0400 - Iteration = 47, F-1 score = 0.4130821187344472 96 | 2022-08-08T13:44:52.485541-0400 - Iteration = 48, F-1 score = 0.4088476632179807 97 | 2022-08-08T13:44:52.987574-0400 - Iteration = 49, F-1 score = 0.4088476632179807 98 | 2022-08-08T13:44:53.176539-0400 - Length of prediction results = 4601 99 | 2022-08-08T13:44:53.181537-0400 - Final AutoOD F-1 Score= 0.4088476632179807 100 | -------------------------------------------------------------------------------- /static/css/d3_visualization.css: -------------------------------------------------------------------------------- 1 | #body_results{ 2 | background-color: #efeef1cb; 3 | z-index: 100; 4 | } 5 | 6 | html{ 7 | /* font-family: 'Open Sans', sans-serif; */ 8 | overflow: scroll; 9 | } 10 | 11 | 12 | h1{ 13 | position: absolute; 14 | left: 0; 15 | right: 0; 16 | margin-left: auto; 17 | margin-right: auto; 18 | width: 700px; 19 | font-family: sans-serif; 20 | padding-left: .5%; 21 | top: 2.5%; 22 | white-space: nowrap; 23 | color: black; 24 | /* font-size: 30px; */ 25 | } 26 | 27 | center{ 28 | position: absolute; 29 | position: absolute; 30 | left: 0; 31 | right: 0; 32 | margin-left: auto; 33 | margin-right: auto; 34 | width: 100%; 35 | top: 10%; 36 | } 37 | 38 | /* Main tsne chart */ 39 | #dataviz_axisZoom{ 40 | position:absolute; 41 | left:15px; 42 | top:190px; 43 | height: 500px; 44 | width: 700px; 45 | z-index: 1; 46 | } 47 | 48 | #dataviz_axisZoom svg{ 49 | position: relative; 50 | background-color: white; 51 | border-radius:12px; 52 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1); 53 | height: 550px 54 | 55 | } 56 | 57 | #pred_but{ 58 | position: absolute; 59 | left: 22px; 60 | bottom: 50px; 61 | font-size: 17px; 62 | } 63 | 64 | /* autoOD pred filter button */ 65 | #metric{ 66 | position: absolute; 67 | width:175px; 68 | height: 30px; 69 | border-radius:5px; 70 | left: 0px; 71 | bottom: -30px; 72 | font-size: 15px; 73 | } 74 | 75 | #correct_but{ 76 | position: absolute; 77 | left: 576px; 78 | bottom: 50px; 79 | font-size: 17px; 80 | } 81 | 82 | /* Correct filter button */ 83 | #selectButton_correct{ 84 | position: absolute; 85 | left: 0px; 86 | bottom: -30px; 87 | width:175px; 88 | height: 30px; 89 | border-radius:5px; 90 | font-size: 15px; 91 | } 92 | 93 | #label_but{ 94 | position: absolute; 95 | left: 298px; 96 | bottom: 50px; 97 | font-size: 17px; 98 | } 99 | 100 | /* Ground truth filter button */ 101 | #selectButton_label{ 102 | position: absolute; 103 | width:175px; 104 | height: 30px; 105 | border-radius:5px; 106 | left: 0px; 107 | bottom: -30px; 108 | font-size: 15px; 109 | } 110 | 111 | /* round relibale labels filter button */ 112 | #selectButton_round{ 113 | width:75px; 114 | border-radius:5px; 115 | 116 | 117 | } 118 | 119 | /* Slider for reliable labels */ 120 | #slider-step{ 121 | 122 | } 123 | 124 | /* barplot for param. */ 125 | #barplot{ 126 | height: 715px; 127 | float: right; 128 | left:400px; 129 | bottom:-304px; 130 | background-color: white; 131 | border-radius:10px; 132 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1); 133 | } 134 | 135 | #barplot2{ 136 | height: 715px; 137 | float: left; 138 | background-color: white; 139 | border-radius:10px; 140 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1); 141 | } 142 | 143 | #temp{ 144 | position:relative; 145 | left:-5px; 146 | bottom:5px; 147 | width: 1790px; 148 | } 149 | 150 | /* table for each data point att. */ 151 | #table_wrapper{ 152 | position:absolute; 153 | left:1300px; 154 | bottom:-790px; 155 | width: 15%; 156 | } 157 | 158 | #table2_wrapper{ 159 | position:absolute; 160 | left:900px; 161 | bottom:-790px; 162 | width: 15%; 163 | } 164 | 165 | #popup_chart{ 166 | position:relative; 167 | left:840px; 168 | bottom:-145px; 169 | width:760px; 170 | } 171 | 172 | /* Control panel (filter dropdowns) */ 173 | #filter{ 174 | position:absolute; 175 | left:15px; 176 | top:6%; 177 | background-color: white; 178 | width: 760px; 179 | height: 100px; 180 | border-radius:10px; 181 | padding-left: .5%; 182 | padding-top: .2%; 183 | padding-bottom: .2%; 184 | font-family: 'Open Sans', sans-serif; 185 | vertical-align: baseline; 186 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1); 187 | 188 | } 189 | 190 | #reliable_inout_div{ 191 | font-family: 'Open Sans', sans-serif; 192 | 193 | } 194 | 195 | #reliable_inout{ 196 | width:140px; 197 | border-radius:5px; 198 | } 199 | 200 | #filtertitle{ 201 | font-size: 21px; 202 | font-family: 'Open Sans', sans-serif; 203 | 204 | } 205 | 206 | #reliable_output{ 207 | position:absolute; 208 | left:485px; 209 | top:12%; 210 | } 211 | 212 | #reliable_labels{ 213 | font-family: 'Open Sans', sans-serif; 214 | position:absolute; 215 | left:15px; 216 | /* top: 85%; */ 217 | top: 770px; 218 | background-color: white; 219 | border-radius:12px; 220 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1); 221 | width:760px; 222 | padding-left: .5%; 223 | padding-top: .2%; 224 | padding-bottom: .2%; 225 | height: 130px; 226 | 227 | } 228 | 229 | select{ 230 | font-family: 'Open Sans', sans-serif; 231 | } 232 | 233 | /* hor. line */ 234 | /* .vl{ 235 | border-left: 1px solid black; 236 | height: 900px; 237 | position: absolute; 238 | left: 800px; 239 | top: 35px; 240 | z-index: -3; 241 | } */ 242 | 243 | 244 | .legend{ 245 | list-style: none; 246 | position: absolute; 247 | left: 664px; 248 | top: 193px; 249 | font-family: 'Open Sans', sans-serif; 250 | font-size: 15px; 251 | background-color: white; 252 | width: 112px; 253 | height: 50px; 254 | border-radius:12px; 255 | padding-left: .5%; 256 | padding-top: .2%; 257 | padding-bottom: .2%; 258 | z-index: 1; 259 | opacity: 0.9; 260 | /* box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1); */ 261 | vertical-align: baseline; 262 | 263 | } 264 | 265 | .legend li{ 266 | float: left; 267 | margin-right: 10px; 268 | } 269 | 270 | .legend span{ 271 | border: 1px solid #ccc; 272 | float: left; 273 | width: 12px; 274 | height: 12px; 275 | margin: 5px; 276 | } 277 | 278 | .legend .inlier{ 279 | background-color: SteelBlue; 280 | width: 10px; 281 | height: 10px; 282 | border-radius:50px; 283 | } 284 | 285 | .legend .outlier{ 286 | background-color: #FFA500; 287 | width: 10px; 288 | height: 10px; 289 | border-radius:50px; 290 | } 291 | 292 | .legend .incorrect{ 293 | border-color: black; 294 | width: 17px; 295 | height: 17px; 296 | border-radius:50px; 297 | } 298 | 299 | /* li{ 300 | font-size: 15px; 301 | } */ 302 | 303 | #ul_nav{ 304 | position: fixed; 305 | top: 0; 306 | left: 0; 307 | width: 100%; 308 | list-style-type: none; 309 | margin: 0; 310 | padding: 0; 311 | overflow: hidden; 312 | background-color: #333; 313 | font-family: sans-serif; /* This is what is causing the different sizing in bar */ 314 | font-size: 20px; 315 | z-index: 100; 316 | } 317 | 318 | #nav{ 319 | float: left; 320 | border-right:1px solid #bbb; 321 | } 322 | 323 | #nav:last-child { 324 | border-right: none; 325 | } 326 | 327 | #li_a_nav { 328 | display: block; 329 | color: white; 330 | text-align: center; 331 | padding: 8px 16px; 332 | text-decoration: none; 333 | } 334 | 335 | /* Change the link color to #111 (black) on hover */ 336 | li a:hover { 337 | background-color: #111; 338 | } 339 | 340 | .active { 341 | background-color: maroon; 342 | } 343 | 344 | #change_reliable_div{ 345 | position: relative; 346 | bottom: -828px; 347 | left: 587px; 348 | } 349 | 350 | #change_reliable1{ 351 | position: absolute; 352 | width: 175px; 353 | height: 30px; 354 | border-radius:5px; 355 | font-size: 15px; 356 | bottom: -30px; 357 | left: 750px; 358 | } 359 | 360 | #change_reliable2{ 361 | position: absolute; 362 | width: 175px; 363 | height: 30px; 364 | border-radius:5px; 365 | font-size: 15px; 366 | } 367 | 368 | #radio1{ 369 | position: absolute; 370 | bottom: 7px; 371 | left: 789px; 372 | font-family: 'Open Sans', sans-serif; 373 | font-size: 20px; 374 | } 375 | 376 | #radio2{ 377 | position: absolute; 378 | bottom: 7px; 379 | left: 398px; 380 | font-family: 'Open Sans', sans-serif; 381 | font-size: 20px; 382 | } 383 | 384 | input[type=checkbox] { 385 | transform: scale(1.2); 386 | } 387 | 388 | #myButton{ 389 | font-family: 'Open Sans', sans-serif; 390 | font-size: 20px; 391 | } 392 | 393 | #about_para{ 394 | position: absolute; 395 | margin-left: 5%; 396 | margin-right: 5%; 397 | background-color: white; 398 | top: 110px; 399 | border-radius:10px; 400 | padding: 20px; 401 | font-family: 'Open Sans', sans-serif; 402 | box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1); 403 | } 404 | 405 | #download_results{ 406 | position: relative; 407 | left: -85px; 408 | 409 | 410 | } 411 | 412 | #download_log{ 413 | position: relative; 414 | left: -48px; 415 | 416 | } 417 | 418 | 419 | 420 | -------------------------------------------------------------------------------- /app.py: -------------------------------------------------------------------------------- 1 | from cgi import test 2 | from flask import Flask 3 | from flask import Flask, request, render_template, flash, redirect, url_for, Response, send_file 4 | from werkzeug.utils import secure_filename 5 | import os 6 | from loguru import logger 7 | import time 8 | from shutil import copyfile 9 | from autood import run_autood, AutoODResults, get_default_detection_method_list,OutlierDetectionMethod 10 | import psycopg2 11 | from flask import jsonify 12 | from config import config 13 | 14 | results_global = None 15 | final_log_filename_global = None 16 | 17 | LOGGING_PATH = "static/job.log" 18 | # configure logger 19 | logger.add(LOGGING_PATH, format="{time} - {message}") 20 | 21 | UPLOAD_FOLDER = 'files' 22 | DOWNLOAD_FOLDER = 'results/' 23 | app = Flask(__name__) 24 | app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER 25 | app.config['DEBUG'] = True # start debugging 26 | app.secret_key = "super secret key" 27 | 28 | ALLOWED_EXTENSIONS = {'arff', 'csv'} 29 | 30 | @app.route('/', methods=['GET', 'POST']) 31 | def home(): 32 | return redirect('/autood/index') 33 | 34 | @app.route('/autood/results_summary', methods=['GET']) #DH 35 | def results1(): 36 | results = results_global 37 | final_log_filename = final_log_filename_global 38 | try: 39 | return render_template('result_summary.html', best_f1=results.best_unsupervised_f1_score, 40 | autood_f1=results.autood_f1_score, mv_f1=results.mv_f1_score, 41 | best_method=",".join(results.best_unsupervised_methods), 42 | final_results=results.results_file_name, training_log=final_log_filename) 43 | except: 44 | return render_template('result_summary.html') 45 | 46 | @app.route('/autood/index', methods=['GET']) 47 | def autood_form(): 48 | return render_template('form.html') 49 | 50 | @app.route('/autood/index', methods=['GET']) 51 | def autood_form2(): 52 | return render_template('form.html') 53 | 54 | 55 | def allowed_file(filename): 56 | return '.' in filename and \ 57 | filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS 58 | 59 | 60 | def flask_logger(): 61 | """creates logging information""" 62 | with open(LOGGING_PATH) as log_info: 63 | while True: 64 | data = log_info.read() 65 | yield data.encode() 66 | time.sleep(1) 67 | 68 | 69 | @app.route("/running_logs", methods=["GET"]) 70 | def running_logs(): 71 | """returns logging information""" 72 | return Response(flask_logger(), mimetype="text/plain", content_type="text/event-stream") 73 | 74 | def get_detection_methods(methods): 75 | logger.info(f"selected methods = {methods}") 76 | name_to_method_map = { 77 | "lof": OutlierDetectionMethod.LOF, 78 | "knn": OutlierDetectionMethod.KNN, 79 | "if": OutlierDetectionMethod.IsolationForest, 80 | "mahala": OutlierDetectionMethod.Manalanobis 81 | } 82 | selected_methods = [name_to_method_map[method] for method in methods] 83 | return selected_methods 84 | 85 | @app.route('/autood/index', methods=['POST']) 86 | def autood_input(): 87 | if 'file' not in request.files: 88 | flash('Please provide an input file or select a dataset.') 89 | return redirect(request.url) 90 | file = request.files['file'] 91 | # If the user does not select a file, the browser submits an 92 | # empty file without a filename. 93 | if file.filename == '': 94 | flash('Please provide an input file or select a dataset.') 95 | return redirect(request.url) 96 | if file and allowed_file(file.filename): 97 | filename = secure_filename(file.filename) 98 | file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) 99 | # start autoOD computation 100 | index_col_name = request.form['indexColName'] 101 | label_col_name = request.form['labelColName'] 102 | outlier_range_min = float(request.form['outlierRangeMin']) 103 | outlier_range_max = float(request.form['outlierRangeMax']) 104 | detection_methods = get_detection_methods(request.form.getlist('detectionMethods')) 105 | if not detection_methods: 106 | flash('Please choose at least one detection method.') 107 | return redirect(request.url) 108 | results = call_autood(filename, outlier_range_min, outlier_range_max, detection_methods, index_col_name, label_col_name) 109 | if results.error_message: 110 | flash(results.error_message) 111 | return redirect(request.url) 112 | else: 113 | # Create empty job.log, old logging will be deleted 114 | final_log_filename = f"log_{file.filename.replace('.', '_')}_{int(time.time())}" 115 | copyfile(LOGGING_PATH, DOWNLOAD_FOLDER + final_log_filename) 116 | open(LOGGING_PATH, 'w').close() 117 | global results_global, final_log_filename_global 118 | results_global = results 119 | final_log_filename_global = final_log_filename 120 | return render_template('result_summary.html', best_f1=results.best_unsupervised_f1_score, 121 | autood_f1=results.autood_f1_score, mv_f1=results.mv_f1_score, 122 | best_method=",".join(results.best_unsupervised_methods), 123 | final_results=results.results_file_name, training_log=final_log_filename) 124 | else: 125 | flash('File type is not supported.') 126 | return redirect(request.url) 127 | 128 | 129 | @app.route('/return-files/') 130 | def return_files_tut(filename): 131 | file_path = DOWNLOAD_FOLDER + filename 132 | return send_file(file_path, as_attachment=False, attachment_filename='') 133 | 134 | 135 | def call_autood(filename, outlier_percentage_min, outlier_percentage_max, detection_methods, index_col_name, label_col_name): 136 | filepath = os.path.join(UPLOAD_FOLDER, filename) 137 | logger.info(f"Start calling autood with file {filename}...indexColName = {index_col_name}, labelColName = {label_col_name}") 138 | logger.info( 139 | f"Parameters: outlier_percentage_min = {outlier_percentage_min}%, outlier_percentage_max = {outlier_percentage_max}%") 140 | return run_autood(filepath, logger, outlier_percentage_min, outlier_percentage_max, detection_methods, index_col_name, label_col_name) 141 | 142 | #### DH 143 | from flask_navigation import Navigation 144 | nav = Navigation(app) 145 | 146 | nav.Bar('top', [ 147 | nav.Item('Input Page', 'autood_form'), 148 | nav.Item('Results Summary', 'results1'), 149 | nav.Item('Result Page', 'result_index'), 150 | nav.Item('Rerun', 'autood_form2'), 151 | nav.Item('About', 'about_form') 152 | ]) 153 | 154 | @app.route('/autood/about', methods=['GET']) 155 | def about_form(): 156 | return render_template('about.html') 157 | 158 | @app.route('/autood/result', methods=['GET']) 159 | def result_index(): 160 | return render_template('index.html') 161 | 162 | @app.route('/data') # get data from DB as json 163 | def send_data(): 164 | params = config() # get DB info from config.py 165 | conn = psycopg2.connect(**params) 166 | cur = conn.cursor() 167 | # we can use multiple execute statements to get the data how we need it 168 | cur.execute("SELECT max(iteration) FROM reliable") # number of iterations for reliable labels 169 | iteration = cur.fetchall()[0][0] + 1 170 | cur.close() 171 | cur = conn.cursor() 172 | 173 | #drop all tables on each run 174 | cur.execute(""" 175 | DROP TABLE 176 | temp_lof, 177 | temp_knn, 178 | temp_if, 179 | temp_mahalanobis; 180 | """) 181 | 182 | # create temp tabels so that we can pass the data in a way that JS/D3 needs it 183 | cur.execute(""" 184 | CREATE TABLE temp_lof AS ( 185 | SELECT id, ROUND(AVG(prediction)) AS Prediction_LOF, AVG(score) AS SCORE_LOF 186 | FROM detectors 187 | WHERE detector = 'LOF' 188 | GROUP BY id 189 | ) 190 | """) 191 | 192 | cur.execute(""" 193 | CREATE TABLE temp_knn AS ( 194 | SELECT id, ROUND(AVG(prediction)) AS Prediction_KNN, AVG(score) AS SCORE_KNN 195 | FROM detectors 196 | WHERE detector = 'KNN' 197 | GROUP BY id 198 | ) 199 | """) 200 | 201 | cur.execute(""" 202 | CREATE TABLE temp_if AS ( 203 | SELECT id, ROUND(AVG(prediction)) AS Prediction_if, AVG(score) AS SCORE_if 204 | FROM detectors 205 | WHERE detector = 'IF' 206 | GROUP BY id 207 | ) 208 | """) 209 | 210 | cur.execute(""" 211 | CREATE TABLE temp_mahalanobis AS ( 212 | SELECT id, ROUND(AVG(prediction)) AS Prediction_mahalanobis, AVG(score) AS SCORE_mahalanobis 213 | FROM detectors 214 | WHERE detector = 'mahalanobis' 215 | GROUP BY id 216 | ) 217 | """) 218 | 219 | for i in range(iteration): # one table for each iteration 220 | cur.execute(f""" 221 | CREATE TABLE reliable_{i} AS ( 222 | SELECT id, reliable as reliable_{i} 223 | FROM reliable 224 | WHERE iteration = {i} 225 | ) 226 | """) 227 | 228 | # Join all tabels together 229 | SQL_statement = """ 230 | SELECT * 231 | FROM input 232 | FULL JOIN tsne using (id) 233 | FULL JOIN temp_lof using (id) 234 | FULL JOIN temp_knn using (id) 235 | FULL JOIN temp_if using (id) 236 | FULL JOIN temp_mahalanobis using (id) 237 | FULL JOIN predictions using (id) 238 | """ 239 | join_reliable = "" # join relibale labels 240 | for i in range(iteration): 241 | join_reliable = f"{join_reliable} FULL JOIN reliable_{i} using (id)" 242 | 243 | cur.execute(f"{SQL_statement}{join_reliable}") 244 | 245 | #data = [col for col in cur] 246 | field_names = [i[0] for i in cur.description] 247 | result = [dict(zip(field_names,row)) for row in cur.fetchall()] 248 | #conn.commit() 249 | cur.close() 250 | conn.close() 251 | return jsonify(result) 252 | 253 | #### DH 254 | 255 | 256 | if __name__ == '__main__': 257 | app.run(host='127.0.0.1', port=8080) 258 | -------------------------------------------------------------------------------- /results/log_spambase_csv_csv_1659113854: -------------------------------------------------------------------------------- 1 | 2022-07-29T12:57:26.700058-0400 - selected methods = ['lof', 'mahala'] 2 | 2022-07-29T12:57:26.704061-0400 - Start calling autood with file spambase_csv.csv...indexColName = id, labelColName = label 3 | 2022-07-29T12:57:26.708058-0400 - Parameters: outlier_percentage_min = 5.0%, outlier_percentage_max = 15.0% 4 | 2022-07-29T12:57:26.711057-0400 - Dataset Name = spambase_csv 5 | 2022-07-29T12:57:26.713060-0400 - Outlier Range defined as [5.0%, 15.0%] 6 | 2022-07-29T12:57:29.100999-0400 - Dataset size = (500, 57), dataset label size = (500,) 7 | 2022-07-29T12:57:29.102998-0400 - Start running LOF with k=[10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 8 | 2022-07-29T12:57:30.293399-0400 - Best LOF F-1 = 0.4106463878326996 9 | 2022-07-29T12:57:30.295397-0400 - Start running Mahalanobis.. 10 | 2022-07-29T12:57:30.466395-0400 - Best Mahala F-1 = 0.20849420849420852 11 | 2022-07-29T12:57:30.468396-0400 - Best Unsupervised F-1 Score = 0.4106463878326996 12 | 2022-07-29T12:57:30.470397-0400 - Best Unsupervised Outlier Detection Method = ['LOF'] 13 | 2022-07-29T12:57:30.473394-0400 - Instance Index Ranges: [[0, 60], [60, 66]] 14 | 2022-07-29T12:57:30.475393-0400 - Detector Index Ranges: [[0, 10], [10, 11]] 15 | 2022-07-29T12:57:30.479396-0400 - F1 for Majority Vote:0.27192982456140347 16 | 2022-07-29T12:57:30.481395-0400 - ################################################################## 17 | 2022-07-29T12:57:30.484394-0400 - Start First-round AutoOD training... 18 | 2022-07-29T12:57:30.543394-0400 - Iteration = 0, F-1 score = 0.010582010582010583 19 | 2022-07-29T12:57:30.624396-0400 - Iteration = 1, F-1 score = 0.08 20 | 2022-07-29T12:57:30.683394-0400 - Iteration = 2, F-1 score = 0.12560386473429952 21 | 2022-07-29T12:57:30.751395-0400 - Iteration = 3, F-1 score = 0.4317460317460317 22 | 2022-07-29T12:57:30.804393-0400 - Iteration = 4, F-1 score = 0.5373961218836565 23 | 2022-07-29T12:57:30.853397-0400 - Iteration = 5, F-1 score = 0.555256064690027 24 | 2022-07-29T12:57:30.887396-0400 - Iteration = 6, F-1 score = 0.5684210526315789 25 | 2022-07-29T12:57:30.921394-0400 - Iteration = 7, F-1 score = 0.5959595959595959 26 | 2022-07-29T12:57:30.953395-0400 - Iteration = 8, F-1 score = 0.621923937360179 27 | 2022-07-29T12:57:30.987395-0400 - Iteration = 9, F-1 score = 0.6265938069216758 28 | 2022-07-29T12:57:31.024395-0400 - Iteration = 10, F-1 score = 0.6374695863746959 29 | 2022-07-29T12:57:31.058856-0400 - Iteration = 11, F-1 score = 0.6320754716981133 30 | 2022-07-29T12:57:31.092548-0400 - Iteration = 12, F-1 score = 0.6345733041575492 31 | 2022-07-29T12:57:31.123511-0400 - Iteration = 13, F-1 score = 0.6440677966101696 32 | 2022-07-29T12:57:31.160515-0400 - Iteration = 14, F-1 score = 0.5848563968668407 33 | 2022-07-29T12:57:31.197514-0400 - Iteration = 15, F-1 score = 0.6045340050377833 34 | 2022-07-29T12:57:31.238511-0400 - Iteration = 16, F-1 score = 0.6246973365617434 35 | 2022-07-29T12:57:31.281512-0400 - Iteration = 17, F-1 score = 0.6287015945330295 36 | 2022-07-29T12:57:31.321555-0400 - Iteration = 18, F-1 score = 0.6454352441613589 37 | 2022-07-29T12:57:31.365539-0400 - Iteration = 19, F-1 score = 0.5989583333333334 38 | 2022-07-29T12:57:31.407554-0400 - Iteration = 20, F-1 score = 0.606516290726817 39 | 2022-07-29T12:57:31.450546-0400 - Iteration = 21, F-1 score = 0.6080760095011876 40 | 2022-07-29T12:57:31.489568-0400 - Iteration = 22, F-1 score = 0.6382022471910113 41 | 2022-07-29T12:57:31.528546-0400 - Iteration = 23, F-1 score = 0.6416666666666666 42 | 2022-07-29T12:57:31.573511-0400 - Iteration = 24, F-1 score = 0.6020408163265305 43 | 2022-07-29T12:57:31.611552-0400 - Iteration = 25, F-1 score = 0.6134663341645885 44 | 2022-07-29T12:57:31.649517-0400 - Iteration = 26, F-1 score = 0.6179245283018868 45 | 2022-07-29T12:57:31.682547-0400 - Iteration = 27, F-1 score = 0.6385809312638581 46 | 2022-07-29T12:57:31.715611-0400 - Iteration = 28, F-1 score = 0.6344294003868473 47 | 2022-07-29T12:57:31.753614-0400 - Iteration = 29, F-1 score = 0.6218905472636816 48 | 2022-07-29T12:57:31.788439-0400 - Iteration = 30, F-1 score = 0.6258823529411764 49 | 2022-07-29T12:57:31.822472-0400 - Iteration = 31, F-1 score = 0.642696629213483 50 | 2022-07-29T12:57:31.857437-0400 - Iteration = 32, F-1 score = 0.6459627329192547 51 | 2022-07-29T12:57:31.895725-0400 - Iteration = 33, F-1 score = 0.6055979643765903 52 | 2022-07-29T12:57:31.930719-0400 - Iteration = 34, F-1 score = 0.6203473945409429 53 | 2022-07-29T12:57:31.970722-0400 - Iteration = 35, F-1 score = 0.6244131455399062 54 | 2022-07-29T12:57:32.006725-0400 - Iteration = 36, F-1 score = 0.6383928571428571 55 | 2022-07-29T12:57:32.043745-0400 - Iteration = 37, F-1 score = 0.6344294003868473 56 | 2022-07-29T12:57:32.080747-0400 - Iteration = 38, F-1 score = 0.6218905472636816 57 | 2022-07-29T12:57:32.116745-0400 - Iteration = 39, F-1 score = 0.6258823529411764 58 | 2022-07-29T12:57:32.150715-0400 - Iteration = 40, F-1 score = 0.642696629213483 59 | 2022-07-29T12:57:32.182711-0400 - Iteration = 41, F-1 score = 0.6459627329192547 60 | 2022-07-29T12:57:32.223747-0400 - Iteration = 42, F-1 score = 0.6055979643765903 61 | 2022-07-29T12:57:32.259747-0400 - Iteration = 43, F-1 score = 0.6203473945409429 62 | 2022-07-29T12:57:32.293709-0400 - Iteration = 44, F-1 score = 0.6244131455399062 63 | 2022-07-29T12:57:32.328746-0400 - Iteration = 45, F-1 score = 0.6383928571428571 64 | 2022-07-29T12:57:32.361768-0400 - Iteration = 46, F-1 score = 0.6344294003868473 65 | 2022-07-29T12:57:32.400801-0400 - Iteration = 47, F-1 score = 0.6218905472636816 66 | 2022-07-29T12:57:32.436763-0400 - Iteration = 48, F-1 score = 0.6258823529411764 67 | 2022-07-29T12:57:32.473765-0400 - Iteration = 49, F-1 score = 0.642696629213483 68 | 2022-07-29T12:57:32.830965-0400 - ################################################################## 69 | 2022-07-29T12:57:32.832964-0400 - Start Second-round AutoOD training... 70 | 2022-07-29T12:57:32.858964-0400 - Iteration = 0, F-1 score = 0.601851851851852 71 | 2022-07-29T12:57:32.894975-0400 - Iteration = 1, F-1 score = 0.49853372434017595 72 | 2022-07-29T12:57:32.935006-0400 - Iteration = 2, F-1 score = 0.532608695652174 73 | 2022-07-29T12:57:32.970968-0400 - Iteration = 3, F-1 score = 0.5662337662337663 74 | 2022-07-29T12:57:33.004971-0400 - Iteration = 4, F-1 score = 0.5772151898734177 75 | 2022-07-29T12:57:33.036594-0400 - Iteration = 5, F-1 score = 0.5775656324582338 76 | 2022-07-29T12:57:33.064271-0400 - Iteration = 6, F-1 score = 0.6406926406926408 77 | 2022-07-29T12:57:33.100787-0400 - Iteration = 7, F-1 score = 0.5804749340369394 78 | 2022-07-29T12:57:33.137086-0400 - Iteration = 8, F-1 score = 0.5939086294416244 79 | 2022-07-29T12:57:33.168050-0400 - Iteration = 9, F-1 score = 0.6057692307692308 80 | 2022-07-29T12:57:33.196646-0400 - Iteration = 10, F-1 score = 0.6164383561643836 81 | 2022-07-29T12:57:33.224646-0400 - Iteration = 11, F-1 score = 0.6384778012684988 82 | 2022-07-29T12:57:33.259648-0400 - Iteration = 12, F-1 score = 0.5891472868217055 83 | 2022-07-29T12:57:33.291645-0400 - Iteration = 13, F-1 score = 0.6153846153846154 84 | 2022-07-29T12:57:33.326643-0400 - Iteration = 14, F-1 score = 0.6179245283018868 85 | 2022-07-29T12:57:33.355370-0400 - Iteration = 15, F-1 score = 0.6353467561521252 86 | 2022-07-29T12:57:33.384001-0400 - Iteration = 16, F-1 score = 0.6443514644351465 87 | 2022-07-29T12:57:33.424969-0400 - Iteration = 17, F-1 score = 0.6020408163265305 88 | 2022-07-29T12:57:33.456965-0400 - Iteration = 18, F-1 score = 0.6222222222222222 89 | 2022-07-29T12:57:33.487409-0400 - Iteration = 19, F-1 score = 0.619385342789598 90 | 2022-07-29T12:57:33.517409-0400 - Iteration = 20, F-1 score = 0.6367713004484306 91 | 2022-07-29T12:57:33.548374-0400 - Iteration = 21, F-1 score = 0.6446280991735537 92 | 2022-07-29T12:57:33.583409-0400 - Iteration = 22, F-1 score = 0.6025316455696202 93 | 2022-07-29T12:57:33.614376-0400 - Iteration = 23, F-1 score = 0.6153846153846154 94 | 2022-07-29T12:57:33.645380-0400 - Iteration = 24, F-1 score = 0.6211764705882352 95 | 2022-07-29T12:57:33.676409-0400 - Iteration = 25, F-1 score = 0.6385809312638581 96 | 2022-07-29T12:57:33.705376-0400 - Iteration = 26, F-1 score = 0.6344294003868473 97 | 2022-07-29T12:57:33.739373-0400 - Iteration = 27, F-1 score = 0.6218905472636816 98 | 2022-07-29T12:57:33.771409-0400 - Iteration = 28, F-1 score = 0.6258823529411764 99 | 2022-07-29T12:57:33.800429-0400 - Iteration = 29, F-1 score = 0.642696629213483 100 | 2022-07-29T12:57:33.828373-0400 - Iteration = 30, F-1 score = 0.6459627329192547 101 | 2022-07-29T12:57:33.874381-0400 - Iteration = 31, F-1 score = 0.6055979643765903 102 | 2022-07-29T12:57:33.918377-0400 - Iteration = 32, F-1 score = 0.6203473945409429 103 | 2022-07-29T12:57:33.955378-0400 - Iteration = 33, F-1 score = 0.6244131455399062 104 | 2022-07-29T12:57:33.994375-0400 - Iteration = 34, F-1 score = 0.6383928571428571 105 | 2022-07-29T12:57:34.031374-0400 - Iteration = 35, F-1 score = 0.6344294003868473 106 | 2022-07-29T12:57:34.072374-0400 - Iteration = 36, F-1 score = 0.6218905472636816 107 | 2022-07-29T12:57:34.112379-0400 - Iteration = 37, F-1 score = 0.6258823529411764 108 | 2022-07-29T12:57:34.147379-0400 - Iteration = 38, F-1 score = 0.642696629213483 109 | 2022-07-29T12:57:34.181378-0400 - Iteration = 39, F-1 score = 0.6459627329192547 110 | 2022-07-29T12:57:34.219376-0400 - Iteration = 40, F-1 score = 0.6055979643765903 111 | 2022-07-29T12:57:34.249372-0400 - Iteration = 41, F-1 score = 0.6203473945409429 112 | 2022-07-29T12:57:34.278373-0400 - Iteration = 42, F-1 score = 0.6244131455399062 113 | 2022-07-29T12:57:34.306378-0400 - Iteration = 43, F-1 score = 0.6383928571428571 114 | 2022-07-29T12:57:34.332409-0400 - Iteration = 44, F-1 score = 0.6344294003868473 115 | 2022-07-29T12:57:34.363410-0400 - Iteration = 45, F-1 score = 0.6218905472636816 116 | 2022-07-29T12:57:34.393412-0400 - Iteration = 46, F-1 score = 0.6258823529411764 117 | 2022-07-29T12:57:34.440751-0400 - Iteration = 47, F-1 score = 0.642696629213483 118 | 2022-07-29T12:57:34.468743-0400 - Iteration = 48, F-1 score = 0.6459627329192547 119 | 2022-07-29T12:57:34.506745-0400 - Iteration = 49, F-1 score = 0.6055979643765903 120 | 2022-07-29T12:57:34.614744-0400 - Length of prediction results = 500 121 | 2022-07-29T12:57:34.618743-0400 - Final AutoOD F-1 Score= 0.6055979643765903 122 | -------------------------------------------------------------------------------- /results/log_spambase_csv_csv_1659116425: -------------------------------------------------------------------------------- 1 | 2022-07-29T13:40:02.512245-0400 - selected methods = ['lof', 'knn', 'if', 'mahala'] 2 | 2022-07-29T13:40:02.516246-0400 - Start calling autood with file spambase_csv.csv...indexColName = id, labelColName = label 3 | 2022-07-29T13:40:02.519247-0400 - Parameters: outlier_percentage_min = 5.0%, outlier_percentage_max = 15.0% 4 | 2022-07-29T13:40:02.522262-0400 - Dataset Name = spambase_csv 5 | 2022-07-29T13:40:02.532246-0400 - Outlier Range defined as [5.0%, 15.0%] 6 | 2022-07-29T13:40:07.945498-0400 - Dataset size = (500, 57), dataset label size = (500,) 7 | 2022-07-29T13:40:07.950499-0400 - Start running LOF with k=[10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 8 | 2022-07-29T13:40:10.377495-0400 - Best LOF F-1 = 0.4106463878326996 9 | 2022-07-29T13:40:10.384504-0400 - Start running KNN with k=[10, 20, 30, 40, 50, 60, 70, 80, 90, 100] 10 | 2022-07-29T13:40:12.870516-0400 - Best KNN F-1 = 0.42585551330798477 11 | 2022-07-29T13:40:12.879500-0400 - Start running Isolation Forest with max feature = [0.5, 0.6, 0.7, 0.8, 0.9] 12 | 2022-07-29T13:40:16.194503-0400 - Best IF F-1 = 0.16309012875536483 13 | 2022-07-29T13:40:16.197503-0400 - Start running Mahalanobis.. 14 | 2022-07-29T13:40:16.512498-0400 - Best Mahala F-1 = 0.20849420849420852 15 | 2022-07-29T13:40:16.516503-0400 - Best Unsupervised F-1 Score = 0.42585551330798477 16 | 2022-07-29T13:40:16.519501-0400 - Best Unsupervised Outlier Detection Method = ['KNN'] 17 | 2022-07-29T13:40:16.524505-0400 - Instance Index Ranges: [[0, 60], [60, 120], [120, 150], [150, 156]] 18 | 2022-07-29T13:40:16.528497-0400 - Detector Index Ranges: [[0, 10], [10, 20], [20, 25], [25, 26]] 19 | 2022-07-29T13:40:16.543316-0400 - F1 for Majority Vote:0.25225225225225223 20 | 2022-07-29T13:40:16.546319-0400 - ################################################################## 21 | 2022-07-29T13:40:16.549322-0400 - Start First-round AutoOD training... 22 | 2022-07-29T13:40:16.683316-0400 - Iteration = 0, F-1 score = 0.34408602150537626 23 | 2022-07-29T13:40:16.868314-0400 - Iteration = 1, F-1 score = 0.373134328358209 24 | 2022-07-29T13:40:17.012326-0400 - Iteration = 2, F-1 score = 0.4551282051282051 25 | 2022-07-29T13:40:17.130325-0400 - Iteration = 3, F-1 score = 0.48275862068965514 26 | 2022-07-29T13:40:17.227315-0400 - Iteration = 4, F-1 score = 0.5139664804469274 27 | 2022-07-29T13:40:17.341317-0400 - Iteration = 5, F-1 score = 0.5824742268041238 28 | 2022-07-29T13:40:17.427318-0400 - Iteration = 6, F-1 score = 0.5885167464114833 29 | 2022-07-29T13:40:17.510317-0400 - Iteration = 7, F-1 score = 0.6404958677685951 30 | 2022-07-29T13:40:17.629313-0400 - Iteration = 8, F-1 score = 0.5691489361702128 31 | 2022-07-29T13:40:17.721312-0400 - Iteration = 9, F-1 score = 0.5861182519280205 32 | 2022-07-29T13:40:17.814315-0400 - Iteration = 10, F-1 score = 0.5864661654135338 33 | 2022-07-29T13:40:17.896316-0400 - Iteration = 11, F-1 score = 0.5961538461538461 34 | 2022-07-29T13:40:17.980314-0400 - Iteration = 12, F-1 score = 0.6139954853273137 35 | 2022-07-29T13:40:18.064314-0400 - Iteration = 13, F-1 score = 0.5429362880886428 36 | 2022-07-29T13:40:18.135314-0400 - Iteration = 14, F-1 score = 0.5669291338582678 37 | 2022-07-29T13:40:18.205317-0400 - Iteration = 15, F-1 score = 0.5809768637532133 38 | 2022-07-29T13:40:18.268314-0400 - Iteration = 16, F-1 score = 0.5819070904645476 39 | 2022-07-29T13:40:18.333316-0400 - Iteration = 17, F-1 score = 0.5995316159250585 40 | 2022-07-29T13:40:18.394319-0400 - Iteration = 18, F-1 score = 0.6271929824561404 41 | 2022-07-29T13:40:18.472320-0400 - Iteration = 19, F-1 score = 0.5489130434782608 42 | 2022-07-29T13:40:18.547312-0400 - Iteration = 20, F-1 score = 0.5699481865284974 43 | 2022-07-29T13:40:18.622317-0400 - Iteration = 21, F-1 score = 0.576530612244898 44 | 2022-07-29T13:40:18.680313-0400 - Iteration = 22, F-1 score = 0.5825242718446602 45 | 2022-07-29T13:40:18.743314-0400 - Iteration = 23, F-1 score = 0.5849056603773585 46 | 2022-07-29T13:40:18.801355-0400 - Iteration = 24, F-1 score = 0.6103896103896104 47 | 2022-07-29T13:40:18.872313-0400 - Iteration = 25, F-1 score = 0.5561497326203209 48 | 2022-07-29T13:40:18.945312-0400 - Iteration = 26, F-1 score = 0.5538461538461539 49 | 2022-07-29T13:40:19.011315-0400 - Iteration = 27, F-1 score = 0.5700000000000001 50 | 2022-07-29T13:40:19.087319-0400 - Iteration = 28, F-1 score = 0.5819070904645476 51 | 2022-07-29T13:40:19.159321-0400 - Iteration = 29, F-1 score = 0.611111111111111 52 | 2022-07-29T13:40:19.231320-0400 - Iteration = 30, F-1 score = 0.620253164556962 53 | 2022-07-29T13:40:19.315314-0400 - Iteration = 31, F-1 score = 0.5599999999999999 54 | 2022-07-29T13:40:19.394318-0400 - Iteration = 32, F-1 score = 0.5604113110539845 55 | 2022-07-29T13:40:19.474315-0400 - Iteration = 33, F-1 score = 0.5792079207920793 56 | 2022-07-29T13:40:19.558315-0400 - Iteration = 34, F-1 score = 0.5783132530120483 57 | 2022-07-29T13:40:19.638358-0400 - Iteration = 35, F-1 score = 0.6160919540229884 58 | 2022-07-29T13:40:19.728320-0400 - Iteration = 36, F-1 score = 0.5582655826558265 59 | 2022-07-29T13:40:19.807315-0400 - Iteration = 37, F-1 score = 0.5638297872340425 60 | 2022-07-29T13:40:19.882315-0400 - Iteration = 38, F-1 score = 0.5639686684073107 61 | 2022-07-29T13:40:19.953319-0400 - Iteration = 39, F-1 score = 0.5778894472361809 62 | 2022-07-29T13:40:20.018317-0400 - Iteration = 40, F-1 score = 0.5896226415094339 63 | 2022-07-29T13:40:20.081312-0400 - Iteration = 41, F-1 score = 0.6122448979591837 64 | 2022-07-29T13:40:20.205316-0400 - Iteration = 42, F-1 score = 0.5489130434782608 65 | 2022-07-29T13:40:20.289313-0400 - Iteration = 43, F-1 score = 0.5684210526315789 66 | 2022-07-29T13:40:20.356317-0400 - Iteration = 44, F-1 score = 0.5803108808290155 67 | 2022-07-29T13:40:20.428313-0400 - Iteration = 45, F-1 score = 0.5864661654135338 68 | 2022-07-29T13:40:20.498319-0400 - Iteration = 46, F-1 score = 0.5879518072289157 69 | 2022-07-29T13:40:20.572330-0400 - Iteration = 47, F-1 score = 0.6139954853273137 70 | 2022-07-29T13:40:20.645317-0400 - Iteration = 48, F-1 score = 0.5464480874316939 71 | 2022-07-29T13:40:20.718350-0400 - Iteration = 49, F-1 score = 0.5706806282722513 72 | 2022-07-29T13:40:21.390317-0400 - ################################################################## 73 | 2022-07-29T13:40:21.394317-0400 - Start Second-round AutoOD training... 74 | 2022-07-29T13:40:21.462314-0400 - Iteration = 0, F-1 score = 0.5985401459854015 75 | 2022-07-29T13:40:21.544330-0400 - Iteration = 1, F-1 score = 0.592964824120603 76 | 2022-07-29T13:40:21.610314-0400 - Iteration = 2, F-1 score = 0.611111111111111 77 | 2022-07-29T13:40:21.664325-0400 - Iteration = 3, F-1 score = 0.636 78 | 2022-07-29T13:40:21.754325-0400 - Iteration = 4, F-1 score = 0.575197889182058 79 | 2022-07-29T13:40:21.849317-0400 - Iteration = 5, F-1 score = 0.5861182519280205 80 | 2022-07-29T13:40:21.937838-0400 - Iteration = 6, F-1 score = 0.5939086294416244 81 | 2022-07-29T13:40:22.009834-0400 - Iteration = 7, F-1 score = 0.6223277909738718 82 | 2022-07-29T13:40:22.068841-0400 - Iteration = 8, F-1 score = 0.6376237623762376 83 | 2022-07-29T13:40:22.137845-0400 - Iteration = 9, F-1 score = 0.5879265091863517 84 | 2022-07-29T13:40:22.221842-0400 - Iteration = 10, F-1 score = 0.5861182519280205 85 | 2022-07-29T13:40:22.337839-0400 - Iteration = 11, F-1 score = 0.582716049382716 86 | 2022-07-29T13:40:22.417836-0400 - Iteration = 12, F-1 score = 0.6086956521739131 87 | 2022-07-29T13:40:22.498839-0400 - Iteration = 13, F-1 score = 0.6100917431192661 88 | 2022-07-29T13:40:22.619837-0400 - Iteration = 14, F-1 score = 0.547945205479452 89 | 2022-07-29T13:40:22.714840-0400 - Iteration = 15, F-1 score = 0.543010752688172 90 | 2022-07-29T13:40:22.807838-0400 - Iteration = 16, F-1 score = 0.5654450261780105 91 | 2022-07-29T13:40:22.887839-0400 - Iteration = 17, F-1 score = 0.5801526717557253 92 | 2022-07-29T13:40:22.965838-0400 - Iteration = 18, F-1 score = 0.574938574938575 93 | 2022-07-29T13:40:23.043838-0400 - Iteration = 19, F-1 score = 0.6090909090909091 94 | 2022-07-29T13:40:23.125838-0400 - Iteration = 20, F-1 score = 0.5424657534246574 95 | 2022-07-29T13:40:23.197836-0400 - Iteration = 21, F-1 score = 0.5608465608465608 96 | 2022-07-29T13:40:23.263838-0400 - Iteration = 22, F-1 score = 0.5677083333333334 97 | 2022-07-29T13:40:23.321842-0400 - Iteration = 23, F-1 score = 0.5612244897959183 98 | 2022-07-29T13:40:23.387843-0400 - Iteration = 24, F-1 score = 0.5658536585365853 99 | 2022-07-29T13:40:23.445838-0400 - Iteration = 25, F-1 score = 0.5977011494252874 100 | 2022-07-29T13:40:23.527842-0400 - Iteration = 26, F-1 score = 0.5409836065573771 101 | 2022-07-29T13:40:23.618838-0400 - Iteration = 27, F-1 score = 0.5454545454545454 102 | 2022-07-29T13:40:23.676839-0400 - Iteration = 28, F-1 score = 0.5602094240837696 103 | 2022-07-29T13:40:23.737838-0400 - Iteration = 29, F-1 score = 0.5772151898734177 104 | 2022-07-29T13:40:23.799843-0400 - Iteration = 30, F-1 score = 0.5851318944844125 105 | 2022-07-29T13:40:23.863838-0400 - Iteration = 31, F-1 score = 0.6022988505747127 106 | 2022-07-29T13:40:23.936841-0400 - Iteration = 32, F-1 score = 0.5528455284552845 107 | 2022-07-29T13:40:24.008839-0400 - Iteration = 33, F-1 score = 0.5493333333333333 108 | 2022-07-29T13:40:24.073840-0400 - Iteration = 34, F-1 score = 0.5677083333333334 109 | 2022-07-29T13:40:24.153837-0400 - Iteration = 35, F-1 score = 0.5793450881612091 110 | 2022-07-29T13:40:24.231840-0400 - Iteration = 36, F-1 score = 0.5871121718377089 111 | 2022-07-29T13:40:24.314846-0400 - Iteration = 37, F-1 score = 0.6139954853273137 112 | 2022-07-29T13:40:24.407844-0400 - Iteration = 38, F-1 score = 0.5464480874316939 113 | 2022-07-29T13:40:24.500839-0400 - Iteration = 39, F-1 score = 0.5631578947368421 114 | 2022-07-29T13:40:24.593841-0400 - Iteration = 40, F-1 score = 0.5788113695090439 115 | 2022-07-29T13:40:24.690367-0400 - Iteration = 41, F-1 score = 0.5864661654135338 116 | 2022-07-29T13:40:24.806367-0400 - Iteration = 42, F-1 score = 0.5913461538461539 117 | 2022-07-29T13:40:24.885367-0400 - Iteration = 43, F-1 score = 0.618510158013544 118 | 2022-07-29T13:40:24.988365-0400 - Iteration = 44, F-1 score = 0.5464480874316939 119 | 2022-07-29T13:40:25.074365-0400 - Iteration = 45, F-1 score = 0.5706806282722513 120 | 2022-07-29T13:40:25.152364-0400 - Iteration = 46, F-1 score = 0.5824742268041238 121 | 2022-07-29T13:40:25.246367-0400 - Iteration = 47, F-1 score = 0.5864661654135338 122 | 2022-07-29T13:40:25.312363-0400 - Iteration = 48, F-1 score = 0.5913461538461539 123 | 2022-07-29T13:40:25.435367-0400 - Iteration = 49, F-1 score = 0.625 124 | 2022-07-29T13:40:25.632369-0400 - Length of prediction results = 500 125 | 2022-07-29T13:40:25.640369-0400 - Final AutoOD F-1 Score= 0.625 126 | -------------------------------------------------------------------------------- /static/css/style.css: -------------------------------------------------------------------------------- 1 | /* table related */ 2 | table { 3 | width: 60%; 4 | } 5 | 6 | .table-full { 7 | width: 95%; 8 | } 9 | 10 | .table-small { 11 | width: 30% 12 | } 13 | 14 | a.active { 15 | color: white; 16 | background-color: #4CAF50; 17 | } 18 | 19 | .clickable { 20 | cursor: pointer; 21 | } 22 | 23 | .clickable:hover { 24 | color: #990000; 25 | } 26 | 27 | .redirect { 28 | cursor: pointer; 29 | } 30 | 31 | .redirect:hover { 32 | color: #990000; 33 | } 34 | 35 | th, td { 36 | padding: 8px 15px; 37 | text-align: left; 38 | } 39 | 40 | .collapse-table { 41 | width: 100%; 42 | } 43 | 44 | tr:nth-child(even) { 45 | background-color: #f2f2f2; 46 | } 47 | 48 | .annotation-font { 49 | color: #606060; 50 | font-size: 12px; 51 | } 52 | 53 | /* link related */ 54 | a:link { 55 | text-decoration: none; 56 | color: #606060; 57 | } 58 | 59 | a:active, a:hover { 60 | text-decoration: none; 61 | color: #990000; 62 | } 63 | 64 | /** modify input */ 65 | input[type=text] { 66 | padding: 3px 7px; 67 | margin: 5px 0; 68 | box-sizing: border-box; 69 | font-size: 15px; 70 | } 71 | 72 | .sansserif { 73 | font-family: Arial, Helvetica, sans-serif; 74 | } 75 | 76 | .button { 77 | background-color: white; 78 | color: black; 79 | border: 2px solid #e7e7e7; 80 | padding: 10px 21px; 81 | text-align: center; 82 | text-decoration: none; 83 | display: inline-block; 84 | font-size: 15px; 85 | } 86 | 87 | .button:hover { 88 | background-color: #e7e7e7; 89 | color: white; 90 | } 91 | 92 | input[type="file"] { 93 | display: none; 94 | } 95 | 96 | .custom-file-upload { 97 | border: 1px solid #ccc; 98 | display: inline-block; 99 | padding: 6px 12px; 100 | cursor: pointer; 101 | } 102 | 103 | .custom-file-upload:hover { 104 | background-color: #e7e7e7; 105 | color: white; 106 | } 107 | 108 | .inputfile-box { 109 | position: relative; 110 | } 111 | 112 | .inputfile { 113 | display: none; 114 | } 115 | 116 | .container { 117 | display: inline-block; 118 | width: 100%; 119 | } 120 | 121 | .file-box { 122 | display: inline-block; 123 | width: 100%; 124 | border: 1px solid #ccc; 125 | padding: 5px 0px 5px 5px; 126 | box-sizing: border-box; 127 | height: calc(2rem - 2px); 128 | } 129 | 130 | .file-button { 131 | /* background: white; */ 132 | padding: 5px; 133 | position: absolute; 134 | border: 1px solid #ccc; 135 | top: 0px; 136 | right: 0px; 137 | } 138 | 139 | .file-button:hover { 140 | color: #990000; 141 | } 142 | 143 | .header { 144 | background-color: #eeeeee; 145 | color: #404040; 146 | /* text-align: center; */ 147 | padding: 0.01em; 148 | } 149 | 150 | .header-image { 151 | /* display: inline-block; */ 152 | width: 120px; 153 | /* border: 1px solid #ccc; */ 154 | padding: 5px 0px 5px 5px; 155 | box-sizing: border-box; 156 | } 157 | 158 | .header-text { 159 | /* background: white; */ 160 | padding: 5px 0px 5px 5px; 161 | position: absolute; 162 | /* border: 1px solid #ccc; */ 163 | /* top: 0px; */ 164 | right: 80%; 165 | font-family: "Segoe UI", Arial, sans-serif 166 | } 167 | 168 | /* Style the header */ 169 | .header { 170 | background-color: #f1f1f1; 171 | padding: 10px; 172 | text-align: center; 173 | } 174 | 175 | 176 | .footer { 177 | position: fixed; 178 | height: 50px; 179 | width: 100%; 180 | background-color: #eeeeee; 181 | bottom: 0; 182 | } 183 | 184 | p.copyright { 185 | position: fixed; 186 | width: 100%; 187 | color: black; 188 | /* line-height: 40px; */ 189 | font-size: 0.7em; 190 | text-align: center; 191 | bottom: 0; 192 | } 193 | 194 | /* Style the top navigation bar */ 195 | .topnav { 196 | overflow: hidden; 197 | background-color: #333; 198 | } 199 | 200 | /* Style the topnav links */ 201 | .topnav a { 202 | float: left; 203 | display: block; 204 | color: #f2f2f2; 205 | text-align: center; 206 | padding: 14px 16px; 207 | text-decoration: none; 208 | font-size: 17px; 209 | } 210 | 211 | /* Hide the link that should open and close the topnav on small screens */ 212 | .topnav .icon { 213 | display: none; 214 | } 215 | 216 | /* Dropdown container - needed to position the dropdown content */ 217 | .dropdown { 218 | float: left; 219 | overflow: hidden; 220 | } 221 | 222 | /* Style the dropdown button to fit inside the topnav */ 223 | .dropdown .dropbtn { 224 | font-size: 17px; 225 | border: none; 226 | outline: none; 227 | color: white; 228 | padding: 14px 16px; 229 | background-color: inherit; 230 | font-family: inherit; 231 | margin: 0; 232 | } 233 | 234 | /* Style the dropdown content (hidden by default) */ 235 | .dropdown-content { 236 | display: none; 237 | position: absolute; 238 | background-color: #f9f9f9; 239 | min-width: 160px; 240 | box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2); 241 | z-index: 1; 242 | } 243 | 244 | /* Style the links inside the dropdown */ 245 | .dropdown-content a { 246 | float: none; 247 | color: black; 248 | padding: 12px 16px; 249 | text-decoration: none; 250 | display: block; 251 | text-align: left; 252 | } 253 | 254 | /* Add a dark background on topnav links and the dropdown button on hover */ 255 | .topnav a:hover, .dropdown:hover .dropbtn { 256 | background-color: #555; 257 | color: white; 258 | } 259 | 260 | /* Add a grey background to dropdown links on hover */ 261 | .dropdown-content a:hover { 262 | background-color: #ddd; 263 | color: black; 264 | } 265 | 266 | /* Show the dropdown menu when the user moves the mouse over the dropdown button */ 267 | .dropdown:hover .dropdown-content { 268 | display: block; 269 | } 270 | 271 | /* When the screen is less than 600 pixels wide, hide all links, except for the first one ("Home"). Show the link that contains should open and close the topnav (.icon) */ 272 | @media screen and (max-width: 600px) { 273 | .topnav a:not(:first-child), .dropdown .dropbtn { 274 | display: none; 275 | } 276 | 277 | .topnav a.icon { 278 | float: right; 279 | display: block; 280 | } 281 | } 282 | 283 | /* The "responsive" class is added to the topnav with JavaScript when the user clicks on the icon. This class makes the topnav look good on small screens (display the links vertically instead of horizontally) */ 284 | @media screen and (max-width: 600px) { 285 | .topnav.responsive { 286 | position: relative; 287 | } 288 | 289 | .topnav.responsive a.icon { 290 | position: absolute; 291 | right: 0; 292 | top: 0; 293 | } 294 | 295 | .topnav.responsive a { 296 | float: none; 297 | display: block; 298 | text-align: left; 299 | } 300 | 301 | .topnav.responsive .dropdown { 302 | float: none; 303 | } 304 | 305 | .topnav.responsive .dropdown-content { 306 | position: relative; 307 | } 308 | 309 | .topnav.responsive .dropdown .dropbtn { 310 | display: block; 311 | width: 100%; 312 | text-align: left; 313 | } 314 | } 315 | 316 | .tooltip { 317 | position: relative; 318 | display: inline-block; 319 | /*border-bottom: 1px dotted black;*/ 320 | } 321 | 322 | .tooltip .tooltiptext { 323 | visibility: hidden; 324 | width: 400px; 325 | background-color: black; 326 | color: #fff; 327 | text-align: left; 328 | border-radius: 6px; 329 | padding: 5px 5px; 330 | position: absolute; 331 | z-index: 1; 332 | top: -5px; 333 | left: 110%; 334 | } 335 | 336 | .tooltip .tooltiptext::after { 337 | content: ""; 338 | position: absolute; 339 | top: 50%; 340 | right: 100%; 341 | margin-top: -5px; 342 | border-width: 5px; 343 | border-style: solid; 344 | border-color: transparent black transparent transparent; 345 | } 346 | 347 | .tooltip:hover .tooltiptext { 348 | visibility: visible; 349 | } 350 | 351 | /* Create three equal columns that floats next to each other */ 352 | .column { 353 | float: left; 354 | width: 30%; 355 | padding: 15px; 356 | } 357 | 358 | /* Create three equal columns that floats next to each other */ 359 | .column_main { 360 | float: left; 361 | width: 60%; 362 | padding: 15px; 363 | } 364 | 365 | /* Clear floats after the columns */ 366 | .row:after { 367 | content: ""; 368 | display: table; 369 | clear: both; 370 | } 371 | 372 | .select-style { 373 | border: 2px solid #ccc; 374 | width: 150px; 375 | font-size: 15px; 376 | border-radius: 1px; 377 | overflow: hidden; 378 | text-overflow: ellipsis; 379 | /*background: #fafafa url("img/icon-select.png") no-repeat;*/ 380 | } 381 | 382 | .select-style select { 383 | padding: 10px 10px; 384 | width: 150%; 385 | border: none; 386 | box-shadow: none; 387 | background: transparent; 388 | background-image: none; 389 | -webkit-appearance: none; 390 | } 391 | 392 | .select-style select:focus { 393 | outline: none; 394 | } 395 | .logging_window{ 396 | display: block; 397 | padding: 9.5px; 398 | font-size: 13px; 399 | line-height: 1.42857143; 400 | color: #333; 401 | word-break: break-all; 402 | word-wrap: break-word; 403 | background-color: #f5f5f5; 404 | border: 1px solid #ccc; 405 | border-radius: 4px; 406 | width: 80%; 407 | margin: auto; 408 | } 409 | 410 | /*!* -------------------- Select Box Styles: stackoverflow.com Method *!*/ 411 | /*!* -------------------- Source: http://stackoverflow.com/a/5809186 *!*/ 412 | /*select#soflow, select#soflow-color {*/ 413 | 414 | /*background-image: url(http://i62.tinypic.com/15xvbd5.png), -webkit-linear-gradient(#FAFAFA, #F4F4F4 40%, #E5E5E5);*/ 415 | /*background-position: 97% center;*/ 416 | /*background-repeat: no-repeat;*/ 417 | /*border: 1px solid #AAA;*/ 418 | /*color: #555;*/ 419 | /*font-size: inherit;*/ 420 | /*margin: 10px;*/ 421 | /*overflow: hidden;*/ 422 | /*padding: 5px 10px;*/ 423 | /*text-overflow: ellipsis;*/ 424 | /*white-space: nowrap;*/ 425 | /*width: 200px;*/ 426 | /*}*/ 427 | 428 | /*select#soflow-color {*/ 429 | /*color: #fff;*/ 430 | /*background-image: url(http://i62.tinypic.com/15xvbd5.png), -webkit-linear-gradient(#779126, #779126 40%, #779126);*/ 431 | /*background-color: #779126;*/ 432 | /*-webkit-border-radius: 20px;*/ 433 | /*-moz-border-radius: 20px;*/ 434 | /*border-radius: 20px;*/ 435 | /*padding-left: 15px;*/ 436 | /*}*/ 437 | /*!* Responsive layout - makes the three columns stack on top of each other instead of next to each other *!*/ 438 | /*@media screen and (max-width:600px) {*/ 439 | /*.column {*/ 440 | /*width: 100%;*/ 441 | /*}*/ 442 | /*}*/ -------------------------------------------------------------------------------- /static/css/bootstrap.css: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.4 (http://getbootstrap.com) 3 | * Copyright 2011-2015 Twitter, Inc. 4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5 | *//*! normalize.css v3.0.2 | MIT License | git.io/normalize */ 6 | 7 | select { 8 | text-transform: none 9 | } 10 | 11 | input[type=checkbox] { 12 | -webkit-box-sizing: border-box; 13 | -moz-box-sizing: border-box; 14 | box-sizing: border-box; 15 | padding: 0 16 | } 17 | 18 | select { 19 | font-family: inherit; 20 | font-size: inherit; 21 | line-height: inherit 22 | } 23 | 24 | input[type=checkbox] { 25 | margin: 4px 0 0; 26 | margin-top: 1px \9; 27 | line-height: normal 28 | } 29 | 30 | select[multiple], select[size] { 31 | height: auto 32 | } 33 | 34 | input[type=checkbox]:focus, input[type=radio]:focus { 35 | outline: thin dotted; 36 | outline: 5px auto -webkit-focus-ring-color; 37 | outline-offset: -2px 38 | } 39 | 40 | .form-group { 41 | margin-bottom: 15px 42 | } 43 | 44 | .checkbox, .radio { 45 | position: relative; 46 | display: block; 47 | margin-top: 10px; 48 | margin-bottom: 10px 49 | } 50 | 51 | .checkbox label, .radio label { 52 | min-height: 20px; 53 | padding-left: 20px; 54 | margin-bottom: 0; 55 | font-weight: 400; 56 | cursor: pointer 57 | } 58 | 59 | .checkbox input[type=checkbox], .checkbox-inline input[type=checkbox], .radio input[type=radio], .radio-inline input[type=radio] { 60 | position: absolute; 61 | margin-top: 4px \9; 62 | margin-left: -20px 63 | } 64 | 65 | .checkbox + .checkbox, .radio + .radio { 66 | margin-top: -5px 67 | } 68 | 69 | .checkbox-inline, .radio-inline { 70 | position: relative; 71 | display: inline-block; 72 | padding-left: 20px; 73 | margin-bottom: 0; 74 | font-weight: 400; 75 | vertical-align: middle; 76 | cursor: pointer 77 | } 78 | 79 | .checkbox-inline + .checkbox-inline, .radio-inline + .radio-inline { 80 | margin-top: 0; 81 | margin-left: 10px 82 | } 83 | 84 | .checkbox-inline.disabled, .radio-inline.disabled, fieldset[disabled] .checkbox-inline, fieldset[disabled] .radio-inline { 85 | cursor: not-allowed 86 | } 87 | 88 | .checkbox.disabled label, .radio.disabled label, fieldset[disabled] .checkbox label, fieldset[disabled] .radio label { 89 | cursor: not-allowed 90 | } 91 | 92 | select[multiple].form-group-sm .form-control, textarea.form-group-sm .form-control { 93 | height: auto 94 | } 95 | 96 | .form-group-sm .form-control-static { 97 | height: 30px; 98 | min-height: 32px; 99 | padding: 5px 10px; 100 | font-size: 12px; 101 | line-height: 1.5 102 | } 103 | 104 | .form-group-lg .form-control { 105 | height: 46px; 106 | padding: 10px 16px; 107 | font-size: 18px; 108 | line-height: 1.3333333; 109 | border-radius: 6px 110 | } 111 | 112 | select.form-group-lg .form-control { 113 | height: 46px; 114 | line-height: 46px 115 | } 116 | 117 | select[multiple].form-group-lg .form-control, textarea.form-group-lg .form-control { 118 | height: auto 119 | } 120 | 121 | .form-group-lg .form-control-static { 122 | height: 46px; 123 | min-height: 38px; 124 | padding: 10px 16px; 125 | font-size: 18px; 126 | line-height: 1.3333333 127 | } 128 | 129 | 130 | .form-horizontal .checkbox, .form-horizontal .checkbox-inline, .form-horizontal .radio, .form-horizontal .radio-inline { 131 | padding-top: 7px; 132 | margin-top: 0; 133 | margin-bottom: 0 134 | } 135 | 136 | .form-horizontal .checkbox, .form-horizontal .radio { 137 | min-height: 27px 138 | } 139 | 140 | .form-horizontal .form-group { 141 | margin-right: -15px; 142 | margin-left: -15px 143 | } 144 | 145 | @media (min-width: 768px) { 146 | .form-horizontal .control-label { 147 | padding-top: 7px; 148 | margin-bottom: 0; 149 | text-align: right 150 | } 151 | } 152 | 153 | .form-horizontal .has-feedback .form-control-feedback { 154 | right: 15px 155 | } 156 | 157 | .btn { 158 | display: inline-block; 159 | padding: 6px 12px; 160 | margin-bottom: 0; 161 | font-size: 14px; 162 | font-weight: 400; 163 | line-height: 1.42857143; 164 | text-align: center; 165 | white-space: nowrap; 166 | vertical-align: middle; 167 | -ms-touch-action: manipulation; 168 | touch-action: manipulation; 169 | cursor: pointer; 170 | -webkit-user-select: none; 171 | -moz-user-select: none; 172 | -ms-user-select: none; 173 | user-select: none; 174 | background-image: none; 175 | border: 1px solid transparent; 176 | border-radius: 4px 177 | } 178 | 179 | .btn.active.focus, .btn.active:focus, .btn.focus, .btn:active.focus, .btn:active:focus, .btn:focus { 180 | outline: thin dotted; 181 | outline: 5px auto -webkit-focus-ring-color; 182 | outline-offset: -2px 183 | } 184 | 185 | .btn.focus, .btn:focus, .btn:hover { 186 | color: #333; 187 | text-decoration: none 188 | } 189 | 190 | .btn.active, .btn:active { 191 | background-image: none; 192 | outline: 0; 193 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); 194 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125) 195 | } 196 | 197 | .btn.disabled, .btn[disabled], fieldset[disabled] .btn { 198 | pointer-events: none; 199 | cursor: not-allowed; 200 | filter: alpha(opacity=65); 201 | -webkit-box-shadow: none; 202 | box-shadow: none; 203 | opacity: .65 204 | } 205 | 206 | .btn-default { 207 | color: #333; 208 | background-color: #fff; 209 | border-color: #ccc 210 | } 211 | 212 | .btn-default.active, .btn-default.focus, .btn-default:active, .btn-default:focus, .btn-default:hover, .open > .dropdown-toggle.btn-default { 213 | color: #333; 214 | background-color: #e6e6e6; 215 | border-color: #adadad 216 | } 217 | 218 | .btn-default.active, .btn-default:active, .open > .dropdown-toggle.btn-default { 219 | background-image: none 220 | } 221 | 222 | .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 { 223 | background-color: #fff; 224 | border-color: #ccc 225 | } 226 | 227 | .btn-default .badge { 228 | color: #fff; 229 | background-color: #333 230 | } 231 | 232 | .btn-primary { 233 | color: #fff; 234 | background-color: #337ab7; 235 | border-color: #2e6da4 236 | } 237 | 238 | .btn-primary.active, .btn-primary.focus, .btn-primary:active, .btn-primary:focus, .btn-primary:hover, .open > .dropdown-toggle.btn-primary { 239 | color: #fff; 240 | background-color: #286090; 241 | border-color: #204d74 242 | } 243 | 244 | .btn-primary.active, .btn-primary:active, .open > .dropdown-toggle.btn-primary { 245 | background-image: none 246 | } 247 | 248 | .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 { 249 | background-color: #337ab7; 250 | border-color: #2e6da4 251 | } 252 | 253 | .btn-primary .badge { 254 | color: #337ab7; 255 | background-color: #fff 256 | } 257 | 258 | .btn-link { 259 | font-weight: 400; 260 | color: #337ab7; 261 | border-radius: 0 262 | } 263 | 264 | .btn-link, .btn-link.active, .btn-link:active, .btn-link[disabled], fieldset[disabled] .btn-link { 265 | background-color: transparent; 266 | -webkit-box-shadow: none; 267 | box-shadow: none 268 | } 269 | 270 | .btn-link, .btn-link:active, .btn-link:focus, .btn-link:hover { 271 | border-color: transparent 272 | } 273 | 274 | .btn-link:focus, .btn-link:hover { 275 | color: #23527c; 276 | text-decoration: underline; 277 | background-color: transparent 278 | } 279 | 280 | .btn-link[disabled]:focus, .btn-link[disabled]:hover, fieldset[disabled] .btn-link:focus, fieldset[disabled] .btn-link:hover { 281 | color: #777; 282 | text-decoration: none 283 | } 284 | 285 | .btn-group-lg > .btn, .btn-lg { 286 | padding: 10px 16px; 287 | font-size: 18px; 288 | line-height: 1.3333333; 289 | border-radius: 6px 290 | } 291 | 292 | .btn-group-sm > .btn, .btn-sm { 293 | padding: 5px 10px; 294 | font-size: 12px; 295 | line-height: 1.5; 296 | border-radius: 3px 297 | } 298 | 299 | .btn-group-xs > .btn, .btn-xs { 300 | padding: 1px 5px; 301 | font-size: 12px; 302 | line-height: 1.5; 303 | border-radius: 3px 304 | } 305 | 306 | .btn-block { 307 | display: block; 308 | width: 100% 309 | } 310 | 311 | .btn-block + .btn-block { 312 | margin-top: 5px 313 | } 314 | 315 | input[type=button].btn-block, input[type=reset].btn-block, input[type=submit].btn-block { 316 | width: 100% 317 | } 318 | 319 | .fade { 320 | opacity: 0; 321 | -webkit-transition: opacity .15s linear; 322 | -o-transition: opacity .15s linear; 323 | transition: opacity .15s linear 324 | } 325 | 326 | .fade.in { 327 | opacity: 1 328 | } 329 | 330 | .collapse { 331 | display: none 332 | } 333 | 334 | .collapse.in { 335 | display: block 336 | } 337 | 338 | tr.collapse.in { 339 | display: table-row 340 | } 341 | 342 | tbody.collapse.in { 343 | display: table-row-group 344 | } 345 | 346 | .collapsing { 347 | position: relative; 348 | height: 0; 349 | overflow: hidden; 350 | -webkit-transition-timing-function: ease; 351 | -o-transition-timing-function: ease; 352 | transition-timing-function: ease; 353 | -webkit-transition-duration: .35s; 354 | -o-transition-duration: .35s; 355 | transition-duration: .35s; 356 | -webkit-transition-property: height, visibility; 357 | -o-transition-property: height, visibility; 358 | transition-property: height, visibility 359 | } 360 | 361 | .caret { 362 | display: inline-block; 363 | width: 0; 364 | height: 0; 365 | margin-left: 2px; 366 | vertical-align: middle; 367 | border-top: 4px dashed; 368 | border-right: 4px solid transparent; 369 | border-left: 4px solid transparent 370 | } 371 | 372 | .dropdown, .dropup { 373 | position: relative 374 | } 375 | 376 | .dropdown-toggle:focus { 377 | outline: 0 378 | } 379 | 380 | .dropdown-menu { 381 | position: absolute; 382 | top: 100%; 383 | left: 0; 384 | z-index: 1000; 385 | display: none; 386 | float: left; 387 | min-width: 160px; 388 | padding: 5px 0; 389 | margin: 2px 0 0; 390 | font-size: 14px; 391 | text-align: left; 392 | list-style: none; 393 | background-color: #fff; 394 | -webkit-background-clip: padding-box; 395 | background-clip: padding-box; 396 | border: 1px solid #ccc; 397 | border: 1px solid rgba(0, 0, 0, .15); 398 | border-radius: 4px; 399 | -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); 400 | box-shadow: 0 6px 12px rgba(0, 0, 0, .175) 401 | } 402 | 403 | .dropdown-menu.pull-right { 404 | right: 0; 405 | left: auto 406 | } 407 | 408 | .dropdown-menu .divider { 409 | height: 1px; 410 | margin: 9px 0; 411 | overflow: hidden; 412 | background-color: #e5e5e5 413 | } 414 | 415 | .dropdown-menu > li > a { 416 | display: block; 417 | padding: 3px 20px; 418 | clear: both; 419 | font-weight: 400; 420 | line-height: 1.42857143; 421 | color: #333; 422 | white-space: nowrap 423 | } 424 | 425 | .dropdown-menu > li > a:focus, .dropdown-menu > li > a:hover { 426 | color: #262626; 427 | text-decoration: none; 428 | background-color: #f5f5f5 429 | } 430 | 431 | .dropdown-menu > .active > a, .dropdown-menu > .active > a:focus, .dropdown-menu > .active > a:hover { 432 | color: #fff; 433 | text-decoration: none; 434 | background-color: #337ab7; 435 | outline: 0 436 | } 437 | 438 | .dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:focus, .dropdown-menu > .disabled > a:hover { 439 | color: #777 440 | } 441 | 442 | .dropdown-menu > .disabled > a:focus, .dropdown-menu > .disabled > a:hover { 443 | text-decoration: none; 444 | cursor: not-allowed; 445 | background-color: transparent; 446 | background-image: none; 447 | filter: progid:DXImageTransform.Microsoft.gradient(enabled=false) 448 | } 449 | 450 | .open > .dropdown-menu { 451 | display: block 452 | } 453 | 454 | .open > a { 455 | outline: 0 456 | } 457 | 458 | .dropdown-menu-right { 459 | right: 0; 460 | left: auto 461 | } 462 | 463 | .dropdown-menu-left { 464 | right: auto; 465 | left: 0 466 | } 467 | 468 | .dropdown-header { 469 | display: block; 470 | padding: 3px 20px; 471 | font-size: 12px; 472 | line-height: 1.42857143; 473 | color: #777; 474 | white-space: nowrap 475 | } 476 | 477 | .dropdown-backdrop { 478 | position: fixed; 479 | top: 0; 480 | right: 0; 481 | bottom: 0; 482 | left: 0; 483 | z-index: 990 484 | } 485 | 486 | .pull-right > .dropdown-menu { 487 | right: 0; 488 | left: auto 489 | } 490 | 491 | .dropup .caret, .navbar-fixed-bottom .dropdown .caret { 492 | content: ""; 493 | border-top: 0; 494 | border-bottom: 4px solid 495 | } 496 | 497 | .dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { 498 | top: auto; 499 | bottom: 100%; 500 | margin-bottom: 2px 501 | } 502 | 503 | .btn-group, .btn-group-vertical { 504 | position: relative; 505 | display: inline-block; 506 | vertical-align: middle 507 | } 508 | 509 | .btn-group-vertical > .btn, .btn-group > .btn { 510 | position: relative; 511 | float: left 512 | } 513 | 514 | .btn-group-vertical > .btn.active, .btn-group-vertical > .btn:active, .btn-group-vertical > .btn:focus, .btn-group-vertical > .btn:hover, .btn-group > .btn.active, .btn-group > .btn:active, .btn-group > .btn:focus, .btn-group > .btn:hover { 515 | z-index: 2 516 | } 517 | 518 | .btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group { 519 | margin-left: -1px 520 | } 521 | 522 | .btn-toolbar { 523 | margin-left: -5px 524 | } 525 | 526 | .btn-toolbar .btn-group, .btn-toolbar .input-group { 527 | float: left 528 | } 529 | 530 | .btn-toolbar > .btn, .btn-toolbar > .btn-group, .btn-toolbar > .input-group { 531 | margin-left: 5px 532 | } 533 | 534 | .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { 535 | border-radius: 0 536 | } 537 | 538 | .btn-group > .btn:first-child { 539 | margin-left: 0 540 | } 541 | 542 | .btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { 543 | border-top-right-radius: 0; 544 | border-bottom-right-radius: 0 545 | } 546 | 547 | .btn-group > .btn:last-child:not(:first-child), .btn-group > .dropdown-toggle:not(:first-child) { 548 | border-top-left-radius: 0; 549 | border-bottom-left-radius: 0 550 | } 551 | 552 | .btn-group > .btn-group { 553 | float: left 554 | } 555 | 556 | .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { 557 | border-radius: 0 558 | } 559 | 560 | .btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, .btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { 561 | border-top-right-radius: 0; 562 | border-bottom-right-radius: 0 563 | } 564 | 565 | .btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { 566 | border-top-left-radius: 0; 567 | border-bottom-left-radius: 0 568 | } 569 | 570 | .btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { 571 | outline: 0 572 | } 573 | 574 | .btn-group > .btn + .dropdown-toggle { 575 | padding-right: 8px; 576 | padding-left: 8px 577 | } 578 | 579 | .btn-group > .btn-lg + .dropdown-toggle { 580 | padding-right: 12px; 581 | padding-left: 12px 582 | } 583 | 584 | .btn-group.open .dropdown-toggle { 585 | -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); 586 | box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125) 587 | } 588 | 589 | .btn-group.open .dropdown-toggle.btn-link { 590 | -webkit-box-shadow: none; 591 | box-shadow: none 592 | } 593 | 594 | .btn .caret { 595 | margin-left: 0 596 | } 597 | 598 | .btn-lg .caret { 599 | border-width: 5px 5px 0; 600 | border-bottom-width: 0 601 | } 602 | 603 | .dropup .btn-lg .caret { 604 | border-width: 0 5px 5px 605 | } 606 | 607 | 608 | [data-toggle=buttons] > .btn input[type=checkbox], [data-toggle=buttons] > .btn input[type=radio], [data-toggle=buttons] > .btn-group > .btn input[type=checkbox], [data-toggle=buttons] > .btn-group > .btn input[type=radio] { 609 | position: absolute; 610 | clip: rect(0, 0, 0, 0); 611 | pointer-events: none 612 | } 613 | 614 | .input-group { 615 | position: relative; 616 | display: table; 617 | border-collapse: separate 618 | } 619 | 620 | .input-group[class*=col-] { 621 | float: none; 622 | padding-right: 0; 623 | padding-left: 0 624 | } 625 | 626 | .input-group .form-control { 627 | position: relative; 628 | z-index: 2; 629 | float: left; 630 | width: 100%; 631 | margin-bottom: 0 632 | } 633 | 634 | .input-group-lg > .form-control, .input-group-lg > .input-group-addon, .input-group-lg > .input-group-btn > .btn { 635 | height: 46px; 636 | padding: 10px 16px; 637 | font-size: 18px; 638 | line-height: 1.3333333; 639 | border-radius: 6px 640 | } 641 | 642 | select.input-group-lg > .form-control, select.input-group-lg > .input-group-addon, select.input-group-lg > .input-group-btn > .btn { 643 | height: 46px; 644 | line-height: 46px 645 | } 646 | 647 | select[multiple].input-group-lg > .form-control, select[multiple].input-group-lg > .input-group-addon, select[multiple].input-group-lg > .input-group-btn > .btn, textarea.input-group-lg > .form-control, textarea.input-group-lg > .input-group-addon, textarea.input-group-lg > .input-group-btn > .btn { 648 | height: auto 649 | } 650 | 651 | .input-group-sm > .form-control, .input-group-sm > .input-group-addon, .input-group-sm > .input-group-btn > .btn { 652 | height: 30px; 653 | padding: 5px 10px; 654 | font-size: 12px; 655 | line-height: 1.5; 656 | border-radius: 3px 657 | } 658 | 659 | select.input-group-sm > .form-control, select.input-group-sm > .input-group-addon, select.input-group-sm > .input-group-btn > .btn { 660 | height: 30px; 661 | line-height: 30px 662 | } 663 | 664 | select[multiple].input-group-sm > .form-control, select[multiple].input-group-sm > .input-group-addon, select[multiple].input-group-sm > .input-group-btn > .btn, textarea.input-group-sm > .form-control, textarea.input-group-sm > .input-group-addon, textarea.input-group-sm > .input-group-btn > .btn { 665 | height: auto 666 | } 667 | 668 | .input-group .form-control, .input-group-addon, .input-group-btn { 669 | display: table-cell 670 | } 671 | 672 | .input-group .form-control:not(:first-child):not(:last-child), .input-group-addon:not(:first-child):not(:last-child), .input-group-btn:not(:first-child):not(:last-child) { 673 | border-radius: 0 674 | } 675 | 676 | .input-group-addon, .input-group-btn { 677 | width: 1%; 678 | white-space: nowrap; 679 | vertical-align: middle 680 | } 681 | 682 | .input-group-addon { 683 | padding: 6px 12px; 684 | font-size: 14px; 685 | font-weight: 400; 686 | line-height: 1; 687 | color: #555; 688 | text-align: center; 689 | background-color: #eee; 690 | border: 1px solid #ccc; 691 | border-radius: 4px 692 | } 693 | 694 | .input-group-addon.input-sm { 695 | padding: 5px 10px; 696 | font-size: 12px; 697 | border-radius: 3px 698 | } 699 | 700 | .input-group-addon.input-lg { 701 | padding: 10px 16px; 702 | font-size: 18px; 703 | border-radius: 6px 704 | } 705 | 706 | .input-group-addon input[type=checkbox], .input-group-addon input[type=radio] { 707 | margin-top: 0 708 | } 709 | 710 | .input-group .form-control:first-child, .input-group-addon:first-child, .input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group > .btn, .input-group-btn:first-child > .dropdown-toggle, .input-group-btn:last-child > .btn-group:not(:last-child) > .btn, .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) { 711 | border-top-right-radius: 0; 712 | border-bottom-right-radius: 0 713 | } 714 | 715 | .input-group-addon:first-child { 716 | border-right: 0 717 | } 718 | 719 | .input-group .form-control:last-child, .input-group-addon:last-child, .input-group-btn:first-child > .btn-group:not(:first-child) > .btn, .input-group-btn:first-child > .btn:not(:first-child), .input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group > .btn, .input-group-btn:last-child > .dropdown-toggle { 720 | border-top-left-radius: 0; 721 | border-bottom-left-radius: 0 722 | } 723 | 724 | .input-group-addon:last-child { 725 | border-left: 0 726 | } 727 | 728 | .input-group-btn { 729 | position: relative; 730 | font-size: 0; 731 | white-space: nowrap 732 | } 733 | 734 | .input-group-btn > .btn { 735 | position: relative 736 | } 737 | 738 | .input-group-btn > .btn + .btn { 739 | margin-left: -1px 740 | } 741 | 742 | .input-group-btn > .btn:active, .input-group-btn > .btn:focus, .input-group-btn > .btn:hover { 743 | z-index: 2 744 | } 745 | 746 | .input-group-btn:first-child > .btn, .input-group-btn:first-child > .btn-group { 747 | margin-right: -1px 748 | } 749 | 750 | .input-group-btn:last-child > .btn, .input-group-btn:last-child > .btn-group { 751 | margin-left: -1px 752 | } 753 | 754 | .tab-content > .tab-pane { 755 | display: none 756 | } 757 | 758 | .tab-content > .active { 759 | display: block 760 | } 761 | 762 | 763 | .btn .badge { 764 | position: relative; 765 | top: -1px 766 | } 767 | 768 | .btn-group-xs > .btn .badge, .btn-xs .badge { 769 | top: 0; 770 | padding: 1px 5px 771 | } 772 | 773 | .list-group-item.active > .badge, .nav-pills > .active > a > .badge { 774 | color: #337ab7; 775 | background-color: #fff 776 | } 777 | 778 | .list-group-item > .badge { 779 | float: right 780 | } 781 | 782 | .list-group-item > .badge + .badge { 783 | margin-right: 5px 784 | } 785 | 786 | .list-group { 787 | padding-left: 0; 788 | margin-bottom: 20px 789 | } 790 | 791 | .list-group-item { 792 | position: relative; 793 | display: block; 794 | padding: 10px 15px; 795 | margin-bottom: -1px; 796 | background-color: #fff; 797 | border: 1px solid #ddd 798 | } 799 | 800 | .list-group-item:first-child { 801 | border-top-left-radius: 4px; 802 | border-top-right-radius: 4px 803 | } 804 | 805 | .list-group-item:last-child { 806 | margin-bottom: 0; 807 | border-bottom-right-radius: 4px; 808 | border-bottom-left-radius: 4px 809 | } 810 | 811 | a.list-group-item { 812 | color: #555 813 | } 814 | 815 | a.list-group-item .list-group-item-heading { 816 | color: #333 817 | } 818 | 819 | a.list-group-item:focus, a.list-group-item:hover { 820 | color: #555; 821 | text-decoration: none; 822 | background-color: #f5f5f5 823 | } 824 | 825 | .list-group-item.disabled, .list-group-item.disabled:focus, .list-group-item.disabled:hover { 826 | color: #777; 827 | cursor: not-allowed; 828 | background-color: #eee 829 | } 830 | 831 | .list-group-item.disabled .list-group-item-heading, .list-group-item.disabled:focus .list-group-item-heading, .list-group-item.disabled:hover .list-group-item-heading { 832 | color: inherit 833 | } 834 | 835 | .list-group-item.disabled .list-group-item-text, .list-group-item.disabled:focus .list-group-item-text, .list-group-item.disabled:hover .list-group-item-text { 836 | color: #777 837 | } 838 | 839 | .list-group-item.active, .list-group-item.active:focus, .list-group-item.active:hover { 840 | z-index: 2; 841 | color: #fff; 842 | background-color: #337ab7; 843 | border-color: #337ab7 844 | } 845 | 846 | .list-group-item.active .list-group-item-heading, .list-group-item.active .list-group-item-heading > .small, .list-group-item.active .list-group-item-heading > small, .list-group-item.active:focus .list-group-item-heading, .list-group-item.active:focus .list-group-item-heading > .small, .list-group-item.active:focus .list-group-item-heading > small, .list-group-item.active:hover .list-group-item-heading, .list-group-item.active:hover .list-group-item-heading > .small, .list-group-item.active:hover .list-group-item-heading > small { 847 | color: inherit 848 | } 849 | 850 | .list-group-item.active .list-group-item-text, .list-group-item.active:focus .list-group-item-text, .list-group-item.active:hover .list-group-item-text { 851 | color: #c7ddef 852 | } 853 | 854 | .list-group-item-info { 855 | color: #31708f; 856 | background-color: #d9edf7 857 | } 858 | 859 | a.list-group-item-info { 860 | color: #31708f 861 | } 862 | 863 | a.list-group-item-info .list-group-item-heading { 864 | color: inherit 865 | } 866 | 867 | a.list-group-item-info:focus, a.list-group-item-info:hover { 868 | color: #31708f; 869 | background-color: #c4e3f3 870 | } 871 | 872 | a.list-group-item-info.active, a.list-group-item-info.active:focus, a.list-group-item-info.active:hover { 873 | color: #fff; 874 | background-color: #31708f; 875 | border-color: #31708f 876 | } 877 | 878 | .list-group-item-heading { 879 | margin-top: 0; 880 | margin-bottom: 5px 881 | } 882 | 883 | .list-group-item-text { 884 | margin-bottom: 0; 885 | line-height: 1.3 886 | } 887 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/less/variables.less: -------------------------------------------------------------------------------- 1 | // Variables 2 | // -------------------------- 3 | 4 | @fa-font-path: "../fonts"; 5 | @fa-font-size-base: 14px; 6 | @fa-line-height-base: 1; 7 | //@fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts"; // for referencing Bootstrap CDN font files directly 8 | @fa-css-prefix: fa; 9 | @fa-version: "4.7.0"; 10 | @fa-border-color: #eee; 11 | @fa-inverse: #fff; 12 | @fa-li-width: (30em / 14); 13 | 14 | @fa-var-500px: "\f26e"; 15 | @fa-var-address-book: "\f2b9"; 16 | @fa-var-address-book-o: "\f2ba"; 17 | @fa-var-address-card: "\f2bb"; 18 | @fa-var-address-card-o: "\f2bc"; 19 | @fa-var-adjust: "\f042"; 20 | @fa-var-adn: "\f170"; 21 | @fa-var-align-center: "\f037"; 22 | @fa-var-align-justify: "\f039"; 23 | @fa-var-align-left: "\f036"; 24 | @fa-var-align-right: "\f038"; 25 | @fa-var-amazon: "\f270"; 26 | @fa-var-ambulance: "\f0f9"; 27 | @fa-var-american-sign-language-interpreting: "\f2a3"; 28 | @fa-var-anchor: "\f13d"; 29 | @fa-var-android: "\f17b"; 30 | @fa-var-angellist: "\f209"; 31 | @fa-var-angle-double-down: "\f103"; 32 | @fa-var-angle-double-left: "\f100"; 33 | @fa-var-angle-double-right: "\f101"; 34 | @fa-var-angle-double-up: "\f102"; 35 | @fa-var-angle-down: "\f107"; 36 | @fa-var-angle-left: "\f104"; 37 | @fa-var-angle-right: "\f105"; 38 | @fa-var-angle-up: "\f106"; 39 | @fa-var-apple: "\f179"; 40 | @fa-var-archive: "\f187"; 41 | @fa-var-area-chart: "\f1fe"; 42 | @fa-var-arrow-circle-down: "\f0ab"; 43 | @fa-var-arrow-circle-left: "\f0a8"; 44 | @fa-var-arrow-circle-o-down: "\f01a"; 45 | @fa-var-arrow-circle-o-left: "\f190"; 46 | @fa-var-arrow-circle-o-right: "\f18e"; 47 | @fa-var-arrow-circle-o-up: "\f01b"; 48 | @fa-var-arrow-circle-right: "\f0a9"; 49 | @fa-var-arrow-circle-up: "\f0aa"; 50 | @fa-var-arrow-down: "\f063"; 51 | @fa-var-arrow-left: "\f060"; 52 | @fa-var-arrow-right: "\f061"; 53 | @fa-var-arrow-up: "\f062"; 54 | @fa-var-arrows: "\f047"; 55 | @fa-var-arrows-alt: "\f0b2"; 56 | @fa-var-arrows-h: "\f07e"; 57 | @fa-var-arrows-v: "\f07d"; 58 | @fa-var-asl-interpreting: "\f2a3"; 59 | @fa-var-assistive-listening-systems: "\f2a2"; 60 | @fa-var-asterisk: "\f069"; 61 | @fa-var-at: "\f1fa"; 62 | @fa-var-audio-description: "\f29e"; 63 | @fa-var-automobile: "\f1b9"; 64 | @fa-var-backward: "\f04a"; 65 | @fa-var-balance-scale: "\f24e"; 66 | @fa-var-ban: "\f05e"; 67 | @fa-var-bandcamp: "\f2d5"; 68 | @fa-var-bank: "\f19c"; 69 | @fa-var-bar-chart: "\f080"; 70 | @fa-var-bar-chart-o: "\f080"; 71 | @fa-var-barcode: "\f02a"; 72 | @fa-var-bars: "\f0c9"; 73 | @fa-var-bath: "\f2cd"; 74 | @fa-var-bathtub: "\f2cd"; 75 | @fa-var-battery: "\f240"; 76 | @fa-var-battery-0: "\f244"; 77 | @fa-var-battery-1: "\f243"; 78 | @fa-var-battery-2: "\f242"; 79 | @fa-var-battery-3: "\f241"; 80 | @fa-var-battery-4: "\f240"; 81 | @fa-var-battery-empty: "\f244"; 82 | @fa-var-battery-full: "\f240"; 83 | @fa-var-battery-half: "\f242"; 84 | @fa-var-battery-quarter: "\f243"; 85 | @fa-var-battery-three-quarters: "\f241"; 86 | @fa-var-bed: "\f236"; 87 | @fa-var-beer: "\f0fc"; 88 | @fa-var-behance: "\f1b4"; 89 | @fa-var-behance-square: "\f1b5"; 90 | @fa-var-bell: "\f0f3"; 91 | @fa-var-bell-o: "\f0a2"; 92 | @fa-var-bell-slash: "\f1f6"; 93 | @fa-var-bell-slash-o: "\f1f7"; 94 | @fa-var-bicycle: "\f206"; 95 | @fa-var-binoculars: "\f1e5"; 96 | @fa-var-birthday-cake: "\f1fd"; 97 | @fa-var-bitbucket: "\f171"; 98 | @fa-var-bitbucket-square: "\f172"; 99 | @fa-var-bitcoin: "\f15a"; 100 | @fa-var-black-tie: "\f27e"; 101 | @fa-var-blind: "\f29d"; 102 | @fa-var-bluetooth: "\f293"; 103 | @fa-var-bluetooth-b: "\f294"; 104 | @fa-var-bold: "\f032"; 105 | @fa-var-bolt: "\f0e7"; 106 | @fa-var-bomb: "\f1e2"; 107 | @fa-var-book: "\f02d"; 108 | @fa-var-bookmark: "\f02e"; 109 | @fa-var-bookmark-o: "\f097"; 110 | @fa-var-braille: "\f2a1"; 111 | @fa-var-briefcase: "\f0b1"; 112 | @fa-var-btc: "\f15a"; 113 | @fa-var-bug: "\f188"; 114 | @fa-var-building: "\f1ad"; 115 | @fa-var-building-o: "\f0f7"; 116 | @fa-var-bullhorn: "\f0a1"; 117 | @fa-var-bullseye: "\f140"; 118 | @fa-var-bus: "\f207"; 119 | @fa-var-buysellads: "\f20d"; 120 | @fa-var-cab: "\f1ba"; 121 | @fa-var-calculator: "\f1ec"; 122 | @fa-var-calendar: "\f073"; 123 | @fa-var-calendar-check-o: "\f274"; 124 | @fa-var-calendar-minus-o: "\f272"; 125 | @fa-var-calendar-o: "\f133"; 126 | @fa-var-calendar-plus-o: "\f271"; 127 | @fa-var-calendar-times-o: "\f273"; 128 | @fa-var-camera: "\f030"; 129 | @fa-var-camera-retro: "\f083"; 130 | @fa-var-car: "\f1b9"; 131 | @fa-var-caret-down: "\f0d7"; 132 | @fa-var-caret-left: "\f0d9"; 133 | @fa-var-caret-right: "\f0da"; 134 | @fa-var-caret-square-o-down: "\f150"; 135 | @fa-var-caret-square-o-left: "\f191"; 136 | @fa-var-caret-square-o-right: "\f152"; 137 | @fa-var-caret-square-o-up: "\f151"; 138 | @fa-var-caret-up: "\f0d8"; 139 | @fa-var-cart-arrow-down: "\f218"; 140 | @fa-var-cart-plus: "\f217"; 141 | @fa-var-cc: "\f20a"; 142 | @fa-var-cc-amex: "\f1f3"; 143 | @fa-var-cc-diners-club: "\f24c"; 144 | @fa-var-cc-discover: "\f1f2"; 145 | @fa-var-cc-jcb: "\f24b"; 146 | @fa-var-cc-mastercard: "\f1f1"; 147 | @fa-var-cc-paypal: "\f1f4"; 148 | @fa-var-cc-stripe: "\f1f5"; 149 | @fa-var-cc-visa: "\f1f0"; 150 | @fa-var-certificate: "\f0a3"; 151 | @fa-var-chain: "\f0c1"; 152 | @fa-var-chain-broken: "\f127"; 153 | @fa-var-check: "\f00c"; 154 | @fa-var-check-circle: "\f058"; 155 | @fa-var-check-circle-o: "\f05d"; 156 | @fa-var-check-square: "\f14a"; 157 | @fa-var-check-square-o: "\f046"; 158 | @fa-var-chevron-circle-down: "\f13a"; 159 | @fa-var-chevron-circle-left: "\f137"; 160 | @fa-var-chevron-circle-right: "\f138"; 161 | @fa-var-chevron-circle-up: "\f139"; 162 | @fa-var-chevron-down: "\f078"; 163 | @fa-var-chevron-left: "\f053"; 164 | @fa-var-chevron-right: "\f054"; 165 | @fa-var-chevron-up: "\f077"; 166 | @fa-var-child: "\f1ae"; 167 | @fa-var-chrome: "\f268"; 168 | @fa-var-circle: "\f111"; 169 | @fa-var-circle-o: "\f10c"; 170 | @fa-var-circle-o-notch: "\f1ce"; 171 | @fa-var-circle-thin: "\f1db"; 172 | @fa-var-clipboard: "\f0ea"; 173 | @fa-var-clock-o: "\f017"; 174 | @fa-var-clone: "\f24d"; 175 | @fa-var-close: "\f00d"; 176 | @fa-var-cloud: "\f0c2"; 177 | @fa-var-cloud-download: "\f0ed"; 178 | @fa-var-cloud-upload: "\f0ee"; 179 | @fa-var-cny: "\f157"; 180 | @fa-var-code: "\f121"; 181 | @fa-var-code-fork: "\f126"; 182 | @fa-var-codepen: "\f1cb"; 183 | @fa-var-codiepie: "\f284"; 184 | @fa-var-coffee: "\f0f4"; 185 | @fa-var-cog: "\f013"; 186 | @fa-var-cogs: "\f085"; 187 | @fa-var-columns: "\f0db"; 188 | @fa-var-comment: "\f075"; 189 | @fa-var-comment-o: "\f0e5"; 190 | @fa-var-commenting: "\f27a"; 191 | @fa-var-commenting-o: "\f27b"; 192 | @fa-var-comments: "\f086"; 193 | @fa-var-comments-o: "\f0e6"; 194 | @fa-var-compass: "\f14e"; 195 | @fa-var-compress: "\f066"; 196 | @fa-var-connectdevelop: "\f20e"; 197 | @fa-var-contao: "\f26d"; 198 | @fa-var-copy: "\f0c5"; 199 | @fa-var-copyright: "\f1f9"; 200 | @fa-var-creative-commons: "\f25e"; 201 | @fa-var-credit-card: "\f09d"; 202 | @fa-var-credit-card-alt: "\f283"; 203 | @fa-var-crop: "\f125"; 204 | @fa-var-crosshairs: "\f05b"; 205 | @fa-var-css3: "\f13c"; 206 | @fa-var-cube: "\f1b2"; 207 | @fa-var-cubes: "\f1b3"; 208 | @fa-var-cut: "\f0c4"; 209 | @fa-var-cutlery: "\f0f5"; 210 | @fa-var-dashboard: "\f0e4"; 211 | @fa-var-dashcube: "\f210"; 212 | @fa-var-database: "\f1c0"; 213 | @fa-var-deaf: "\f2a4"; 214 | @fa-var-deafness: "\f2a4"; 215 | @fa-var-dedent: "\f03b"; 216 | @fa-var-delicious: "\f1a5"; 217 | @fa-var-desktop: "\f108"; 218 | @fa-var-deviantart: "\f1bd"; 219 | @fa-var-diamond: "\f219"; 220 | @fa-var-digg: "\f1a6"; 221 | @fa-var-dollar: "\f155"; 222 | @fa-var-dot-circle-o: "\f192"; 223 | @fa-var-download: "\f019"; 224 | @fa-var-dribbble: "\f17d"; 225 | @fa-var-drivers-license: "\f2c2"; 226 | @fa-var-drivers-license-o: "\f2c3"; 227 | @fa-var-dropbox: "\f16b"; 228 | @fa-var-drupal: "\f1a9"; 229 | @fa-var-edge: "\f282"; 230 | @fa-var-edit: "\f044"; 231 | @fa-var-eercast: "\f2da"; 232 | @fa-var-eject: "\f052"; 233 | @fa-var-ellipsis-h: "\f141"; 234 | @fa-var-ellipsis-v: "\f142"; 235 | @fa-var-empire: "\f1d1"; 236 | @fa-var-envelope: "\f0e0"; 237 | @fa-var-envelope-o: "\f003"; 238 | @fa-var-envelope-open: "\f2b6"; 239 | @fa-var-envelope-open-o: "\f2b7"; 240 | @fa-var-envelope-square: "\f199"; 241 | @fa-var-envira: "\f299"; 242 | @fa-var-eraser: "\f12d"; 243 | @fa-var-etsy: "\f2d7"; 244 | @fa-var-eur: "\f153"; 245 | @fa-var-euro: "\f153"; 246 | @fa-var-exchange: "\f0ec"; 247 | @fa-var-exclamation: "\f12a"; 248 | @fa-var-exclamation-circle: "\f06a"; 249 | @fa-var-exclamation-triangle: "\f071"; 250 | @fa-var-expand: "\f065"; 251 | @fa-var-expeditedssl: "\f23e"; 252 | @fa-var-external-link: "\f08e"; 253 | @fa-var-external-link-square: "\f14c"; 254 | @fa-var-eye: "\f06e"; 255 | @fa-var-eye-slash: "\f070"; 256 | @fa-var-eyedropper: "\f1fb"; 257 | @fa-var-fa: "\f2b4"; 258 | @fa-var-facebook: "\f09a"; 259 | @fa-var-facebook-f: "\f09a"; 260 | @fa-var-facebook-official: "\f230"; 261 | @fa-var-facebook-square: "\f082"; 262 | @fa-var-fast-backward: "\f049"; 263 | @fa-var-fast-forward: "\f050"; 264 | @fa-var-fax: "\f1ac"; 265 | @fa-var-feed: "\f09e"; 266 | @fa-var-female: "\f182"; 267 | @fa-var-fighter-jet: "\f0fb"; 268 | @fa-var-file: "\f15b"; 269 | @fa-var-file-archive-o: "\f1c6"; 270 | @fa-var-file-audio-o: "\f1c7"; 271 | @fa-var-file-code-o: "\f1c9"; 272 | @fa-var-file-excel-o: "\f1c3"; 273 | @fa-var-file-image-o: "\f1c5"; 274 | @fa-var-file-movie-o: "\f1c8"; 275 | @fa-var-file-o: "\f016"; 276 | @fa-var-file-pdf-o: "\f1c1"; 277 | @fa-var-file-photo-o: "\f1c5"; 278 | @fa-var-file-picture-o: "\f1c5"; 279 | @fa-var-file-powerpoint-o: "\f1c4"; 280 | @fa-var-file-sound-o: "\f1c7"; 281 | @fa-var-file-text: "\f15c"; 282 | @fa-var-file-text-o: "\f0f6"; 283 | @fa-var-file-video-o: "\f1c8"; 284 | @fa-var-file-word-o: "\f1c2"; 285 | @fa-var-file-zip-o: "\f1c6"; 286 | @fa-var-files-o: "\f0c5"; 287 | @fa-var-film: "\f008"; 288 | @fa-var-filter: "\f0b0"; 289 | @fa-var-fire: "\f06d"; 290 | @fa-var-fire-extinguisher: "\f134"; 291 | @fa-var-firefox: "\f269"; 292 | @fa-var-first-order: "\f2b0"; 293 | @fa-var-flag: "\f024"; 294 | @fa-var-flag-checkered: "\f11e"; 295 | @fa-var-flag-o: "\f11d"; 296 | @fa-var-flash: "\f0e7"; 297 | @fa-var-flask: "\f0c3"; 298 | @fa-var-flickr: "\f16e"; 299 | @fa-var-floppy-o: "\f0c7"; 300 | @fa-var-folder: "\f07b"; 301 | @fa-var-folder-o: "\f114"; 302 | @fa-var-folder-open: "\f07c"; 303 | @fa-var-folder-open-o: "\f115"; 304 | @fa-var-font: "\f031"; 305 | @fa-var-font-awesome: "\f2b4"; 306 | @fa-var-fonticons: "\f280"; 307 | @fa-var-fort-awesome: "\f286"; 308 | @fa-var-forumbee: "\f211"; 309 | @fa-var-forward: "\f04e"; 310 | @fa-var-foursquare: "\f180"; 311 | @fa-var-free-code-camp: "\f2c5"; 312 | @fa-var-frown-o: "\f119"; 313 | @fa-var-futbol-o: "\f1e3"; 314 | @fa-var-gamepad: "\f11b"; 315 | @fa-var-gavel: "\f0e3"; 316 | @fa-var-gbp: "\f154"; 317 | @fa-var-ge: "\f1d1"; 318 | @fa-var-gear: "\f013"; 319 | @fa-var-gears: "\f085"; 320 | @fa-var-genderless: "\f22d"; 321 | @fa-var-get-pocket: "\f265"; 322 | @fa-var-gg: "\f260"; 323 | @fa-var-gg-circle: "\f261"; 324 | @fa-var-gift: "\f06b"; 325 | @fa-var-git: "\f1d3"; 326 | @fa-var-git-square: "\f1d2"; 327 | @fa-var-github: "\f09b"; 328 | @fa-var-github-alt: "\f113"; 329 | @fa-var-github-square: "\f092"; 330 | @fa-var-gitlab: "\f296"; 331 | @fa-var-gittip: "\f184"; 332 | @fa-var-glass: "\f000"; 333 | @fa-var-glide: "\f2a5"; 334 | @fa-var-glide-g: "\f2a6"; 335 | @fa-var-globe: "\f0ac"; 336 | @fa-var-google: "\f1a0"; 337 | @fa-var-google-plus: "\f0d5"; 338 | @fa-var-google-plus-circle: "\f2b3"; 339 | @fa-var-google-plus-official: "\f2b3"; 340 | @fa-var-google-plus-square: "\f0d4"; 341 | @fa-var-google-wallet: "\f1ee"; 342 | @fa-var-graduation-cap: "\f19d"; 343 | @fa-var-gratipay: "\f184"; 344 | @fa-var-grav: "\f2d6"; 345 | @fa-var-group: "\f0c0"; 346 | @fa-var-h-square: "\f0fd"; 347 | @fa-var-hacker-news: "\f1d4"; 348 | @fa-var-hand-grab-o: "\f255"; 349 | @fa-var-hand-lizard-o: "\f258"; 350 | @fa-var-hand-o-down: "\f0a7"; 351 | @fa-var-hand-o-left: "\f0a5"; 352 | @fa-var-hand-o-right: "\f0a4"; 353 | @fa-var-hand-o-up: "\f0a6"; 354 | @fa-var-hand-paper-o: "\f256"; 355 | @fa-var-hand-peace-o: "\f25b"; 356 | @fa-var-hand-pointer-o: "\f25a"; 357 | @fa-var-hand-rock-o: "\f255"; 358 | @fa-var-hand-scissors-o: "\f257"; 359 | @fa-var-hand-spock-o: "\f259"; 360 | @fa-var-hand-stop-o: "\f256"; 361 | @fa-var-handshake-o: "\f2b5"; 362 | @fa-var-hard-of-hearing: "\f2a4"; 363 | @fa-var-hashtag: "\f292"; 364 | @fa-var-hdd-o: "\f0a0"; 365 | @fa-var-header: "\f1dc"; 366 | @fa-var-headphones: "\f025"; 367 | @fa-var-heart: "\f004"; 368 | @fa-var-heart-o: "\f08a"; 369 | @fa-var-heartbeat: "\f21e"; 370 | @fa-var-history: "\f1da"; 371 | @fa-var-home: "\f015"; 372 | @fa-var-hospital-o: "\f0f8"; 373 | @fa-var-hotel: "\f236"; 374 | @fa-var-hourglass: "\f254"; 375 | @fa-var-hourglass-1: "\f251"; 376 | @fa-var-hourglass-2: "\f252"; 377 | @fa-var-hourglass-3: "\f253"; 378 | @fa-var-hourglass-end: "\f253"; 379 | @fa-var-hourglass-half: "\f252"; 380 | @fa-var-hourglass-o: "\f250"; 381 | @fa-var-hourglass-start: "\f251"; 382 | @fa-var-houzz: "\f27c"; 383 | @fa-var-html5: "\f13b"; 384 | @fa-var-i-cursor: "\f246"; 385 | @fa-var-id-badge: "\f2c1"; 386 | @fa-var-id-card: "\f2c2"; 387 | @fa-var-id-card-o: "\f2c3"; 388 | @fa-var-ils: "\f20b"; 389 | @fa-var-image: "\f03e"; 390 | @fa-var-imdb: "\f2d8"; 391 | @fa-var-inbox: "\f01c"; 392 | @fa-var-indent: "\f03c"; 393 | @fa-var-industry: "\f275"; 394 | @fa-var-info: "\f129"; 395 | @fa-var-info-circle: "\f05a"; 396 | @fa-var-inr: "\f156"; 397 | @fa-var-instagram: "\f16d"; 398 | @fa-var-institution: "\f19c"; 399 | @fa-var-internet-explorer: "\f26b"; 400 | @fa-var-intersex: "\f224"; 401 | @fa-var-ioxhost: "\f208"; 402 | @fa-var-italic: "\f033"; 403 | @fa-var-joomla: "\f1aa"; 404 | @fa-var-jpy: "\f157"; 405 | @fa-var-jsfiddle: "\f1cc"; 406 | @fa-var-key: "\f084"; 407 | @fa-var-keyboard-o: "\f11c"; 408 | @fa-var-krw: "\f159"; 409 | @fa-var-language: "\f1ab"; 410 | @fa-var-laptop: "\f109"; 411 | @fa-var-lastfm: "\f202"; 412 | @fa-var-lastfm-square: "\f203"; 413 | @fa-var-leaf: "\f06c"; 414 | @fa-var-leanpub: "\f212"; 415 | @fa-var-legal: "\f0e3"; 416 | @fa-var-lemon-o: "\f094"; 417 | @fa-var-level-down: "\f149"; 418 | @fa-var-level-up: "\f148"; 419 | @fa-var-life-bouy: "\f1cd"; 420 | @fa-var-life-buoy: "\f1cd"; 421 | @fa-var-life-ring: "\f1cd"; 422 | @fa-var-life-saver: "\f1cd"; 423 | @fa-var-lightbulb-o: "\f0eb"; 424 | @fa-var-line-chart: "\f201"; 425 | @fa-var-link: "\f0c1"; 426 | @fa-var-linkedin: "\f0e1"; 427 | @fa-var-linkedin-square: "\f08c"; 428 | @fa-var-linode: "\f2b8"; 429 | @fa-var-linux: "\f17c"; 430 | @fa-var-list: "\f03a"; 431 | @fa-var-list-alt: "\f022"; 432 | @fa-var-list-ol: "\f0cb"; 433 | @fa-var-list-ul: "\f0ca"; 434 | @fa-var-location-arrow: "\f124"; 435 | @fa-var-lock: "\f023"; 436 | @fa-var-long-arrow-down: "\f175"; 437 | @fa-var-long-arrow-left: "\f177"; 438 | @fa-var-long-arrow-right: "\f178"; 439 | @fa-var-long-arrow-up: "\f176"; 440 | @fa-var-low-vision: "\f2a8"; 441 | @fa-var-magic: "\f0d0"; 442 | @fa-var-magnet: "\f076"; 443 | @fa-var-mail-forward: "\f064"; 444 | @fa-var-mail-reply: "\f112"; 445 | @fa-var-mail-reply-all: "\f122"; 446 | @fa-var-male: "\f183"; 447 | @fa-var-map: "\f279"; 448 | @fa-var-map-marker: "\f041"; 449 | @fa-var-map-o: "\f278"; 450 | @fa-var-map-pin: "\f276"; 451 | @fa-var-map-signs: "\f277"; 452 | @fa-var-mars: "\f222"; 453 | @fa-var-mars-double: "\f227"; 454 | @fa-var-mars-stroke: "\f229"; 455 | @fa-var-mars-stroke-h: "\f22b"; 456 | @fa-var-mars-stroke-v: "\f22a"; 457 | @fa-var-maxcdn: "\f136"; 458 | @fa-var-meanpath: "\f20c"; 459 | @fa-var-medium: "\f23a"; 460 | @fa-var-medkit: "\f0fa"; 461 | @fa-var-meetup: "\f2e0"; 462 | @fa-var-meh-o: "\f11a"; 463 | @fa-var-mercury: "\f223"; 464 | @fa-var-microchip: "\f2db"; 465 | @fa-var-microphone: "\f130"; 466 | @fa-var-microphone-slash: "\f131"; 467 | @fa-var-minus: "\f068"; 468 | @fa-var-minus-circle: "\f056"; 469 | @fa-var-minus-square: "\f146"; 470 | @fa-var-minus-square-o: "\f147"; 471 | @fa-var-mixcloud: "\f289"; 472 | @fa-var-mobile: "\f10b"; 473 | @fa-var-mobile-phone: "\f10b"; 474 | @fa-var-modx: "\f285"; 475 | @fa-var-money: "\f0d6"; 476 | @fa-var-moon-o: "\f186"; 477 | @fa-var-mortar-board: "\f19d"; 478 | @fa-var-motorcycle: "\f21c"; 479 | @fa-var-mouse-pointer: "\f245"; 480 | @fa-var-music: "\f001"; 481 | @fa-var-navicon: "\f0c9"; 482 | @fa-var-neuter: "\f22c"; 483 | @fa-var-newspaper-o: "\f1ea"; 484 | @fa-var-object-group: "\f247"; 485 | @fa-var-object-ungroup: "\f248"; 486 | @fa-var-odnoklassniki: "\f263"; 487 | @fa-var-odnoklassniki-square: "\f264"; 488 | @fa-var-opencart: "\f23d"; 489 | @fa-var-openid: "\f19b"; 490 | @fa-var-opera: "\f26a"; 491 | @fa-var-optin-monster: "\f23c"; 492 | @fa-var-outdent: "\f03b"; 493 | @fa-var-pagelines: "\f18c"; 494 | @fa-var-paint-brush: "\f1fc"; 495 | @fa-var-paper-plane: "\f1d8"; 496 | @fa-var-paper-plane-o: "\f1d9"; 497 | @fa-var-paperclip: "\f0c6"; 498 | @fa-var-paragraph: "\f1dd"; 499 | @fa-var-paste: "\f0ea"; 500 | @fa-var-pause: "\f04c"; 501 | @fa-var-pause-circle: "\f28b"; 502 | @fa-var-pause-circle-o: "\f28c"; 503 | @fa-var-paw: "\f1b0"; 504 | @fa-var-paypal: "\f1ed"; 505 | @fa-var-pencil: "\f040"; 506 | @fa-var-pencil-square: "\f14b"; 507 | @fa-var-pencil-square-o: "\f044"; 508 | @fa-var-percent: "\f295"; 509 | @fa-var-phone: "\f095"; 510 | @fa-var-phone-square: "\f098"; 511 | @fa-var-photo: "\f03e"; 512 | @fa-var-picture-o: "\f03e"; 513 | @fa-var-pie-chart: "\f200"; 514 | @fa-var-pied-piper: "\f2ae"; 515 | @fa-var-pied-piper-alt: "\f1a8"; 516 | @fa-var-pied-piper-pp: "\f1a7"; 517 | @fa-var-pinterest: "\f0d2"; 518 | @fa-var-pinterest-p: "\f231"; 519 | @fa-var-pinterest-square: "\f0d3"; 520 | @fa-var-plane: "\f072"; 521 | @fa-var-play: "\f04b"; 522 | @fa-var-play-circle: "\f144"; 523 | @fa-var-play-circle-o: "\f01d"; 524 | @fa-var-plug: "\f1e6"; 525 | @fa-var-plus: "\f067"; 526 | @fa-var-plus-circle: "\f055"; 527 | @fa-var-plus-square: "\f0fe"; 528 | @fa-var-plus-square-o: "\f196"; 529 | @fa-var-podcast: "\f2ce"; 530 | @fa-var-power-off: "\f011"; 531 | @fa-var-print: "\f02f"; 532 | @fa-var-product-hunt: "\f288"; 533 | @fa-var-puzzle-piece: "\f12e"; 534 | @fa-var-qq: "\f1d6"; 535 | @fa-var-qrcode: "\f029"; 536 | @fa-var-question: "\f128"; 537 | @fa-var-question-circle: "\f059"; 538 | @fa-var-question-circle-o: "\f29c"; 539 | @fa-var-quora: "\f2c4"; 540 | @fa-var-quote-left: "\f10d"; 541 | @fa-var-quote-right: "\f10e"; 542 | @fa-var-ra: "\f1d0"; 543 | @fa-var-random: "\f074"; 544 | @fa-var-ravelry: "\f2d9"; 545 | @fa-var-rebel: "\f1d0"; 546 | @fa-var-recycle: "\f1b8"; 547 | @fa-var-reddit: "\f1a1"; 548 | @fa-var-reddit-alien: "\f281"; 549 | @fa-var-reddit-square: "\f1a2"; 550 | @fa-var-refresh: "\f021"; 551 | @fa-var-registered: "\f25d"; 552 | @fa-var-remove: "\f00d"; 553 | @fa-var-renren: "\f18b"; 554 | @fa-var-reorder: "\f0c9"; 555 | @fa-var-repeat: "\f01e"; 556 | @fa-var-reply: "\f112"; 557 | @fa-var-reply-all: "\f122"; 558 | @fa-var-resistance: "\f1d0"; 559 | @fa-var-retweet: "\f079"; 560 | @fa-var-rmb: "\f157"; 561 | @fa-var-road: "\f018"; 562 | @fa-var-rocket: "\f135"; 563 | @fa-var-rotate-left: "\f0e2"; 564 | @fa-var-rotate-right: "\f01e"; 565 | @fa-var-rouble: "\f158"; 566 | @fa-var-rss: "\f09e"; 567 | @fa-var-rss-square: "\f143"; 568 | @fa-var-rub: "\f158"; 569 | @fa-var-ruble: "\f158"; 570 | @fa-var-rupee: "\f156"; 571 | @fa-var-s15: "\f2cd"; 572 | @fa-var-safari: "\f267"; 573 | @fa-var-save: "\f0c7"; 574 | @fa-var-scissors: "\f0c4"; 575 | @fa-var-scribd: "\f28a"; 576 | @fa-var-search: "\f002"; 577 | @fa-var-search-minus: "\f010"; 578 | @fa-var-search-plus: "\f00e"; 579 | @fa-var-sellsy: "\f213"; 580 | @fa-var-send: "\f1d8"; 581 | @fa-var-send-o: "\f1d9"; 582 | @fa-var-server: "\f233"; 583 | @fa-var-share: "\f064"; 584 | @fa-var-share-alt: "\f1e0"; 585 | @fa-var-share-alt-square: "\f1e1"; 586 | @fa-var-share-square: "\f14d"; 587 | @fa-var-share-square-o: "\f045"; 588 | @fa-var-shekel: "\f20b"; 589 | @fa-var-sheqel: "\f20b"; 590 | @fa-var-shield: "\f132"; 591 | @fa-var-ship: "\f21a"; 592 | @fa-var-shirtsinbulk: "\f214"; 593 | @fa-var-shopping-bag: "\f290"; 594 | @fa-var-shopping-basket: "\f291"; 595 | @fa-var-shopping-cart: "\f07a"; 596 | @fa-var-shower: "\f2cc"; 597 | @fa-var-sign-in: "\f090"; 598 | @fa-var-sign-language: "\f2a7"; 599 | @fa-var-sign-out: "\f08b"; 600 | @fa-var-signal: "\f012"; 601 | @fa-var-signing: "\f2a7"; 602 | @fa-var-simplybuilt: "\f215"; 603 | @fa-var-sitemap: "\f0e8"; 604 | @fa-var-skyatlas: "\f216"; 605 | @fa-var-skype: "\f17e"; 606 | @fa-var-slack: "\f198"; 607 | @fa-var-sliders: "\f1de"; 608 | @fa-var-slideshare: "\f1e7"; 609 | @fa-var-smile-o: "\f118"; 610 | @fa-var-snapchat: "\f2ab"; 611 | @fa-var-snapchat-ghost: "\f2ac"; 612 | @fa-var-snapchat-square: "\f2ad"; 613 | @fa-var-snowflake-o: "\f2dc"; 614 | @fa-var-soccer-ball-o: "\f1e3"; 615 | @fa-var-sort: "\f0dc"; 616 | @fa-var-sort-alpha-asc: "\f15d"; 617 | @fa-var-sort-alpha-desc: "\f15e"; 618 | @fa-var-sort-amount-asc: "\f160"; 619 | @fa-var-sort-amount-desc: "\f161"; 620 | @fa-var-sort-asc: "\f0de"; 621 | @fa-var-sort-desc: "\f0dd"; 622 | @fa-var-sort-down: "\f0dd"; 623 | @fa-var-sort-numeric-asc: "\f162"; 624 | @fa-var-sort-numeric-desc: "\f163"; 625 | @fa-var-sort-up: "\f0de"; 626 | @fa-var-soundcloud: "\f1be"; 627 | @fa-var-space-shuttle: "\f197"; 628 | @fa-var-spinner: "\f110"; 629 | @fa-var-spoon: "\f1b1"; 630 | @fa-var-spotify: "\f1bc"; 631 | @fa-var-square: "\f0c8"; 632 | @fa-var-square-o: "\f096"; 633 | @fa-var-stack-exchange: "\f18d"; 634 | @fa-var-stack-overflow: "\f16c"; 635 | @fa-var-star: "\f005"; 636 | @fa-var-star-half: "\f089"; 637 | @fa-var-star-half-empty: "\f123"; 638 | @fa-var-star-half-full: "\f123"; 639 | @fa-var-star-half-o: "\f123"; 640 | @fa-var-star-o: "\f006"; 641 | @fa-var-steam: "\f1b6"; 642 | @fa-var-steam-square: "\f1b7"; 643 | @fa-var-step-backward: "\f048"; 644 | @fa-var-step-forward: "\f051"; 645 | @fa-var-stethoscope: "\f0f1"; 646 | @fa-var-sticky-note: "\f249"; 647 | @fa-var-sticky-note-o: "\f24a"; 648 | @fa-var-stop: "\f04d"; 649 | @fa-var-stop-circle: "\f28d"; 650 | @fa-var-stop-circle-o: "\f28e"; 651 | @fa-var-street-view: "\f21d"; 652 | @fa-var-strikethrough: "\f0cc"; 653 | @fa-var-stumbleupon: "\f1a4"; 654 | @fa-var-stumbleupon-circle: "\f1a3"; 655 | @fa-var-subscript: "\f12c"; 656 | @fa-var-subway: "\f239"; 657 | @fa-var-suitcase: "\f0f2"; 658 | @fa-var-sun-o: "\f185"; 659 | @fa-var-superpowers: "\f2dd"; 660 | @fa-var-superscript: "\f12b"; 661 | @fa-var-support: "\f1cd"; 662 | @fa-var-table: "\f0ce"; 663 | @fa-var-tablet: "\f10a"; 664 | @fa-var-tachometer: "\f0e4"; 665 | @fa-var-tag: "\f02b"; 666 | @fa-var-tags: "\f02c"; 667 | @fa-var-tasks: "\f0ae"; 668 | @fa-var-taxi: "\f1ba"; 669 | @fa-var-telegram: "\f2c6"; 670 | @fa-var-television: "\f26c"; 671 | @fa-var-tencent-weibo: "\f1d5"; 672 | @fa-var-terminal: "\f120"; 673 | @fa-var-text-height: "\f034"; 674 | @fa-var-text-width: "\f035"; 675 | @fa-var-th: "\f00a"; 676 | @fa-var-th-large: "\f009"; 677 | @fa-var-th-list: "\f00b"; 678 | @fa-var-themeisle: "\f2b2"; 679 | @fa-var-thermometer: "\f2c7"; 680 | @fa-var-thermometer-0: "\f2cb"; 681 | @fa-var-thermometer-1: "\f2ca"; 682 | @fa-var-thermometer-2: "\f2c9"; 683 | @fa-var-thermometer-3: "\f2c8"; 684 | @fa-var-thermometer-4: "\f2c7"; 685 | @fa-var-thermometer-empty: "\f2cb"; 686 | @fa-var-thermometer-full: "\f2c7"; 687 | @fa-var-thermometer-half: "\f2c9"; 688 | @fa-var-thermometer-quarter: "\f2ca"; 689 | @fa-var-thermometer-three-quarters: "\f2c8"; 690 | @fa-var-thumb-tack: "\f08d"; 691 | @fa-var-thumbs-down: "\f165"; 692 | @fa-var-thumbs-o-down: "\f088"; 693 | @fa-var-thumbs-o-up: "\f087"; 694 | @fa-var-thumbs-up: "\f164"; 695 | @fa-var-ticket: "\f145"; 696 | @fa-var-times: "\f00d"; 697 | @fa-var-times-circle: "\f057"; 698 | @fa-var-times-circle-o: "\f05c"; 699 | @fa-var-times-rectangle: "\f2d3"; 700 | @fa-var-times-rectangle-o: "\f2d4"; 701 | @fa-var-tint: "\f043"; 702 | @fa-var-toggle-down: "\f150"; 703 | @fa-var-toggle-left: "\f191"; 704 | @fa-var-toggle-off: "\f204"; 705 | @fa-var-toggle-on: "\f205"; 706 | @fa-var-toggle-right: "\f152"; 707 | @fa-var-toggle-up: "\f151"; 708 | @fa-var-trademark: "\f25c"; 709 | @fa-var-train: "\f238"; 710 | @fa-var-transgender: "\f224"; 711 | @fa-var-transgender-alt: "\f225"; 712 | @fa-var-trash: "\f1f8"; 713 | @fa-var-trash-o: "\f014"; 714 | @fa-var-tree: "\f1bb"; 715 | @fa-var-trello: "\f181"; 716 | @fa-var-tripadvisor: "\f262"; 717 | @fa-var-trophy: "\f091"; 718 | @fa-var-truck: "\f0d1"; 719 | @fa-var-try: "\f195"; 720 | @fa-var-tty: "\f1e4"; 721 | @fa-var-tumblr: "\f173"; 722 | @fa-var-tumblr-square: "\f174"; 723 | @fa-var-turkish-lira: "\f195"; 724 | @fa-var-tv: "\f26c"; 725 | @fa-var-twitch: "\f1e8"; 726 | @fa-var-twitter: "\f099"; 727 | @fa-var-twitter-square: "\f081"; 728 | @fa-var-umbrella: "\f0e9"; 729 | @fa-var-underline: "\f0cd"; 730 | @fa-var-undo: "\f0e2"; 731 | @fa-var-universal-access: "\f29a"; 732 | @fa-var-university: "\f19c"; 733 | @fa-var-unlink: "\f127"; 734 | @fa-var-unlock: "\f09c"; 735 | @fa-var-unlock-alt: "\f13e"; 736 | @fa-var-unsorted: "\f0dc"; 737 | @fa-var-upload: "\f093"; 738 | @fa-var-usb: "\f287"; 739 | @fa-var-usd: "\f155"; 740 | @fa-var-user: "\f007"; 741 | @fa-var-user-circle: "\f2bd"; 742 | @fa-var-user-circle-o: "\f2be"; 743 | @fa-var-user-md: "\f0f0"; 744 | @fa-var-user-o: "\f2c0"; 745 | @fa-var-user-plus: "\f234"; 746 | @fa-var-user-secret: "\f21b"; 747 | @fa-var-user-times: "\f235"; 748 | @fa-var-users: "\f0c0"; 749 | @fa-var-vcard: "\f2bb"; 750 | @fa-var-vcard-o: "\f2bc"; 751 | @fa-var-venus: "\f221"; 752 | @fa-var-venus-double: "\f226"; 753 | @fa-var-venus-mars: "\f228"; 754 | @fa-var-viacoin: "\f237"; 755 | @fa-var-viadeo: "\f2a9"; 756 | @fa-var-viadeo-square: "\f2aa"; 757 | @fa-var-video-camera: "\f03d"; 758 | @fa-var-vimeo: "\f27d"; 759 | @fa-var-vimeo-square: "\f194"; 760 | @fa-var-vine: "\f1ca"; 761 | @fa-var-vk: "\f189"; 762 | @fa-var-volume-control-phone: "\f2a0"; 763 | @fa-var-volume-down: "\f027"; 764 | @fa-var-volume-off: "\f026"; 765 | @fa-var-volume-up: "\f028"; 766 | @fa-var-warning: "\f071"; 767 | @fa-var-wechat: "\f1d7"; 768 | @fa-var-weibo: "\f18a"; 769 | @fa-var-weixin: "\f1d7"; 770 | @fa-var-whatsapp: "\f232"; 771 | @fa-var-wheelchair: "\f193"; 772 | @fa-var-wheelchair-alt: "\f29b"; 773 | @fa-var-wifi: "\f1eb"; 774 | @fa-var-wikipedia-w: "\f266"; 775 | @fa-var-window-close: "\f2d3"; 776 | @fa-var-window-close-o: "\f2d4"; 777 | @fa-var-window-maximize: "\f2d0"; 778 | @fa-var-window-minimize: "\f2d1"; 779 | @fa-var-window-restore: "\f2d2"; 780 | @fa-var-windows: "\f17a"; 781 | @fa-var-won: "\f159"; 782 | @fa-var-wordpress: "\f19a"; 783 | @fa-var-wpbeginner: "\f297"; 784 | @fa-var-wpexplorer: "\f2de"; 785 | @fa-var-wpforms: "\f298"; 786 | @fa-var-wrench: "\f0ad"; 787 | @fa-var-xing: "\f168"; 788 | @fa-var-xing-square: "\f169"; 789 | @fa-var-y-combinator: "\f23b"; 790 | @fa-var-y-combinator-square: "\f1d4"; 791 | @fa-var-yahoo: "\f19e"; 792 | @fa-var-yc: "\f23b"; 793 | @fa-var-yc-square: "\f1d4"; 794 | @fa-var-yelp: "\f1e9"; 795 | @fa-var-yen: "\f157"; 796 | @fa-var-yoast: "\f2b1"; 797 | @fa-var-youtube: "\f167"; 798 | @fa-var-youtube-play: "\f16a"; 799 | @fa-var-youtube-square: "\f166"; 800 | 801 | -------------------------------------------------------------------------------- /static/font-awesome-4.7.0/scss/_variables.scss: -------------------------------------------------------------------------------- 1 | // Variables 2 | // -------------------------- 3 | 4 | $fa-font-path: "../fonts" !default; 5 | $fa-font-size-base: 14px !default; 6 | $fa-line-height-base: 1 !default; 7 | //$fa-font-path: "//netdna.bootstrapcdn.com/font-awesome/4.7.0/fonts" !default; // for referencing Bootstrap CDN font files directly 8 | $fa-css-prefix: fa !default; 9 | $fa-version: "4.7.0" !default; 10 | $fa-border-color: #eee !default; 11 | $fa-inverse: #fff !default; 12 | $fa-li-width: (30em / 14) !default; 13 | 14 | $fa-var-500px: "\f26e"; 15 | $fa-var-address-book: "\f2b9"; 16 | $fa-var-address-book-o: "\f2ba"; 17 | $fa-var-address-card: "\f2bb"; 18 | $fa-var-address-card-o: "\f2bc"; 19 | $fa-var-adjust: "\f042"; 20 | $fa-var-adn: "\f170"; 21 | $fa-var-align-center: "\f037"; 22 | $fa-var-align-justify: "\f039"; 23 | $fa-var-align-left: "\f036"; 24 | $fa-var-align-right: "\f038"; 25 | $fa-var-amazon: "\f270"; 26 | $fa-var-ambulance: "\f0f9"; 27 | $fa-var-american-sign-language-interpreting: "\f2a3"; 28 | $fa-var-anchor: "\f13d"; 29 | $fa-var-android: "\f17b"; 30 | $fa-var-angellist: "\f209"; 31 | $fa-var-angle-double-down: "\f103"; 32 | $fa-var-angle-double-left: "\f100"; 33 | $fa-var-angle-double-right: "\f101"; 34 | $fa-var-angle-double-up: "\f102"; 35 | $fa-var-angle-down: "\f107"; 36 | $fa-var-angle-left: "\f104"; 37 | $fa-var-angle-right: "\f105"; 38 | $fa-var-angle-up: "\f106"; 39 | $fa-var-apple: "\f179"; 40 | $fa-var-archive: "\f187"; 41 | $fa-var-area-chart: "\f1fe"; 42 | $fa-var-arrow-circle-down: "\f0ab"; 43 | $fa-var-arrow-circle-left: "\f0a8"; 44 | $fa-var-arrow-circle-o-down: "\f01a"; 45 | $fa-var-arrow-circle-o-left: "\f190"; 46 | $fa-var-arrow-circle-o-right: "\f18e"; 47 | $fa-var-arrow-circle-o-up: "\f01b"; 48 | $fa-var-arrow-circle-right: "\f0a9"; 49 | $fa-var-arrow-circle-up: "\f0aa"; 50 | $fa-var-arrow-down: "\f063"; 51 | $fa-var-arrow-left: "\f060"; 52 | $fa-var-arrow-right: "\f061"; 53 | $fa-var-arrow-up: "\f062"; 54 | $fa-var-arrows: "\f047"; 55 | $fa-var-arrows-alt: "\f0b2"; 56 | $fa-var-arrows-h: "\f07e"; 57 | $fa-var-arrows-v: "\f07d"; 58 | $fa-var-asl-interpreting: "\f2a3"; 59 | $fa-var-assistive-listening-systems: "\f2a2"; 60 | $fa-var-asterisk: "\f069"; 61 | $fa-var-at: "\f1fa"; 62 | $fa-var-audio-description: "\f29e"; 63 | $fa-var-automobile: "\f1b9"; 64 | $fa-var-backward: "\f04a"; 65 | $fa-var-balance-scale: "\f24e"; 66 | $fa-var-ban: "\f05e"; 67 | $fa-var-bandcamp: "\f2d5"; 68 | $fa-var-bank: "\f19c"; 69 | $fa-var-bar-chart: "\f080"; 70 | $fa-var-bar-chart-o: "\f080"; 71 | $fa-var-barcode: "\f02a"; 72 | $fa-var-bars: "\f0c9"; 73 | $fa-var-bath: "\f2cd"; 74 | $fa-var-bathtub: "\f2cd"; 75 | $fa-var-battery: "\f240"; 76 | $fa-var-battery-0: "\f244"; 77 | $fa-var-battery-1: "\f243"; 78 | $fa-var-battery-2: "\f242"; 79 | $fa-var-battery-3: "\f241"; 80 | $fa-var-battery-4: "\f240"; 81 | $fa-var-battery-empty: "\f244"; 82 | $fa-var-battery-full: "\f240"; 83 | $fa-var-battery-half: "\f242"; 84 | $fa-var-battery-quarter: "\f243"; 85 | $fa-var-battery-three-quarters: "\f241"; 86 | $fa-var-bed: "\f236"; 87 | $fa-var-beer: "\f0fc"; 88 | $fa-var-behance: "\f1b4"; 89 | $fa-var-behance-square: "\f1b5"; 90 | $fa-var-bell: "\f0f3"; 91 | $fa-var-bell-o: "\f0a2"; 92 | $fa-var-bell-slash: "\f1f6"; 93 | $fa-var-bell-slash-o: "\f1f7"; 94 | $fa-var-bicycle: "\f206"; 95 | $fa-var-binoculars: "\f1e5"; 96 | $fa-var-birthday-cake: "\f1fd"; 97 | $fa-var-bitbucket: "\f171"; 98 | $fa-var-bitbucket-square: "\f172"; 99 | $fa-var-bitcoin: "\f15a"; 100 | $fa-var-black-tie: "\f27e"; 101 | $fa-var-blind: "\f29d"; 102 | $fa-var-bluetooth: "\f293"; 103 | $fa-var-bluetooth-b: "\f294"; 104 | $fa-var-bold: "\f032"; 105 | $fa-var-bolt: "\f0e7"; 106 | $fa-var-bomb: "\f1e2"; 107 | $fa-var-book: "\f02d"; 108 | $fa-var-bookmark: "\f02e"; 109 | $fa-var-bookmark-o: "\f097"; 110 | $fa-var-braille: "\f2a1"; 111 | $fa-var-briefcase: "\f0b1"; 112 | $fa-var-btc: "\f15a"; 113 | $fa-var-bug: "\f188"; 114 | $fa-var-building: "\f1ad"; 115 | $fa-var-building-o: "\f0f7"; 116 | $fa-var-bullhorn: "\f0a1"; 117 | $fa-var-bullseye: "\f140"; 118 | $fa-var-bus: "\f207"; 119 | $fa-var-buysellads: "\f20d"; 120 | $fa-var-cab: "\f1ba"; 121 | $fa-var-calculator: "\f1ec"; 122 | $fa-var-calendar: "\f073"; 123 | $fa-var-calendar-check-o: "\f274"; 124 | $fa-var-calendar-minus-o: "\f272"; 125 | $fa-var-calendar-o: "\f133"; 126 | $fa-var-calendar-plus-o: "\f271"; 127 | $fa-var-calendar-times-o: "\f273"; 128 | $fa-var-camera: "\f030"; 129 | $fa-var-camera-retro: "\f083"; 130 | $fa-var-car: "\f1b9"; 131 | $fa-var-caret-down: "\f0d7"; 132 | $fa-var-caret-left: "\f0d9"; 133 | $fa-var-caret-right: "\f0da"; 134 | $fa-var-caret-square-o-down: "\f150"; 135 | $fa-var-caret-square-o-left: "\f191"; 136 | $fa-var-caret-square-o-right: "\f152"; 137 | $fa-var-caret-square-o-up: "\f151"; 138 | $fa-var-caret-up: "\f0d8"; 139 | $fa-var-cart-arrow-down: "\f218"; 140 | $fa-var-cart-plus: "\f217"; 141 | $fa-var-cc: "\f20a"; 142 | $fa-var-cc-amex: "\f1f3"; 143 | $fa-var-cc-diners-club: "\f24c"; 144 | $fa-var-cc-discover: "\f1f2"; 145 | $fa-var-cc-jcb: "\f24b"; 146 | $fa-var-cc-mastercard: "\f1f1"; 147 | $fa-var-cc-paypal: "\f1f4"; 148 | $fa-var-cc-stripe: "\f1f5"; 149 | $fa-var-cc-visa: "\f1f0"; 150 | $fa-var-certificate: "\f0a3"; 151 | $fa-var-chain: "\f0c1"; 152 | $fa-var-chain-broken: "\f127"; 153 | $fa-var-check: "\f00c"; 154 | $fa-var-check-circle: "\f058"; 155 | $fa-var-check-circle-o: "\f05d"; 156 | $fa-var-check-square: "\f14a"; 157 | $fa-var-check-square-o: "\f046"; 158 | $fa-var-chevron-circle-down: "\f13a"; 159 | $fa-var-chevron-circle-left: "\f137"; 160 | $fa-var-chevron-circle-right: "\f138"; 161 | $fa-var-chevron-circle-up: "\f139"; 162 | $fa-var-chevron-down: "\f078"; 163 | $fa-var-chevron-left: "\f053"; 164 | $fa-var-chevron-right: "\f054"; 165 | $fa-var-chevron-up: "\f077"; 166 | $fa-var-child: "\f1ae"; 167 | $fa-var-chrome: "\f268"; 168 | $fa-var-circle: "\f111"; 169 | $fa-var-circle-o: "\f10c"; 170 | $fa-var-circle-o-notch: "\f1ce"; 171 | $fa-var-circle-thin: "\f1db"; 172 | $fa-var-clipboard: "\f0ea"; 173 | $fa-var-clock-o: "\f017"; 174 | $fa-var-clone: "\f24d"; 175 | $fa-var-close: "\f00d"; 176 | $fa-var-cloud: "\f0c2"; 177 | $fa-var-cloud-download: "\f0ed"; 178 | $fa-var-cloud-upload: "\f0ee"; 179 | $fa-var-cny: "\f157"; 180 | $fa-var-code: "\f121"; 181 | $fa-var-code-fork: "\f126"; 182 | $fa-var-codepen: "\f1cb"; 183 | $fa-var-codiepie: "\f284"; 184 | $fa-var-coffee: "\f0f4"; 185 | $fa-var-cog: "\f013"; 186 | $fa-var-cogs: "\f085"; 187 | $fa-var-columns: "\f0db"; 188 | $fa-var-comment: "\f075"; 189 | $fa-var-comment-o: "\f0e5"; 190 | $fa-var-commenting: "\f27a"; 191 | $fa-var-commenting-o: "\f27b"; 192 | $fa-var-comments: "\f086"; 193 | $fa-var-comments-o: "\f0e6"; 194 | $fa-var-compass: "\f14e"; 195 | $fa-var-compress: "\f066"; 196 | $fa-var-connectdevelop: "\f20e"; 197 | $fa-var-contao: "\f26d"; 198 | $fa-var-copy: "\f0c5"; 199 | $fa-var-copyright: "\f1f9"; 200 | $fa-var-creative-commons: "\f25e"; 201 | $fa-var-credit-card: "\f09d"; 202 | $fa-var-credit-card-alt: "\f283"; 203 | $fa-var-crop: "\f125"; 204 | $fa-var-crosshairs: "\f05b"; 205 | $fa-var-css3: "\f13c"; 206 | $fa-var-cube: "\f1b2"; 207 | $fa-var-cubes: "\f1b3"; 208 | $fa-var-cut: "\f0c4"; 209 | $fa-var-cutlery: "\f0f5"; 210 | $fa-var-dashboard: "\f0e4"; 211 | $fa-var-dashcube: "\f210"; 212 | $fa-var-database: "\f1c0"; 213 | $fa-var-deaf: "\f2a4"; 214 | $fa-var-deafness: "\f2a4"; 215 | $fa-var-dedent: "\f03b"; 216 | $fa-var-delicious: "\f1a5"; 217 | $fa-var-desktop: "\f108"; 218 | $fa-var-deviantart: "\f1bd"; 219 | $fa-var-diamond: "\f219"; 220 | $fa-var-digg: "\f1a6"; 221 | $fa-var-dollar: "\f155"; 222 | $fa-var-dot-circle-o: "\f192"; 223 | $fa-var-download: "\f019"; 224 | $fa-var-dribbble: "\f17d"; 225 | $fa-var-drivers-license: "\f2c2"; 226 | $fa-var-drivers-license-o: "\f2c3"; 227 | $fa-var-dropbox: "\f16b"; 228 | $fa-var-drupal: "\f1a9"; 229 | $fa-var-edge: "\f282"; 230 | $fa-var-edit: "\f044"; 231 | $fa-var-eercast: "\f2da"; 232 | $fa-var-eject: "\f052"; 233 | $fa-var-ellipsis-h: "\f141"; 234 | $fa-var-ellipsis-v: "\f142"; 235 | $fa-var-empire: "\f1d1"; 236 | $fa-var-envelope: "\f0e0"; 237 | $fa-var-envelope-o: "\f003"; 238 | $fa-var-envelope-open: "\f2b6"; 239 | $fa-var-envelope-open-o: "\f2b7"; 240 | $fa-var-envelope-square: "\f199"; 241 | $fa-var-envira: "\f299"; 242 | $fa-var-eraser: "\f12d"; 243 | $fa-var-etsy: "\f2d7"; 244 | $fa-var-eur: "\f153"; 245 | $fa-var-euro: "\f153"; 246 | $fa-var-exchange: "\f0ec"; 247 | $fa-var-exclamation: "\f12a"; 248 | $fa-var-exclamation-circle: "\f06a"; 249 | $fa-var-exclamation-triangle: "\f071"; 250 | $fa-var-expand: "\f065"; 251 | $fa-var-expeditedssl: "\f23e"; 252 | $fa-var-external-link: "\f08e"; 253 | $fa-var-external-link-square: "\f14c"; 254 | $fa-var-eye: "\f06e"; 255 | $fa-var-eye-slash: "\f070"; 256 | $fa-var-eyedropper: "\f1fb"; 257 | $fa-var-fa: "\f2b4"; 258 | $fa-var-facebook: "\f09a"; 259 | $fa-var-facebook-f: "\f09a"; 260 | $fa-var-facebook-official: "\f230"; 261 | $fa-var-facebook-square: "\f082"; 262 | $fa-var-fast-backward: "\f049"; 263 | $fa-var-fast-forward: "\f050"; 264 | $fa-var-fax: "\f1ac"; 265 | $fa-var-feed: "\f09e"; 266 | $fa-var-female: "\f182"; 267 | $fa-var-fighter-jet: "\f0fb"; 268 | $fa-var-file: "\f15b"; 269 | $fa-var-file-archive-o: "\f1c6"; 270 | $fa-var-file-audio-o: "\f1c7"; 271 | $fa-var-file-code-o: "\f1c9"; 272 | $fa-var-file-excel-o: "\f1c3"; 273 | $fa-var-file-image-o: "\f1c5"; 274 | $fa-var-file-movie-o: "\f1c8"; 275 | $fa-var-file-o: "\f016"; 276 | $fa-var-file-pdf-o: "\f1c1"; 277 | $fa-var-file-photo-o: "\f1c5"; 278 | $fa-var-file-picture-o: "\f1c5"; 279 | $fa-var-file-powerpoint-o: "\f1c4"; 280 | $fa-var-file-sound-o: "\f1c7"; 281 | $fa-var-file-text: "\f15c"; 282 | $fa-var-file-text-o: "\f0f6"; 283 | $fa-var-file-video-o: "\f1c8"; 284 | $fa-var-file-word-o: "\f1c2"; 285 | $fa-var-file-zip-o: "\f1c6"; 286 | $fa-var-files-o: "\f0c5"; 287 | $fa-var-film: "\f008"; 288 | $fa-var-filter: "\f0b0"; 289 | $fa-var-fire: "\f06d"; 290 | $fa-var-fire-extinguisher: "\f134"; 291 | $fa-var-firefox: "\f269"; 292 | $fa-var-first-order: "\f2b0"; 293 | $fa-var-flag: "\f024"; 294 | $fa-var-flag-checkered: "\f11e"; 295 | $fa-var-flag-o: "\f11d"; 296 | $fa-var-flash: "\f0e7"; 297 | $fa-var-flask: "\f0c3"; 298 | $fa-var-flickr: "\f16e"; 299 | $fa-var-floppy-o: "\f0c7"; 300 | $fa-var-folder: "\f07b"; 301 | $fa-var-folder-o: "\f114"; 302 | $fa-var-folder-open: "\f07c"; 303 | $fa-var-folder-open-o: "\f115"; 304 | $fa-var-font: "\f031"; 305 | $fa-var-font-awesome: "\f2b4"; 306 | $fa-var-fonticons: "\f280"; 307 | $fa-var-fort-awesome: "\f286"; 308 | $fa-var-forumbee: "\f211"; 309 | $fa-var-forward: "\f04e"; 310 | $fa-var-foursquare: "\f180"; 311 | $fa-var-free-code-camp: "\f2c5"; 312 | $fa-var-frown-o: "\f119"; 313 | $fa-var-futbol-o: "\f1e3"; 314 | $fa-var-gamepad: "\f11b"; 315 | $fa-var-gavel: "\f0e3"; 316 | $fa-var-gbp: "\f154"; 317 | $fa-var-ge: "\f1d1"; 318 | $fa-var-gear: "\f013"; 319 | $fa-var-gears: "\f085"; 320 | $fa-var-genderless: "\f22d"; 321 | $fa-var-get-pocket: "\f265"; 322 | $fa-var-gg: "\f260"; 323 | $fa-var-gg-circle: "\f261"; 324 | $fa-var-gift: "\f06b"; 325 | $fa-var-git: "\f1d3"; 326 | $fa-var-git-square: "\f1d2"; 327 | $fa-var-github: "\f09b"; 328 | $fa-var-github-alt: "\f113"; 329 | $fa-var-github-square: "\f092"; 330 | $fa-var-gitlab: "\f296"; 331 | $fa-var-gittip: "\f184"; 332 | $fa-var-glass: "\f000"; 333 | $fa-var-glide: "\f2a5"; 334 | $fa-var-glide-g: "\f2a6"; 335 | $fa-var-globe: "\f0ac"; 336 | $fa-var-google: "\f1a0"; 337 | $fa-var-google-plus: "\f0d5"; 338 | $fa-var-google-plus-circle: "\f2b3"; 339 | $fa-var-google-plus-official: "\f2b3"; 340 | $fa-var-google-plus-square: "\f0d4"; 341 | $fa-var-google-wallet: "\f1ee"; 342 | $fa-var-graduation-cap: "\f19d"; 343 | $fa-var-gratipay: "\f184"; 344 | $fa-var-grav: "\f2d6"; 345 | $fa-var-group: "\f0c0"; 346 | $fa-var-h-square: "\f0fd"; 347 | $fa-var-hacker-news: "\f1d4"; 348 | $fa-var-hand-grab-o: "\f255"; 349 | $fa-var-hand-lizard-o: "\f258"; 350 | $fa-var-hand-o-down: "\f0a7"; 351 | $fa-var-hand-o-left: "\f0a5"; 352 | $fa-var-hand-o-right: "\f0a4"; 353 | $fa-var-hand-o-up: "\f0a6"; 354 | $fa-var-hand-paper-o: "\f256"; 355 | $fa-var-hand-peace-o: "\f25b"; 356 | $fa-var-hand-pointer-o: "\f25a"; 357 | $fa-var-hand-rock-o: "\f255"; 358 | $fa-var-hand-scissors-o: "\f257"; 359 | $fa-var-hand-spock-o: "\f259"; 360 | $fa-var-hand-stop-o: "\f256"; 361 | $fa-var-handshake-o: "\f2b5"; 362 | $fa-var-hard-of-hearing: "\f2a4"; 363 | $fa-var-hashtag: "\f292"; 364 | $fa-var-hdd-o: "\f0a0"; 365 | $fa-var-header: "\f1dc"; 366 | $fa-var-headphones: "\f025"; 367 | $fa-var-heart: "\f004"; 368 | $fa-var-heart-o: "\f08a"; 369 | $fa-var-heartbeat: "\f21e"; 370 | $fa-var-history: "\f1da"; 371 | $fa-var-home: "\f015"; 372 | $fa-var-hospital-o: "\f0f8"; 373 | $fa-var-hotel: "\f236"; 374 | $fa-var-hourglass: "\f254"; 375 | $fa-var-hourglass-1: "\f251"; 376 | $fa-var-hourglass-2: "\f252"; 377 | $fa-var-hourglass-3: "\f253"; 378 | $fa-var-hourglass-end: "\f253"; 379 | $fa-var-hourglass-half: "\f252"; 380 | $fa-var-hourglass-o: "\f250"; 381 | $fa-var-hourglass-start: "\f251"; 382 | $fa-var-houzz: "\f27c"; 383 | $fa-var-html5: "\f13b"; 384 | $fa-var-i-cursor: "\f246"; 385 | $fa-var-id-badge: "\f2c1"; 386 | $fa-var-id-card: "\f2c2"; 387 | $fa-var-id-card-o: "\f2c3"; 388 | $fa-var-ils: "\f20b"; 389 | $fa-var-image: "\f03e"; 390 | $fa-var-imdb: "\f2d8"; 391 | $fa-var-inbox: "\f01c"; 392 | $fa-var-indent: "\f03c"; 393 | $fa-var-industry: "\f275"; 394 | $fa-var-info: "\f129"; 395 | $fa-var-info-circle: "\f05a"; 396 | $fa-var-inr: "\f156"; 397 | $fa-var-instagram: "\f16d"; 398 | $fa-var-institution: "\f19c"; 399 | $fa-var-internet-explorer: "\f26b"; 400 | $fa-var-intersex: "\f224"; 401 | $fa-var-ioxhost: "\f208"; 402 | $fa-var-italic: "\f033"; 403 | $fa-var-joomla: "\f1aa"; 404 | $fa-var-jpy: "\f157"; 405 | $fa-var-jsfiddle: "\f1cc"; 406 | $fa-var-key: "\f084"; 407 | $fa-var-keyboard-o: "\f11c"; 408 | $fa-var-krw: "\f159"; 409 | $fa-var-language: "\f1ab"; 410 | $fa-var-laptop: "\f109"; 411 | $fa-var-lastfm: "\f202"; 412 | $fa-var-lastfm-square: "\f203"; 413 | $fa-var-leaf: "\f06c"; 414 | $fa-var-leanpub: "\f212"; 415 | $fa-var-legal: "\f0e3"; 416 | $fa-var-lemon-o: "\f094"; 417 | $fa-var-level-down: "\f149"; 418 | $fa-var-level-up: "\f148"; 419 | $fa-var-life-bouy: "\f1cd"; 420 | $fa-var-life-buoy: "\f1cd"; 421 | $fa-var-life-ring: "\f1cd"; 422 | $fa-var-life-saver: "\f1cd"; 423 | $fa-var-lightbulb-o: "\f0eb"; 424 | $fa-var-line-chart: "\f201"; 425 | $fa-var-link: "\f0c1"; 426 | $fa-var-linkedin: "\f0e1"; 427 | $fa-var-linkedin-square: "\f08c"; 428 | $fa-var-linode: "\f2b8"; 429 | $fa-var-linux: "\f17c"; 430 | $fa-var-list: "\f03a"; 431 | $fa-var-list-alt: "\f022"; 432 | $fa-var-list-ol: "\f0cb"; 433 | $fa-var-list-ul: "\f0ca"; 434 | $fa-var-location-arrow: "\f124"; 435 | $fa-var-lock: "\f023"; 436 | $fa-var-long-arrow-down: "\f175"; 437 | $fa-var-long-arrow-left: "\f177"; 438 | $fa-var-long-arrow-right: "\f178"; 439 | $fa-var-long-arrow-up: "\f176"; 440 | $fa-var-low-vision: "\f2a8"; 441 | $fa-var-magic: "\f0d0"; 442 | $fa-var-magnet: "\f076"; 443 | $fa-var-mail-forward: "\f064"; 444 | $fa-var-mail-reply: "\f112"; 445 | $fa-var-mail-reply-all: "\f122"; 446 | $fa-var-male: "\f183"; 447 | $fa-var-map: "\f279"; 448 | $fa-var-map-marker: "\f041"; 449 | $fa-var-map-o: "\f278"; 450 | $fa-var-map-pin: "\f276"; 451 | $fa-var-map-signs: "\f277"; 452 | $fa-var-mars: "\f222"; 453 | $fa-var-mars-double: "\f227"; 454 | $fa-var-mars-stroke: "\f229"; 455 | $fa-var-mars-stroke-h: "\f22b"; 456 | $fa-var-mars-stroke-v: "\f22a"; 457 | $fa-var-maxcdn: "\f136"; 458 | $fa-var-meanpath: "\f20c"; 459 | $fa-var-medium: "\f23a"; 460 | $fa-var-medkit: "\f0fa"; 461 | $fa-var-meetup: "\f2e0"; 462 | $fa-var-meh-o: "\f11a"; 463 | $fa-var-mercury: "\f223"; 464 | $fa-var-microchip: "\f2db"; 465 | $fa-var-microphone: "\f130"; 466 | $fa-var-microphone-slash: "\f131"; 467 | $fa-var-minus: "\f068"; 468 | $fa-var-minus-circle: "\f056"; 469 | $fa-var-minus-square: "\f146"; 470 | $fa-var-minus-square-o: "\f147"; 471 | $fa-var-mixcloud: "\f289"; 472 | $fa-var-mobile: "\f10b"; 473 | $fa-var-mobile-phone: "\f10b"; 474 | $fa-var-modx: "\f285"; 475 | $fa-var-money: "\f0d6"; 476 | $fa-var-moon-o: "\f186"; 477 | $fa-var-mortar-board: "\f19d"; 478 | $fa-var-motorcycle: "\f21c"; 479 | $fa-var-mouse-pointer: "\f245"; 480 | $fa-var-music: "\f001"; 481 | $fa-var-navicon: "\f0c9"; 482 | $fa-var-neuter: "\f22c"; 483 | $fa-var-newspaper-o: "\f1ea"; 484 | $fa-var-object-group: "\f247"; 485 | $fa-var-object-ungroup: "\f248"; 486 | $fa-var-odnoklassniki: "\f263"; 487 | $fa-var-odnoklassniki-square: "\f264"; 488 | $fa-var-opencart: "\f23d"; 489 | $fa-var-openid: "\f19b"; 490 | $fa-var-opera: "\f26a"; 491 | $fa-var-optin-monster: "\f23c"; 492 | $fa-var-outdent: "\f03b"; 493 | $fa-var-pagelines: "\f18c"; 494 | $fa-var-paint-brush: "\f1fc"; 495 | $fa-var-paper-plane: "\f1d8"; 496 | $fa-var-paper-plane-o: "\f1d9"; 497 | $fa-var-paperclip: "\f0c6"; 498 | $fa-var-paragraph: "\f1dd"; 499 | $fa-var-paste: "\f0ea"; 500 | $fa-var-pause: "\f04c"; 501 | $fa-var-pause-circle: "\f28b"; 502 | $fa-var-pause-circle-o: "\f28c"; 503 | $fa-var-paw: "\f1b0"; 504 | $fa-var-paypal: "\f1ed"; 505 | $fa-var-pencil: "\f040"; 506 | $fa-var-pencil-square: "\f14b"; 507 | $fa-var-pencil-square-o: "\f044"; 508 | $fa-var-percent: "\f295"; 509 | $fa-var-phone: "\f095"; 510 | $fa-var-phone-square: "\f098"; 511 | $fa-var-photo: "\f03e"; 512 | $fa-var-picture-o: "\f03e"; 513 | $fa-var-pie-chart: "\f200"; 514 | $fa-var-pied-piper: "\f2ae"; 515 | $fa-var-pied-piper-alt: "\f1a8"; 516 | $fa-var-pied-piper-pp: "\f1a7"; 517 | $fa-var-pinterest: "\f0d2"; 518 | $fa-var-pinterest-p: "\f231"; 519 | $fa-var-pinterest-square: "\f0d3"; 520 | $fa-var-plane: "\f072"; 521 | $fa-var-play: "\f04b"; 522 | $fa-var-play-circle: "\f144"; 523 | $fa-var-play-circle-o: "\f01d"; 524 | $fa-var-plug: "\f1e6"; 525 | $fa-var-plus: "\f067"; 526 | $fa-var-plus-circle: "\f055"; 527 | $fa-var-plus-square: "\f0fe"; 528 | $fa-var-plus-square-o: "\f196"; 529 | $fa-var-podcast: "\f2ce"; 530 | $fa-var-power-off: "\f011"; 531 | $fa-var-print: "\f02f"; 532 | $fa-var-product-hunt: "\f288"; 533 | $fa-var-puzzle-piece: "\f12e"; 534 | $fa-var-qq: "\f1d6"; 535 | $fa-var-qrcode: "\f029"; 536 | $fa-var-question: "\f128"; 537 | $fa-var-question-circle: "\f059"; 538 | $fa-var-question-circle-o: "\f29c"; 539 | $fa-var-quora: "\f2c4"; 540 | $fa-var-quote-left: "\f10d"; 541 | $fa-var-quote-right: "\f10e"; 542 | $fa-var-ra: "\f1d0"; 543 | $fa-var-random: "\f074"; 544 | $fa-var-ravelry: "\f2d9"; 545 | $fa-var-rebel: "\f1d0"; 546 | $fa-var-recycle: "\f1b8"; 547 | $fa-var-reddit: "\f1a1"; 548 | $fa-var-reddit-alien: "\f281"; 549 | $fa-var-reddit-square: "\f1a2"; 550 | $fa-var-refresh: "\f021"; 551 | $fa-var-registered: "\f25d"; 552 | $fa-var-remove: "\f00d"; 553 | $fa-var-renren: "\f18b"; 554 | $fa-var-reorder: "\f0c9"; 555 | $fa-var-repeat: "\f01e"; 556 | $fa-var-reply: "\f112"; 557 | $fa-var-reply-all: "\f122"; 558 | $fa-var-resistance: "\f1d0"; 559 | $fa-var-retweet: "\f079"; 560 | $fa-var-rmb: "\f157"; 561 | $fa-var-road: "\f018"; 562 | $fa-var-rocket: "\f135"; 563 | $fa-var-rotate-left: "\f0e2"; 564 | $fa-var-rotate-right: "\f01e"; 565 | $fa-var-rouble: "\f158"; 566 | $fa-var-rss: "\f09e"; 567 | $fa-var-rss-square: "\f143"; 568 | $fa-var-rub: "\f158"; 569 | $fa-var-ruble: "\f158"; 570 | $fa-var-rupee: "\f156"; 571 | $fa-var-s15: "\f2cd"; 572 | $fa-var-safari: "\f267"; 573 | $fa-var-save: "\f0c7"; 574 | $fa-var-scissors: "\f0c4"; 575 | $fa-var-scribd: "\f28a"; 576 | $fa-var-search: "\f002"; 577 | $fa-var-search-minus: "\f010"; 578 | $fa-var-search-plus: "\f00e"; 579 | $fa-var-sellsy: "\f213"; 580 | $fa-var-send: "\f1d8"; 581 | $fa-var-send-o: "\f1d9"; 582 | $fa-var-server: "\f233"; 583 | $fa-var-share: "\f064"; 584 | $fa-var-share-alt: "\f1e0"; 585 | $fa-var-share-alt-square: "\f1e1"; 586 | $fa-var-share-square: "\f14d"; 587 | $fa-var-share-square-o: "\f045"; 588 | $fa-var-shekel: "\f20b"; 589 | $fa-var-sheqel: "\f20b"; 590 | $fa-var-shield: "\f132"; 591 | $fa-var-ship: "\f21a"; 592 | $fa-var-shirtsinbulk: "\f214"; 593 | $fa-var-shopping-bag: "\f290"; 594 | $fa-var-shopping-basket: "\f291"; 595 | $fa-var-shopping-cart: "\f07a"; 596 | $fa-var-shower: "\f2cc"; 597 | $fa-var-sign-in: "\f090"; 598 | $fa-var-sign-language: "\f2a7"; 599 | $fa-var-sign-out: "\f08b"; 600 | $fa-var-signal: "\f012"; 601 | $fa-var-signing: "\f2a7"; 602 | $fa-var-simplybuilt: "\f215"; 603 | $fa-var-sitemap: "\f0e8"; 604 | $fa-var-skyatlas: "\f216"; 605 | $fa-var-skype: "\f17e"; 606 | $fa-var-slack: "\f198"; 607 | $fa-var-sliders: "\f1de"; 608 | $fa-var-slideshare: "\f1e7"; 609 | $fa-var-smile-o: "\f118"; 610 | $fa-var-snapchat: "\f2ab"; 611 | $fa-var-snapchat-ghost: "\f2ac"; 612 | $fa-var-snapchat-square: "\f2ad"; 613 | $fa-var-snowflake-o: "\f2dc"; 614 | $fa-var-soccer-ball-o: "\f1e3"; 615 | $fa-var-sort: "\f0dc"; 616 | $fa-var-sort-alpha-asc: "\f15d"; 617 | $fa-var-sort-alpha-desc: "\f15e"; 618 | $fa-var-sort-amount-asc: "\f160"; 619 | $fa-var-sort-amount-desc: "\f161"; 620 | $fa-var-sort-asc: "\f0de"; 621 | $fa-var-sort-desc: "\f0dd"; 622 | $fa-var-sort-down: "\f0dd"; 623 | $fa-var-sort-numeric-asc: "\f162"; 624 | $fa-var-sort-numeric-desc: "\f163"; 625 | $fa-var-sort-up: "\f0de"; 626 | $fa-var-soundcloud: "\f1be"; 627 | $fa-var-space-shuttle: "\f197"; 628 | $fa-var-spinner: "\f110"; 629 | $fa-var-spoon: "\f1b1"; 630 | $fa-var-spotify: "\f1bc"; 631 | $fa-var-square: "\f0c8"; 632 | $fa-var-square-o: "\f096"; 633 | $fa-var-stack-exchange: "\f18d"; 634 | $fa-var-stack-overflow: "\f16c"; 635 | $fa-var-star: "\f005"; 636 | $fa-var-star-half: "\f089"; 637 | $fa-var-star-half-empty: "\f123"; 638 | $fa-var-star-half-full: "\f123"; 639 | $fa-var-star-half-o: "\f123"; 640 | $fa-var-star-o: "\f006"; 641 | $fa-var-steam: "\f1b6"; 642 | $fa-var-steam-square: "\f1b7"; 643 | $fa-var-step-backward: "\f048"; 644 | $fa-var-step-forward: "\f051"; 645 | $fa-var-stethoscope: "\f0f1"; 646 | $fa-var-sticky-note: "\f249"; 647 | $fa-var-sticky-note-o: "\f24a"; 648 | $fa-var-stop: "\f04d"; 649 | $fa-var-stop-circle: "\f28d"; 650 | $fa-var-stop-circle-o: "\f28e"; 651 | $fa-var-street-view: "\f21d"; 652 | $fa-var-strikethrough: "\f0cc"; 653 | $fa-var-stumbleupon: "\f1a4"; 654 | $fa-var-stumbleupon-circle: "\f1a3"; 655 | $fa-var-subscript: "\f12c"; 656 | $fa-var-subway: "\f239"; 657 | $fa-var-suitcase: "\f0f2"; 658 | $fa-var-sun-o: "\f185"; 659 | $fa-var-superpowers: "\f2dd"; 660 | $fa-var-superscript: "\f12b"; 661 | $fa-var-support: "\f1cd"; 662 | $fa-var-table: "\f0ce"; 663 | $fa-var-tablet: "\f10a"; 664 | $fa-var-tachometer: "\f0e4"; 665 | $fa-var-tag: "\f02b"; 666 | $fa-var-tags: "\f02c"; 667 | $fa-var-tasks: "\f0ae"; 668 | $fa-var-taxi: "\f1ba"; 669 | $fa-var-telegram: "\f2c6"; 670 | $fa-var-television: "\f26c"; 671 | $fa-var-tencent-weibo: "\f1d5"; 672 | $fa-var-terminal: "\f120"; 673 | $fa-var-text-height: "\f034"; 674 | $fa-var-text-width: "\f035"; 675 | $fa-var-th: "\f00a"; 676 | $fa-var-th-large: "\f009"; 677 | $fa-var-th-list: "\f00b"; 678 | $fa-var-themeisle: "\f2b2"; 679 | $fa-var-thermometer: "\f2c7"; 680 | $fa-var-thermometer-0: "\f2cb"; 681 | $fa-var-thermometer-1: "\f2ca"; 682 | $fa-var-thermometer-2: "\f2c9"; 683 | $fa-var-thermometer-3: "\f2c8"; 684 | $fa-var-thermometer-4: "\f2c7"; 685 | $fa-var-thermometer-empty: "\f2cb"; 686 | $fa-var-thermometer-full: "\f2c7"; 687 | $fa-var-thermometer-half: "\f2c9"; 688 | $fa-var-thermometer-quarter: "\f2ca"; 689 | $fa-var-thermometer-three-quarters: "\f2c8"; 690 | $fa-var-thumb-tack: "\f08d"; 691 | $fa-var-thumbs-down: "\f165"; 692 | $fa-var-thumbs-o-down: "\f088"; 693 | $fa-var-thumbs-o-up: "\f087"; 694 | $fa-var-thumbs-up: "\f164"; 695 | $fa-var-ticket: "\f145"; 696 | $fa-var-times: "\f00d"; 697 | $fa-var-times-circle: "\f057"; 698 | $fa-var-times-circle-o: "\f05c"; 699 | $fa-var-times-rectangle: "\f2d3"; 700 | $fa-var-times-rectangle-o: "\f2d4"; 701 | $fa-var-tint: "\f043"; 702 | $fa-var-toggle-down: "\f150"; 703 | $fa-var-toggle-left: "\f191"; 704 | $fa-var-toggle-off: "\f204"; 705 | $fa-var-toggle-on: "\f205"; 706 | $fa-var-toggle-right: "\f152"; 707 | $fa-var-toggle-up: "\f151"; 708 | $fa-var-trademark: "\f25c"; 709 | $fa-var-train: "\f238"; 710 | $fa-var-transgender: "\f224"; 711 | $fa-var-transgender-alt: "\f225"; 712 | $fa-var-trash: "\f1f8"; 713 | $fa-var-trash-o: "\f014"; 714 | $fa-var-tree: "\f1bb"; 715 | $fa-var-trello: "\f181"; 716 | $fa-var-tripadvisor: "\f262"; 717 | $fa-var-trophy: "\f091"; 718 | $fa-var-truck: "\f0d1"; 719 | $fa-var-try: "\f195"; 720 | $fa-var-tty: "\f1e4"; 721 | $fa-var-tumblr: "\f173"; 722 | $fa-var-tumblr-square: "\f174"; 723 | $fa-var-turkish-lira: "\f195"; 724 | $fa-var-tv: "\f26c"; 725 | $fa-var-twitch: "\f1e8"; 726 | $fa-var-twitter: "\f099"; 727 | $fa-var-twitter-square: "\f081"; 728 | $fa-var-umbrella: "\f0e9"; 729 | $fa-var-underline: "\f0cd"; 730 | $fa-var-undo: "\f0e2"; 731 | $fa-var-universal-access: "\f29a"; 732 | $fa-var-university: "\f19c"; 733 | $fa-var-unlink: "\f127"; 734 | $fa-var-unlock: "\f09c"; 735 | $fa-var-unlock-alt: "\f13e"; 736 | $fa-var-unsorted: "\f0dc"; 737 | $fa-var-upload: "\f093"; 738 | $fa-var-usb: "\f287"; 739 | $fa-var-usd: "\f155"; 740 | $fa-var-user: "\f007"; 741 | $fa-var-user-circle: "\f2bd"; 742 | $fa-var-user-circle-o: "\f2be"; 743 | $fa-var-user-md: "\f0f0"; 744 | $fa-var-user-o: "\f2c0"; 745 | $fa-var-user-plus: "\f234"; 746 | $fa-var-user-secret: "\f21b"; 747 | $fa-var-user-times: "\f235"; 748 | $fa-var-users: "\f0c0"; 749 | $fa-var-vcard: "\f2bb"; 750 | $fa-var-vcard-o: "\f2bc"; 751 | $fa-var-venus: "\f221"; 752 | $fa-var-venus-double: "\f226"; 753 | $fa-var-venus-mars: "\f228"; 754 | $fa-var-viacoin: "\f237"; 755 | $fa-var-viadeo: "\f2a9"; 756 | $fa-var-viadeo-square: "\f2aa"; 757 | $fa-var-video-camera: "\f03d"; 758 | $fa-var-vimeo: "\f27d"; 759 | $fa-var-vimeo-square: "\f194"; 760 | $fa-var-vine: "\f1ca"; 761 | $fa-var-vk: "\f189"; 762 | $fa-var-volume-control-phone: "\f2a0"; 763 | $fa-var-volume-down: "\f027"; 764 | $fa-var-volume-off: "\f026"; 765 | $fa-var-volume-up: "\f028"; 766 | $fa-var-warning: "\f071"; 767 | $fa-var-wechat: "\f1d7"; 768 | $fa-var-weibo: "\f18a"; 769 | $fa-var-weixin: "\f1d7"; 770 | $fa-var-whatsapp: "\f232"; 771 | $fa-var-wheelchair: "\f193"; 772 | $fa-var-wheelchair-alt: "\f29b"; 773 | $fa-var-wifi: "\f1eb"; 774 | $fa-var-wikipedia-w: "\f266"; 775 | $fa-var-window-close: "\f2d3"; 776 | $fa-var-window-close-o: "\f2d4"; 777 | $fa-var-window-maximize: "\f2d0"; 778 | $fa-var-window-minimize: "\f2d1"; 779 | $fa-var-window-restore: "\f2d2"; 780 | $fa-var-windows: "\f17a"; 781 | $fa-var-won: "\f159"; 782 | $fa-var-wordpress: "\f19a"; 783 | $fa-var-wpbeginner: "\f297"; 784 | $fa-var-wpexplorer: "\f2de"; 785 | $fa-var-wpforms: "\f298"; 786 | $fa-var-wrench: "\f0ad"; 787 | $fa-var-xing: "\f168"; 788 | $fa-var-xing-square: "\f169"; 789 | $fa-var-y-combinator: "\f23b"; 790 | $fa-var-y-combinator-square: "\f1d4"; 791 | $fa-var-yahoo: "\f19e"; 792 | $fa-var-yc: "\f23b"; 793 | $fa-var-yc-square: "\f1d4"; 794 | $fa-var-yelp: "\f1e9"; 795 | $fa-var-yen: "\f157"; 796 | $fa-var-yoast: "\f2b1"; 797 | $fa-var-youtube: "\f167"; 798 | $fa-var-youtube-play: "\f16a"; 799 | $fa-var-youtube-square: "\f166"; 800 | 801 | --------------------------------------------------------------------------------