From 9d6c99351331cadc2e33b205a9ed031049128b3f Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Tue, 19 Dec 2017 17:42:41 +0530 Subject: [PATCH 01/41] Issue #24 chore:Sunbird auth package build --- .../ansible/roles/keycloak/tasks/build.yml | 44 ++ .../ansible/roles/keycloak/tasks/main.yml | 4 + .../keycloak/templates/Msg91Creds.json.j2 | 7 + .../roles/keycloak/templates/module.xml.j2 | 10 + .../keycloak/templates/standalone-ha.xml | 571 ++++++++++++++++++ .../keycloak/templates/standalone-ha.xml-old | 556 +++++++++++++++++ .../ansible/roles/keycloak/vars/build.yml | 4 + .../pipelines/keycloak-build/Jenkinsfile.dev | 70 +++ .../pipelines/keycloak-build/deploy.sh | 27 + .../pipelines/keycloak-build/installDeps.sh | 1 + 10 files changed, 1294 insertions(+) create mode 100644 keycloak/scripts/ansible/roles/keycloak/tasks/build.yml create mode 100644 keycloak/scripts/ansible/roles/keycloak/tasks/main.yml create mode 100644 keycloak/scripts/ansible/roles/keycloak/templates/Msg91Creds.json.j2 create mode 100644 keycloak/scripts/ansible/roles/keycloak/templates/module.xml.j2 create mode 100644 keycloak/scripts/ansible/roles/keycloak/templates/standalone-ha.xml create mode 100644 keycloak/scripts/ansible/roles/keycloak/templates/standalone-ha.xml-old create mode 100644 keycloak/scripts/ansible/roles/keycloak/vars/build.yml create mode 100644 keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev create mode 100644 keycloak/scripts/pipelines/keycloak-build/deploy.sh create mode 100644 keycloak/scripts/pipelines/keycloak-build/installDeps.sh diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml new file mode 100644 index 00000000..01efff08 --- /dev/null +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml @@ -0,0 +1,44 @@ +- name: Create sunbird auth directory + file: + path: sunbird_auth_{{sunbird_auth_version}} + state: directory + mode: 0755 + +- name: get the keycloak tarball + get_url: url={{keycloak_pkg_src}} dest=sunbird_auth_{{sunbird_auth_version}} force=no owner={{wildfly_user}} group={{wildfly_group}} + +- name: get the postgresql driver + get_url: url={{postgresql_driver_src}} dest=sunbird_auth_{{sunbird_auth_version}}/modules/system/layers/keycloak/org/postgresql/main force=no owner={{wildfly_user}} group={{wildfly_group}} + +- name: Clone sunbird auth repo + git: + repo: https://github.com/project-sunbird/sunbird-auth.git + dest: sunbird-auth + refspec: refs/heads/master + +- name: Build provider package + shell: cd sunbird-auth/keycloak/sms-provider && mvn package + +- name: Copy SMS OTP jar file to providers dir + copy: src=sunbird-auth/keycloak/sms-provider/target/keycloak-email-phone-autthenticator-1.0-SNAPSHOT.jar dest="sunbird_auth_{{sunbird_auth_version}}/providers" + +- name: Copy Custom Validation theme html to sunbird login theme + copy: src=sunbird-auth/keycloak/sms-provider/templates dest=sunbird_auth_{{sunbird_auth_version}}/themes/sunbird/login + +- name: Copy configuration templates to Keycloak + copy: src=sunbird-auth/keycloak/scripts/ansible/roles/keycloak/templates/ dest="sunbird_auth_{{sunbird_auth_version}}/standalone/configuration/standalone-ha.xml" + +- name: XML file + template: + src: sunbird-auth/keycloak/scripts/ansible/roles/keycloak/templates/standalone-ha.xml + dest: "sunbird_auth_{{sunbird_auth_version}}/standalone/configuration/standalone-ha.xml" + +- name: Copy module.xml + template: + src: sunbird-auth/keycloak/scripts/ansible/roles/keycloak/templates/module.xml.j2 + dest: "sunbird_auth_{{sunbird_auth_version}}/modules/system/layers/keycloak/org/postgresql/main/module.xml" + +- name: Create SMS provider configuration file + template: + src: "sunbird-auth/keycloak/scripts/ansible/roles/keycloak/Msg91Creds.json.j2" + dest: "sunbird_auth_{{sunbird_auth_version}}/bin/sms-provider/Msg91Creds.json" diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/main.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/main.yml new file mode 100644 index 00000000..5a0d0c00 --- /dev/null +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/main.yml @@ -0,0 +1,4 @@ +- include: build.yml + tags: + - build + diff --git a/keycloak/scripts/ansible/roles/keycloak/templates/Msg91Creds.json.j2 b/keycloak/scripts/ansible/roles/keycloak/templates/Msg91Creds.json.j2 new file mode 100644 index 00000000..d584b8be --- /dev/null +++ b/keycloak/scripts/ansible/roles/keycloak/templates/Msg91Creds.json.j2 @@ -0,0 +1,7 @@ +{ + "auth_key": "{{vault_auth_key}}", + "sender": "{{vault_sender}}", + "country": "{{vault_country}}", + "route": "{{vault_route}}", + "sms_method_type": "{{vault_sms_method_type}}" +} diff --git a/keycloak/scripts/ansible/roles/keycloak/templates/module.xml.j2 b/keycloak/scripts/ansible/roles/keycloak/templates/module.xml.j2 new file mode 100644 index 00000000..bcfe36a4 --- /dev/null +++ b/keycloak/scripts/ansible/roles/keycloak/templates/module.xml.j2 @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/keycloak/scripts/ansible/roles/keycloak/templates/standalone-ha.xml b/keycloak/scripts/ansible/roles/keycloak/templates/standalone-ha.xml new file mode 100644 index 00000000..c774e2c0 --- /dev/null +++ b/keycloak/scripts/ansible/roles/keycloak/templates/standalone-ha.xml @@ -0,0 +1,571 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE + h2 + + sa + sa + + + + jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE + h2 + + sa + sa + + + + + jdbc:postgresql://thisnotwork:5432/keycloak + jdbc:postgresql://{{keycloak_postgres_host}}:5432/{{ keycloak_postgres_database }}?sslmode=require + postgresql + + 20 + + + {{ keycloak_postgres_user }} + {{ keycloak_postgres_password }} + + + true + 10000 + + + + + + + org.h2.jdbcx.JdbcDataSource + + + org.postgresql.xa.PGXADataSource + org.postgresql.ds.PGPoolingDataSource + + + + + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{groups['keycloak']|join('[7600],')}}[7600] + + 10 + 3000 + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + auth + + classpath:${jboss.home.dir}/providers/* + + master + 900 + + 2592000 + true + true + ${jboss.home.dir}/themes + + + + + + + + + + + + + jpa + + + basic + + + + + + + + + + + + + + + + + + + default + + + + + + + + ${keycloak.jta.lookup.provider:jboss} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/keycloak/scripts/ansible/roles/keycloak/templates/standalone-ha.xml-old b/keycloak/scripts/ansible/roles/keycloak/templates/standalone-ha.xml-old new file mode 100644 index 00000000..3822c71b --- /dev/null +++ b/keycloak/scripts/ansible/roles/keycloak/templates/standalone-ha.xml-old @@ -0,0 +1,556 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE + h2 + + sa + sa + + + + jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE + h2 + + sa + sa + + + + + jdbc:postgresql://11.0.0.6:5432/keycloak + jdbc:postgresql://11.0.0.6:5432/keycloak + postgresql + + 20 + + + keycloak + KeyCloaK#2 + + + + true + + + + + + org.h2.jdbcx.JdbcDataSource + + + org.postgresql.xa.PGXADataSource + org.postgresql.ds.PGPoolingDataSource + + + + + + + + + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 11.0.0.4[7600],11.0.0.5[7600] + 10 + 3000 + 2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + auth + + classpath:${jboss.home.dir}/providers/* + + master + 900 + + 2592000 + true + true + ${jboss.home.dir}/themes + + + + + + + + + + + + + jpa + + + basic + + + + + + + + + + + + + + + + + + + default + + + + + + + + ${keycloak.jta.lookup.provider:jboss} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/keycloak/scripts/ansible/roles/keycloak/vars/build.yml b/keycloak/scripts/ansible/roles/keycloak/vars/build.yml new file mode 100644 index 00000000..7e0c487d --- /dev/null +++ b/keycloak/scripts/ansible/roles/keycloak/vars/build.yml @@ -0,0 +1,4 @@ +--- +sunbird_auth_version: 1.0v +keycloak_pkg_src: https://downloads.jboss.org/keycloak/3.2.0.Final/keycloak-3.2.0.Final.tar.gz +postgresql_driver_src: https://jdbc.postgresql.org/download/postgresql-9.4.1212.jar diff --git a/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev b/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev new file mode 100644 index 00000000..da1702bc --- /dev/null +++ b/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev @@ -0,0 +1,70 @@ +#!groovy + +node('build-slave') { + + currentBuild.result = "SUCCESS" + + try { + + stage('Cleanup'){ + sh('rm -rf sunbird-auth') + sh('rm -rf project-sunbird-devops') + sh('rm -rf keycloak-3.2.0.Final.tar.gz') + sh('rm -rf keycloak_build/login.tar.gz') + sh('rm -rf ansible/artifacts/sunbird/login.tar.gz') + sh('rm -rf keycloak_build') + } + + stage('Checkout'){ + checkout scm + sh('git clone https://github.com/project-sunbird/sunbird-auth.git') + + // @Todo Update the URL + // sh('git clone https://github.com/ahghatol/sunbird-devops-1.git project-sunbird-devops') + + sh('git clone https://github.com/project-sunbird/sunbird-devops project-sunbird-devops') + + // Download keycloak package and driver + sh('wget https://downloads.jboss.org/keycloak/3.2.0.Final/keycloak-3.2.0.Final.tar.gz') + sh('wget https://jdbc.postgresql.org/download/postgresql-9.4.1212.jar') + } + + stage('Build'){ + sh('mkdir -p sunbird-auth-0.1v'); + + // Login theme build + sh('cd ansible/artifacts/sunbird && tar -zcvf login.tar.gz *') + + // Sms plugin build + sh('cd sunbird-auth/keycloak/sms-provider && mvn package') + + + sh('cp keycloak-3.2.0.Final.tar.gz keycloak_build') + sh('cp postgresql-9.4.1212.jar keycloak_build') + + // Copy file to keycloak_build directory + sh('cp sunbird-auth/keycloak/sms-provider/target/keycloak-email-phone-autthenticator-1.0-SNAPSHOT.jar keycloak_build') + + // Create zip and Copy file to keycloak_build directory + sh('cd sunbird-auth/keycloak/sms-provider/templates && tar -zcvf templates.tar.gz *') + sh('cp sunbird-auth/keycloak/sms-provider/templates/templates.tar.gz keycloak_build') + + // Copy ansible template for Provider config and keycloak configuration + sh('mkdir -p keycloak_build/ansible-templates'); + + sh('cp project-sunbird-devops/ansible/roles/keycloak/templates/* keycloak_build/ansible-templates') + + sh('cp ansible/artifacts/sunbird/login.tar.gz keycloak_build') + sh('tar -zcvf keycloak_build.tar.gz keycloak_build') + } + + stage('Archive'){ + archiveArtifacts 'keycloak_build/login.tar.gz' + archiveArtifacts 'keycloak_build.tar.gz' + } + } + catch (err) { + currentBuild.result = "FAILURE" + throw err + } +} diff --git a/keycloak/scripts/pipelines/keycloak-build/deploy.sh b/keycloak/scripts/pipelines/keycloak-build/deploy.sh new file mode 100644 index 00000000..49fa3949 --- /dev/null +++ b/keycloak/scripts/pipelines/keycloak-build/deploy.sh @@ -0,0 +1,27 @@ +#!/bin/sh +# Build script +# set -o errexit + +#!/bin/sh +# Build script +# set -o errexit +set -e +e () { + echo $( echo ${1} | jq ".${2}" | sed 's/\"//g') +} +m=$(cat $METADATA_FILE) + +org=$(e "${m}" "org") +name=$(e "${m}" "name") +version=$(e "${m}" "version") + +artifactLabel=${ARTIFACT_LABEL:-bronze} +env=${ENV:-null} + +echo "artifactLabel: ${artifactLabel}" +echo "env: ${env}" +echo "org: ${org}" +echo "name: ${name}" +echo "version: ${version}" +echo "ANSIBLE_PATH: $ANSIBLE_PATH" + \ No newline at end of file diff --git a/keycloak/scripts/pipelines/keycloak-build/installDeps.sh b/keycloak/scripts/pipelines/keycloak-build/installDeps.sh new file mode 100644 index 00000000..49a927e6 --- /dev/null +++ b/keycloak/scripts/pipelines/keycloak-build/installDeps.sh @@ -0,0 +1 @@ +apk -v add ansible=2.3.0.0-r1 From cb966cbd32c522e7bc8624af5528f0c9efe79f6c Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Wed, 20 Dec 2017 12:16:50 +0530 Subject: [PATCH 02/41] Issue #24 chore:Sunbird auth package build --- .../{vars/build.yml => defaults/main.yml} | 0 .../pipelines/keycloak-build/Jenkinsfile.dev | 50 +------------------ 2 files changed, 1 insertion(+), 49 deletions(-) rename keycloak/scripts/ansible/roles/keycloak/{vars/build.yml => defaults/main.yml} (100%) diff --git a/keycloak/scripts/ansible/roles/keycloak/vars/build.yml b/keycloak/scripts/ansible/roles/keycloak/defaults/main.yml similarity index 100% rename from keycloak/scripts/ansible/roles/keycloak/vars/build.yml rename to keycloak/scripts/ansible/roles/keycloak/defaults/main.yml diff --git a/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev b/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev index da1702bc..59bfef1c 100644 --- a/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev +++ b/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev @@ -6,56 +6,8 @@ node('build-slave') { try { - stage('Cleanup'){ - sh('rm -rf sunbird-auth') - sh('rm -rf project-sunbird-devops') - sh('rm -rf keycloak-3.2.0.Final.tar.gz') - sh('rm -rf keycloak_build/login.tar.gz') - sh('rm -rf ansible/artifacts/sunbird/login.tar.gz') - sh('rm -rf keycloak_build') - } - - stage('Checkout'){ - checkout scm - sh('git clone https://github.com/project-sunbird/sunbird-auth.git') - - // @Todo Update the URL - // sh('git clone https://github.com/ahghatol/sunbird-devops-1.git project-sunbird-devops') - - sh('git clone https://github.com/project-sunbird/sunbird-devops project-sunbird-devops') - - // Download keycloak package and driver - sh('wget https://downloads.jboss.org/keycloak/3.2.0.Final/keycloak-3.2.0.Final.tar.gz') - sh('wget https://jdbc.postgresql.org/download/postgresql-9.4.1212.jar') - } - stage('Build'){ - sh('mkdir -p sunbird-auth-0.1v'); - - // Login theme build - sh('cd ansible/artifacts/sunbird && tar -zcvf login.tar.gz *') - - // Sms plugin build - sh('cd sunbird-auth/keycloak/sms-provider && mvn package') - - - sh('cp keycloak-3.2.0.Final.tar.gz keycloak_build') - sh('cp postgresql-9.4.1212.jar keycloak_build') - - // Copy file to keycloak_build directory - sh('cp sunbird-auth/keycloak/sms-provider/target/keycloak-email-phone-autthenticator-1.0-SNAPSHOT.jar keycloak_build') - - // Create zip and Copy file to keycloak_build directory - sh('cd sunbird-auth/keycloak/sms-provider/templates && tar -zcvf templates.tar.gz *') - sh('cp sunbird-auth/keycloak/sms-provider/templates/templates.tar.gz keycloak_build') - - // Copy ansible template for Provider config and keycloak configuration - sh('mkdir -p keycloak_build/ansible-templates'); - - sh('cp project-sunbird-devops/ansible/roles/keycloak/templates/* keycloak_build/ansible-templates') - - sh('cp ansible/artifacts/sunbird/login.tar.gz keycloak_build') - sh('tar -zcvf keycloak_build.tar.gz keycloak_build') + sh('cd sunbird-devops/ansible && ansible-playbook -i ../../ansible/inventories/dev keycloak.yml --tags deploy --vault-password-file /run/secrets/vault-pass ') } stage('Archive'){ From e2c42111fb1badd35b1cc1c421dc01ef48ea7674 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Wed, 20 Dec 2017 23:44:50 +0530 Subject: [PATCH 03/41] Issue #24 chore:Sunbird auth package build --- .../inventories/dev/group_vars/dev-es.yml | 6 + .../dev/group_vars/dev-kong-api.yml | 30 + .../inventories/dev/group_vars/dev-log-es.yml | 6 + .../dev/group_vars/dev-postgresql-master.yml | 25 + .../inventories/dev/group_vars/dev.yml | 291 +++++++ .../scripts/ansible/inventories/dev/hosts | 157 ++++ .../ansible/inventories/dev/secrets.yml | 806 ++++++++++++++++++ .../inventories/local/group_vars/local-es.yml | 6 + .../local/group_vars/local-log-es.yml | 6 + .../group_vars/local-postgresql-master.yml | 25 + .../inventories/local/group_vars/local.yml | 291 +++++++ .../local/group_vars/localhost.yml | 291 +++++++ .../scripts/ansible/inventories/local/hosts | 166 ++++ .../ansible/inventories/local/secrets.yml | 806 ++++++++++++++++++ keycloak/scripts/ansible/keycloak.yml | 7 + .../ansible/roles/keycloak/defaults/main.yml | 83 +- .../ansible/roles/keycloak/tasks/build.yml | 60 +- .../pipelines/keycloak-build/Jenkinsfile.dev | 6 +- 18 files changed, 3046 insertions(+), 22 deletions(-) create mode 100644 keycloak/scripts/ansible/inventories/dev/group_vars/dev-es.yml create mode 100644 keycloak/scripts/ansible/inventories/dev/group_vars/dev-kong-api.yml create mode 100644 keycloak/scripts/ansible/inventories/dev/group_vars/dev-log-es.yml create mode 100644 keycloak/scripts/ansible/inventories/dev/group_vars/dev-postgresql-master.yml create mode 100644 keycloak/scripts/ansible/inventories/dev/group_vars/dev.yml create mode 100644 keycloak/scripts/ansible/inventories/dev/hosts create mode 100644 keycloak/scripts/ansible/inventories/dev/secrets.yml create mode 100644 keycloak/scripts/ansible/inventories/local/group_vars/local-es.yml create mode 100644 keycloak/scripts/ansible/inventories/local/group_vars/local-log-es.yml create mode 100644 keycloak/scripts/ansible/inventories/local/group_vars/local-postgresql-master.yml create mode 100644 keycloak/scripts/ansible/inventories/local/group_vars/local.yml create mode 100644 keycloak/scripts/ansible/inventories/local/group_vars/localhost.yml create mode 100644 keycloak/scripts/ansible/inventories/local/hosts create mode 100644 keycloak/scripts/ansible/inventories/local/secrets.yml create mode 100644 keycloak/scripts/ansible/keycloak.yml diff --git a/keycloak/scripts/ansible/inventories/dev/group_vars/dev-es.yml b/keycloak/scripts/ansible/inventories/dev/group_vars/dev-es.yml new file mode 100644 index 00000000..947c47f1 --- /dev/null +++ b/keycloak/scripts/ansible/inventories/dev/group_vars/dev-es.yml @@ -0,0 +1,6 @@ +es_heap_size: 1500m +es_etc_cluster_name: sunbird-dev +es_etc_discovery_zen_minimum_master_nodes: 2 +es_snapshot_host: "{{ groups['es-backup'][0] }}" +es_restore_host: "{{ groups['es-backup'][0] }}" +snapshot_base_path: application diff --git a/keycloak/scripts/ansible/inventories/dev/group_vars/dev-kong-api.yml b/keycloak/scripts/ansible/inventories/dev/group_vars/dev-kong-api.yml new file mode 100644 index 00000000..ce04f0a5 --- /dev/null +++ b/keycloak/scripts/ansible/inventories/dev/group_vars/dev-kong-api.yml @@ -0,0 +1,30 @@ +# Consumers to be on-boarded +kong_consumers: + - username: api-management-test-user + groups: "{{ kong_all_consumer_groups }}" + state: present + rate_limits: "{{ premium_consumer_rate_limits }}" + - username: sunbird-integrator-test-user + groups: "{{ integration_partner_groups }}" + state: present + credential_algorithm: "RS256" + credential_rsa_public_key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvknOmYAnTRS2BJCm0EXT\nqs3Zg3HPFyhwHIlWp2vwOo5rKLUBmNlSM91yy2vAr7A3wwg+HKe+k+b8XZEJAJyf\nlvtlbRkbuDNpxaqPVav6h7hfUT2RvJOIZn828JLtgYzsA92kD3Ef4YnQoX2FoNLn\noQL0B8WfHbVFkKTbSlz59MlEp74Wx39lTSXjFDYG0wrLiUMW7Eq8ECTEj9ombB+o\nVnBq0mgRNqywtxQlAiFFkuP2H7FATttcHi5PuF8vYMJtpj6PSHmdsMc++VdVE3Pw\n4rQ9s/WY2ThV80RecL5c7jSlfXTyLDTnR10ZNZnMCEzcZAKBSdiIlDmLoZ4852P6\ncwIDAQAB\n-----END PUBLIC KEY-----" + credential_iss: "sunbird-integrator-test.org" + - username: mobile_admin + groups: "{{ mobile_admin_groups }}" + print_credentials: true + state: present + - username: mobile_app + groups: "{{ mobile_app_groups }}" + state: present + - username: mobile_device + groups: "{{ mobile_device_groups }}" + state: present + - username: add-any-consumer-to-be-deleted + state: absent + - username: apekx-integrator-user + groups: "{{ integration_partner_groups }}" + state: absent + credential_algorithm: "RS256" + credential_rsa_public_key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7PtN8+rUo1VnB0BQzEgE\ntaYgYTFk5fnfLB6djy/O0IGx59msT1/V92OwCXFRtXZgCJ/9YIqwprPh/MYcdtAv\nd8Rh/OFQHndwf+yT+3vm2S834hWrgmTNE3fTpgmbbbwm41dJQ2Nv/++SrY6UN+lJ\ncuF8WbizUWZxXHe8HFyIoi52JnBBHpCunXVlMgZL9NT6/hoz8DNfehqpRswveuCF\niW66UVN3MBzBvHEv+gMFyG20UvijdY5vtGYWo30/ExeiDesdGy1JC0fHpjW3FJqE\nBu+Q7Cy1AGFa0ZexLFaLKPspKSLwR0mgkzxV+5x9bhygDC8uXEA3ImuqtkdIXTYw\nUQIDAQAB\n-----END PUBLIC KEY-----" + credential_iss: "apekx" diff --git a/keycloak/scripts/ansible/inventories/dev/group_vars/dev-log-es.yml b/keycloak/scripts/ansible/inventories/dev/group_vars/dev-log-es.yml new file mode 100644 index 00000000..a62feed5 --- /dev/null +++ b/keycloak/scripts/ansible/inventories/dev/group_vars/dev-log-es.yml @@ -0,0 +1,6 @@ +es_heap_size: 1500m +es_etc_cluster_name: sunbird-log-dev +es_snapshot_host: "{{ groups['log-es-backup'][0] }}" +es_restore_host: "{{ groups['log-es-backup'][0] }}" +snapshot_base_path: logger +es_host: "{{ groups['log-es'][0] }}" diff --git a/keycloak/scripts/ansible/inventories/dev/group_vars/dev-postgresql-master.yml b/keycloak/scripts/ansible/inventories/dev/group_vars/dev-postgresql-master.yml new file mode 100644 index 00000000..804b9da3 --- /dev/null +++ b/keycloak/scripts/ansible/inventories/dev/group_vars/dev-postgresql-master.yml @@ -0,0 +1,25 @@ +# postgresql_users should only be created in master and replicated to slave +postgresql_databases: + - name: "{{kong_postgres_database}}" + - name: "{{keycloak_postgres_database}}" + - name: "{{application_postgres_database}}" + +postgresql_users: + - name: "{{ postgres_replication_user_name }}" + password: "{{ postgres_replication_user_password }}" + role_attr_flags: REPLICATION + - name: "{{ postgres_exporter_user }}" + password: "{{ postgres_exporter_password }}" + role_attr_flags: SUPERUSER + - name: "{{kong_postgres_user}}" + password: "{{kong_postgres_password}}" + db: "{{kong_postgres_database}}" + priv: "ALL" + - name: "{{keycloak_postgres_user}}" + password: "{{keycloak_postgres_password}}" + db: "{{keycloak_postgres_database}}" + priv: "ALL" + - name: "{{application_postgres_user}}" + password: "{{application_postgres_password}}" + db: "{{application_postgres_database}}" + priv: "ALL" diff --git a/keycloak/scripts/ansible/inventories/dev/group_vars/dev.yml b/keycloak/scripts/ansible/inventories/dev/group_vars/dev.yml new file mode 100644 index 00000000..d24b3d70 --- /dev/null +++ b/keycloak/scripts/ansible/inventories/dev/group_vars/dev.yml @@ -0,0 +1,291 @@ +# ENVIRONMENT CONFIGURATION +env: dev #Name of the environment, e.g. dev, staging or production. +proxy_server_name: dev.open-sunbird.org #Domain on which the portal will be accessed. e.g. staging.{implementation-name}.org +proxy_site_key: "{{ vault_proxy_site_key }}" #SSL certificate's site.key file contents. More details in this wiki: https://github.com/project-sunbird/sunbird-commons/wiki/Updating-SSL-certificates-in-Sunbird-Proxy-service +proxy_site_crt: "{{ vault_proxy_site_crt }}" #SSL certificate's site.crt file contents. More details in this wiki: https://github.com/project-sunbird/sunbird-commons/wiki/Updating-SSL-certificates-in-Sunbird-Proxy-service + + +# DB CONFIGURATION + +## Below passwords are used by DB install scripts when creating databases. Please use strong passwords. +application_postgres_password: "{{vault_application_postgres_password}}" #Password for Application database. +keycloak_postgres_password: "{{vault_keycloak_postgres_password}}" #Password for Keycloak (Authentication service) database. +kong_postgres_password: "{{ vault_kong_postgres_password }}" #Password for Kong (API Manager) database. + +## Postgres configuration +swarm_address_space: 10.0.0.0/16 #Application server address space (e.g. 10.3.0.0/24), also the agentpublicSubnet if using Azure scripts provided +keycloak_address_space: 10.113.0.0/24 +postgres_address_space: 10.10.0.0/24 + +## Cassandra configuration +cassandra_server_private_ip: 10.10.4.4 #Private IP of cassandra server +keystore_password: "{{vault_keystore_password}}" #Password to use for encrypting cassandra keystore. Use a strong password. +truststore_password: "{{vault_truststore_password}}" #Password to use for encrypting cassandra truststore. Use a strong password. + +# APPLICATION CONFIGURATION + +kong_host: api-manager_kong + +## DB address +application_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server +keycloak_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server +kong_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server +sunbird_mongo_ip: 10.10.2.5 #Private IP of Mongo DB server +sunbird_cassandra_host: 10.10.4.4 #Private IP of Cassandra server +sunbird_es_host: 10.10.3.7,10.10.3.8,10.10.3.6 #Private IP of Elastic Search server. If ES cluster has multiple nodes then add all nodes by separating them with comma. e.g. 10.2.0.1,10.2.0.2,10.2.0.3 + +## Application server configurations +sunbird_ekstep_api_base_url: https://qa.ekstep.in/api #API base URL of the Ekstep environment. Use `https://qa.ekstep.in/api` for non-prod deployments, and use `https://api.ekstep.in/` for prod deployment. +sunbird_ekstep_proxy_base_url: https://qa.ekstep.in #Base URL of the Ekstep environment. Use `https://qa.ekstep.in/` for non-prod deployments, and `https://community.ekstep.in/` for prod deployment. +sunbird_env: qa #Ekstep environment to connect to. Use `qa` for non-prod deployments, and `prod` for prod deployment. +sunbird_mail_server_host: "{{ mail_server_host }}" #SMTP server IP. Could be ignored if not mails are to be sent. +sunbird_mail_server_port: "{{ mail_server_port }}" #SMTP port. Could be ignored if not mails are to be sent. +sunbird_mail_server_username: "{{ mail_server_username }}" #SMTP username. Could be ignored if not mails are to be sent. +sunbird_mail_server_password: "{{ mail_server_password }}" #SMTP server pasword. Could be ignored if not mails are to be sent. +sunbird_mail_server_from_email: support-dev@open-sunbird.org #Email ID that should be as from address in mails + +## Keycloak (auth server) login details +sunbird_sso_username: "{{ vault_sunbird_sso_username }}" +sunbird_sso_password: "{{ vault_sunbird_sso_password }}" +keycloak_admin_username: admin +keycloak_admin_initial_password: "{{ vault_keycloak_admin_password }}" +keycloak_tar_path: keycloak.tar.gz +keycloak_theme_path: artifacts/sunbird + + +## Content Repo configuration +sunbird_api_auth_token: "{{ vault_sunbird_api_auth_token }}" #Authorization key (JWT) to access Sunbird APIs. This will be in the output of deploy-apis.sh script, extracting it out is documented in the deployment wiki. +sunbird_ekstep_api_key: "{{ vault_sunbird_ekstep_api_key }}" #Authorization key (JWT) to access Ekstep APIs. Steps to generate this are documented on https://github.com/project-sunbird/sunbird-commons/wiki/Obtaining-API-token-for-accessing-ekstep-APIs +sunbird_trampoline_secret: "{{ vault_sunbird_trampoline_secret }}" + +# ADVANCED CONFIGURATIONS + +cassandra_listen_address: "{{ cassandra_server_private_ip }}" +cassandra_seeds: "{{ cassandra_server_private_ip }}" +cassandra_broadcast_rpc_address: "{{ cassandra_server_private_ip }}" +cassandra_broadcast_address: "{{ cassandra_server_private_ip }}" +cassandra_listen_interface: '' +cassandra_log_dir: '/var/log/cassandra' +cassandra_root_dir: '/etc/cassandra' +cassandra_version: '3.9' +cassandra_port: 9042 +cassandra_rpc_address: 0.0.0.0 +cassandra_restore_dir: /home/deployer/ +cassandra_backup_azure_container_name: cassandra-backup +cassandra_backup_azure_storage_account_name: "{{ backup_storage_name }}" +cassandra_backup_azure_storage_access_key: "{{backup_storage_key}}" +cassandra_backup_dir: /data/cassandra/backup + +keycloak_url: http://10.113.0.7 + +keycloak_auth_server_url: "https://{{ proxy_server_name }}/auth" +keycloak_realm: sunbird +sunbird_content_player_url: "https://{{ proxy_server_name }}/api/" +sunbird_learner_player_url: "https://{{ proxy_server_name }}/api/" +sunbird_sso_client_id: admin-cli +sunbird_mongo_port: 27017 +sunbird_mongodb_port: 27017 +sunbird_portal_realm: sunbird +sunbird_portal_auth_server_client: portal +sunbird_trampoline_client_id: trampoline +sunbird_appid: sunbird_portal +sunbird_default_tenant: sunbird +sunbird_echo_api_url: "https://{{ proxy_server_name }}/api/echo/" +sunbird_pg_host: "{{ application_postgres_host }}" +sunbird_pg_port: 5432 +sunbird_pg_db: quartz +sunbird_pg_user: quartz +sunbird_pg_password: "{{ application_postgres_password }}" +sunbird_installation: sunbird +sunbird_account_name: sunbirddev +sunbird_account_key: "{{ vault_sunbird_account_key }}" +sunbird_sunbird_quartz_mode: cluster +sunbird_encryption_mode: local +sunbird_cassandra_urls: "{{ cassandra_server_private_ip }}:{{ cassandra_port }}" +sunbird_session_store_type: cassandra +sunbird_keycloak_client_id: 'portal' +sunbird_keycloak_public: true +sunbird_cache_store: "memory" +sunbird_cache_ttl: 1800 +sunbird_portal_title_name: portal +sunbird_web_url: "https://{{ proxy_server_name }}" +sunbird_sso_publickey: "{{vault_sunbird_sso_publickey}}" +sunbird_azure_storage_account: "{{vault_sunbird_azure_storage_account}}" +sunbird_azure_storage_key: "{{vault_sunbird_azure_storage_key}}" +sunbird_container_name: portal +sunbird_cdn_url: https://dev-sunbird-temp.azureedge.net/{{sunbird_container_name}} +mongo_backup_dir: /home/deployer/mongo-backups +sunbird_background_actor_host: actor-service +sunbird_actor_system_name: BackGroundRemoteMiddlewareActorSystem +sunbird_app_url: +sunbird_fcm_account_key: +sunbird_env_logo_url: + + +#player_tenant_dir: +sunbird_dataservice_url: https://{{ proxy_server_name }}/api/ +project: sunbird +application_postgres_database: quartz +application_postgres_user: quartz +keycloak_postgres_database: keycloak +keycloak_postgres_user: keycloak + + +## Cassandra download URI +cassandra_repo: 'deb http://www.apache.org/dist/cassandra/debian 39x main' +cassandra_repo_key: 'https://www.apache.org/dist/cassandra/KEYS' + +#API Manager +kong_postgres_port: 5432 +kong_postgres_user: api_manager_dev +kong_postgres_database: api_manager_dev + +es_curl_host: 10.10.3.7 + +## Logging details +syslog: + host: 172.16.0.5 + port: 51415 + +## PostgreSQL config +postgres_replication_user_name: replication +postgres_replication_user_password: "{{ vault_postgres_replication_user_password }}" + +postgresql_hba_entries: + - { type: local, database: all, user: postgres, auth_method: peer } + - { type: local, database: all, user: all, auth_method: peer } + - { type: host, database: all, user: all, address: '127.0.0.1/32', auth_method: md5 } + - { type: host, database: all, user: all, address: '::1/128', auth_method: md5 } + - { type: host, database: all, user: "{{ postgres_exporter_user }}", address: '{{ swarm_address_space }}', auth_method: md5 } + - { type: host, database: replication, user: "{{ postgres_replication_user_name }}", address: '{{ postgres_address_space }}', auth_method: md5 } + - { type: host, database: all, user: all, address: '{{ swarm_address_space }}', auth_method: md5 } + - { type: host, database: all, user: all, address: '{{ keycloak_address_space }}', auth_method: md5 } + +ansible_vault_password: "{{ vault_ansible_vault_password }}" +docker_hub_password: "{{ vault_docker_hub_password }}" +jenkins_slave_jenkins_username: "{{ vault_jenkins_slave_jenkins_username }}" +jenkins_slave_jenkins_password: "{{ vault_jenkins_slave_jenkins_password }}" +ops_private_key: "{{ vault_ops_private_key }}" +deployer_ssh_key: "{{ vault_deployer_ssh_key }}" +proxy_prometheus_admin_creds: "{{ vault_proxy_prometheus_admin_creds }}" + +# ADDITIONAL CONFIGURATION +backup_storage_name: "sunbirdbackupsdev" +prometheus_storage_retention_time: 72h0m0s +curl_host: dev.open-sunbird.org + +mail_server_host: smtp.sendgrid.net +mail_server_port: 587 +mail_server_username: azure_886153b1defb14e38ecc9c7301625aba@azure.com +mail_server_password: "{{ vault_mail_server_password }}" + +logger_es_host: "{{ groups['dev-log-es'][0] }}" +logger_es_port: 9200 + +kibana_oauth_redirect_url: https://dev.open-sunbird.org/oauth2/callback +monitor_alerts_slack_channel: sunbird-dev-alert +keycloak: True + +api__host: dev.open-sunbird.org + +proxy_replicas: 2 +proxy_reservation_memory: 32M +proxy_limit_memory: 128M +kong_replicas: 3 +kong_reservation_memory: 64M +kong_limit_memory: 256M +echo_service_replicas: 2 +echo_service_reservation_memory: 8M +echo_service_limit_memory: 16M +adminutil_replicas: 2 +adminutil_reservation_memory: 512M +adminutil_limit_memory: 1024M + +actor_replicas: 2 +actor_reservation_memory: 500M +actor_limit_memory: 1024M + +learner_replicas: 2 +learner_reservation_memory: 1500M +learner_limit_memory: 1500M + +player_replicas: 2 +player_reservation_memory: 256M +player_limit_memory: 512M + +content_replicas: 2 +content_reservation_memory: 64M +content_limit_memory: 256M + +keycloak1_replicas: 1 +keycloak1_reservation_memory: 768M +keycloak1_limit_memory: 1024M + +keycloak2_replicas: 1 +keycloak2_reservation_memory: 768M +keycloak2_limit_memory: 1024M + +monitor_es_host: "{{ groups['es'][0] }}" +alertmanager_host: "{{ groups['swarm-agent-for-alertmanager'][0] }}" +prometheus_host: "{{ groups['swarm-agent-for-prometheus'][0] }}" + +swarm_load_balancer: 10.0.0.100 +filebeat_logtsash_host: "{{ swarm_load_balancer }}" + +expected_minimum_logs_per_minute: 30 + +proxy_prometheus: true + +enable_scraping_docker_metrics: true +enable_mongodb_availability_check: false + +postgres_exporter_postgres_port: 5432 +postgres_exporter_user: postgres_exporter +postgres_exporter_password: "{{ vault_postgres_exporter_password }}" +sunbird_learner_service_base_url: https://dev.open-sunbird.org/api +kong_admin_api_url: http://api-manager_kong:8001 + +postgresql_backup_azure_storage_account_name: "{{ backup_storage_name }}" +postgresql_backup_azure_storage_access_key: "{{ backup_storage_key }}" +postgresql_restore_azure_storage_account_name: "{{ backup_storage_name }}" +postgresql_restore_azure_storage_access_key: "{{ backup_storage_key }}" + +grafana_url: https://dev.open-sunbird.org/grafana +grafana_editor_username: editor + +app_alerts_mailing_list: "rayulu@ilimi.in, harishg@ilimi.in, manzarul.haque@tarento.com,{{devops_alerts_mailing_list}}" +devops_alerts_mailing_list: "deepakn@sahajsoft.com, manojv@ilimi.in, shashankt@sahajsoft.com, mathew.pallan@tarento.com, bineesh.k@riflexions.com" +site_alerts_mailing_list: "shailesh@ekstepplus.org, ashwin@tekditechnologies.com, lakhan_m@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" +keycloak_alerts_mailing_list: "ashwin@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" +api_manager_alerts_mailing_list: "ashwin@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" + +jenkins_url: http://10.20.0.4:8080/jenkins + +kibana_oauth_authenticated_email_domains: + - ekstep.org + - sahajsoft.com + - ilimi.in + - tarento.com + +kibana_oauth_authenticated_email_ids: + - shailesh@ekstepplus.org + - vijetha.nayak@riflexions.com + - bineesh.k@riflexions.com + - arvind.yadav@compassitesinc.com + +monitor_alerts_mail_from_email: alerts@open-sunbird.org +monitor_alerts_mail_server_host: "{{ mail_server_host }}" +monitor_alerts_mail_server_port: "{{ mail_server_port }}" +monitor_alerts_mail_server_username: "{{ mail_server_username }}" +monitor_alerts_mail_server_password: "{{ mail_server_password }}" +env_short_name: dev + +# keycloak sms provider +keycloak_build_src: "keycloak_build" +keycloak_ver: "keycloak-3.2.0.Final" +keycloak_sms_provider_build: "keycloak-email-phone-autthenticator-1.0-SNAPSHOT.jar" +keycloak_sms_provider_templates_src: "templates.tar.gz" +keycloak_sms_provider_templates_dest: "/opt/keycloak/themes/sunbird/login" +keycloak_ekstep_sunbird_login_theme_file: "login.tar.gz" +keycloak_ekstep_sunbird_login_theme_dest: "/opt/keycloak/themes/sunbird/login" +keycloak_postgresql: "postgresql-9.4.1212.jar" diff --git a/keycloak/scripts/ansible/inventories/dev/hosts b/keycloak/scripts/ansible/inventories/dev/hosts new file mode 100644 index 00000000..05e65a08 --- /dev/null +++ b/keycloak/scripts/ansible/inventories/dev/hosts @@ -0,0 +1,157 @@ +[dev-postgresql-1] +10.10.0.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-postgresql-master:children] +dev-postgresql-1 + +[dev-postgresql-slave:children] + + +[postgresql-master:children] +dev-postgresql-master + +[postgresql-slave:children] +dev-postgresql-slave + +[postgresql-backup:children] +postgresql-master + +[postgresql-restore:children] +postgresql-master + +[dev-keycloak-1] +10.113.0.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-keycloak-2] +10.113.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + + +[dev-log-es-1] +10.10.3.10 ansible_ssh_user=deployer node_name=dev-log-es-1 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-es-1] +10.10.3.7 ansible_ssh_user=deployer es_instance_name=dev-es-1 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-es-2] +10.10.3.8 ansible_ssh_user=deployer es_instance_name=dev-es-2 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-es-3] +10.10.3.6 ansible_ssh_user=deployer es_instance_name=dev-es-3 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-cassandra-1] +10.10.4.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-swarm-bootstrap-manager] +172.16.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-swarm-manager] +172.16.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-keycloak1] +10.113.0.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-keycloak2] +10.113.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[keycloak:children] +dev-keycloak1 +dev-keycloak2 + +[swarm-agent-docker-prune] +localhost ansible_connection=local + +[dev-kong-api] +localhost ansible_connection=local + +[kong-api:children] +dev-kong-api + +[dev-grafana-dashboards-export] +localhost ansible_connection=local + +[grafana-dashboards-export:children] +dev-grafana-dashboards-export + +[dev-grafana-dashboards-import] +localhost ansible_connection=local + +[grafana-dashboards-import:children] +dev-grafana-dashboards-import + +[swarm-bootstrap-manager:children] +dev-swarm-bootstrap-manager + +[swarm-manager:children] +dev-swarm-manager + + +[dev-es:children] +dev-es-1 +dev-es-2 +dev-es-3 + +[dev-log-es:children] +dev-log-es-1 + +[es:children] +dev-es + +[es-backup:children] +dev-es-1 + +[log-es-backup:children] +dev-log-es-1 + +[log-es:children] +dev-log-es + +[cassandra:children] +dev-cassandra-1 + +[dev-keycloak:children] +dev-keycloak-1 +dev-keycloak-2 + +[swarm-agent-for-prometheus] +10.0.0.9 ansible_ssh_user=ops ansible_ssh_private_key_file=/run/secrets/ops-private-key + +[swarm-agent-for-grafana] +10.0.0.12 ansible_ssh_user=ops ansible_ssh_private_key_file=/run/secrets/ops-private-key + +[swarm-agent-for-alertmanager] +10.0.0.9 ansible_ssh_user=ops ansible_ssh_private_key_file=/run/secrets/ops-private-key + +[non-swarm-nodes:children] +postgresql-master +postgresql-slave +postgresql-backup +postgresql-restore +es +cassandra +log-es +keycloak + +[local-task-runners:children] +kong-api +grafana-dashboards-export +grafana-dashboards-import + +[swarm-nodes:children] +swarm-manager +swarm-bootstrap-manager +swarm-agent-for-prometheus +swarm-agent-for-grafana +swarm-agent-for-alertmanager + +[node-exporter:children] +non-swarm-nodes +swarm-manager + +[log-forwarder:children] +non-swarm-nodes +swarm-manager + +[dev:children] +non-swarm-nodes +swarm-nodes +local-task-runners \ No newline at end of file diff --git a/keycloak/scripts/ansible/inventories/dev/secrets.yml b/keycloak/scripts/ansible/inventories/dev/secrets.yml new file mode 100644 index 00000000..be20efff --- /dev/null +++ b/keycloak/scripts/ansible/inventories/dev/secrets.yml @@ -0,0 +1,806 @@ +$ANSIBLE_VAULT;1.1;AES256 +36303132313138313463326365646333383038393233383933383866373566626136386162613065 +6439656630616138356461336236653930663938666164320a346139373336333761666333336139 +37626139313933356164653232666537663232336334363962323430636139373638313636326531 +6132643336643034620a373532363830633066633137316261616365646239326132333639653334 +30613062383462633164646237616566353235646637353765386239666361346662316238386438 +38336239633038643132343064383932663666373361346162306233346362363863343135663431 +33623431633963343961656539303764626166643634623631303163623537663362373038343264 +33333938333333623064666132363863386231393734333066363563643937303035323237636163 +36343937346533633338646132626461303338633036663035666161616631363130623731656631 +30633834393037383065663931303931373366323933366333313538666136626234613163316139 +31383635346632316162303461613336653833633463316561363739393862316633356231666532 +30616234326235386464386435633334613134353964376132306438393332333436333936363239 +36336232336266303037346138396165346131653833333232313233343864303465646661373561 +65343539653961396562656663306266356538633965653761653834666563346232333065663666 +63336130663034356132383932356466656233613631653538396664383038646230613566326466 +64396363326563613630653133363733343132353930656330373161663837656439376531343733 +65653762623366656334333732653463366239623762366339313966386465316565326665663838 +65646563326264623739663633306634316133626438383462333537316132353265623034306136 +35393036643864353036643265383937363363323232326232356235343562386637303565663061 +62383163313436623633613363633638386430636434646539616334623436316662306466653639 +38653264323330383766663038626263343232356538393237343338396665323062343535373034 +61316534343462353335626166643337623762353437333830303430376161356539643138383733 +63663964366264316639353934613761616466613831626465653662633061633131623733313336 +66333233383930343231363863623634316437623462626665303530303835393733626564326339 +61313861633830366466663836613837366665393130343062336430376236646637653430666663 +39646563623437636438336132316537316363333837353133646536303437666166353237333230 +33326636333362346538626362616161306131623238616563663431623439323563363633623936 +33386230633564396465646266336564363963636439313662613765323935666430636439336631 +64363332666165346530323762323963636165343633393939303965653738616364366432623636 +33386136336163303332343438663330303036333332363530383231316239623838376132316235 +30383533643934646361313663366539316562636563326665656365383837313534346133616531 +35346162333237333835336263613563633731386164306139643338306538666463303163623261 +31626634386138633539396162643063396536313632366161613335656365346464373130333663 +39646261613233636631373761653235366430343438663639326334643735323030663139616434 +66383034633837663433386463356463633133303238383962636430396539663036346330663338 +66323832363561333538393331376465636533396663386135623739333865306530613338623766 +63363732353535303836336462636533623135393164313332656363656262656534353266656239 +33353466363131323736343136333433373433346136373866313166306135326337333837333136 +38663737626630613932383735343838663961393263393266366136386532373365393462336163 +64343238303832663937376133656135643834343061353461626439356265643630656437306135 +32356637363433303465356661346263333561386630323962613265393037663239343062653564 +32656639393939336636656338333866646332303935346539333537623266613863643864653063 +38336337633262636630643262636138346161626538313431383132636639626633363663373736 +32353165373363643136353535316334626635333866316461393730613336666133353734313533 +37616438313466373931636166633133393334376636643738353263626439323139653530313837 +30616434626461636437313566653038383061333366373137643265316633316566653735353734 +39313366373864613839313837376662316231306561336439656330663261643163343039343066 +64613432343332363461366630626435336133616232653032643232343862626135643637666332 +36303536333666356235386338656437653236653530313264633435373765336234386635343435 +66636130323963323265373831313739353738313535393461383031616164343332376565663964 +34656137386532633637643730356135363361643539356433613130646165373065666461646631 +66623263346138616632373164396334613538353235373135656164343035303036656462333062 +31626635636232343965656238323330393962656461343534613131376666663261633261356331 +33356134373164653436613537636531626433313130313431616164663962343233326365376138 +36663936636664313537643861303565643166653965666266393266353135343164623162356334 +63613930323133663464396430653039386538393962303339333236366631393831643239656232 +31383138323466366362623032396633346463346566376330623635636463333733623866396266 +32313763666438353231313132373363353737393335653835623330306633343638326637353531 +38613466386637656531363762626135653362666266393939393966636634616230343238653136 +63613236383734663365656339396135656162366533343539633734386664633561376330653866 +39643235646238343435646166636330613334386138333462633564333131306464316137306664 +61376562396530626338636433303939336431626566643261393763316234626265303338613530 +66336432656363313930613336383636393036386232323737333436393436386538626134383964 +61613939353133376230623066336338663535643932396232323066363463643731613534636134 +34656637306338383131666139336439363437646366396333363837303466376330613763353764 +32383839653136343633323430373737373131613163353233353631373063666234323630343331 +30623137623863393665626562356461306336313463393336383330663861366132663630626136 +61323464656137653431616166366366656566656530363138313935376136656461343366313532 +31373966623662333662313331356233613230653762653635643038633332356161323635346364 +34623138333337333734616431663262393866303736383663306265313330303035306365616566 +37363233336661356135313337336235663063386161306564663334343066623161353966333739 +63316361633433346637366637326631326363653938396638636237373330383033313061643566 +30316532643062346631356266653139656539353462333831643763326537616530323539383831 +62613035366534336632393531633462623662666637363165633633336631373535663261636331 +38353436663139663832323061656165383464353232616330366566663432616563303438383937 +66633563663765393564653035386234386238303037396232656263326564353237363165373230 +63643066323964383030333037646634386130313639633161393939636139373130383739636339 +34666464303933613866313734656235643461666466336439343761323432363631386165636364 +65616634666338393531396132306537653136643035323262333464356132396536326366376631 +31396262666363613138663733316661333763363531366463643564373863386636396637343730 +30643861326639636332643834333662313333643466636165663730356438303139326465616239 +39316563623437306633626136343637313432626533373165343931626536623666633765333262 +63396165333835313937343634356633336134643836356235376131386439383037636230373234 +32343063373063333363363531613562623966643834306566353734313336333537343230626563 +62306339373532383938363934656233643333663662666363323134373835356666643863666538 +37356237396361653032623538303937396464343432623237613965306633376330326537643639 +30653233346134343637656333616233666639643931646633316362353866353131306532386163 +35376135336631353166353565366562626535636562623833616339373532386434383431633565 +36343335656265616235666235393661663263616538393465346363656637663765653461653066 +33303338643162393063303336636330656363316239636165383363653661393039363663633362 +39386165303462373865333964623933363930623034653865613565303238376532366637633162 +37313433353332336139633330626130636438663031623131333661343430653033383330646566 +32643861663235396633663930353864636533613036383563653839313532343731346634336466 +31626161386361643562356561643865333962623166376333643066623634653664646231323635 +66333866376632613765306539306636613533633063353233383564653761653237396163396564 +35643566656663363239643632616164393535633635653863653937663331373132613063346238 +62363263396462383862336132643837316430393738323366363035376261353833333137323262 +38333466633034346464393433366131376439396266323331373237393031376466653137643061 +64633535616130353037646334386133653336633739366330613163396237356665366239646236 +35623531336239656137613933373536653530663936323735346238336463663834666537653365 +31656339373264373931663764633235616463366266323939356539343064393064323561666631 +31346533323334633731636366383136613637376431363532633534623033643662363263383965 +32646232303264643034396664663635366262316234613732663736626162623266353334363564 +35326133643166396134333963303934353266333331666138623664396436383064663835643637 +38373866363835623933393734643535643962666331333561663334303433366564303263393037 +30636133303939636635656564613766656363666361326461646136336661373732636633396637 +37623034336261626665613739366630616438396533666436623632663162393933386362313966 +39616138303938303132656439643966643634636638343534333030343833393064613837366336 +62643962313366633434316237316135363765656637636563643965373830633962373861313031 +34343633613938383031363433646133623931376465613034346562666562383763626530636366 +33366565646565623562353466633062356433653562633931333866646339656466623738353839 +35343036306664313539303030363464653536373365396136306463393636376434376532653039 +63636236306461336332643937326461323961373639363061663165356435636466393361323834 +36663232333237653031373332636539613631626234366137373861646135313535656463623337 +31363265383933343634643862623733666237626130303936343736633861616561316239336162 +30346533393662623361656134613831323236316238663930633231663865353133336432343937 +32396535613035376564393761313230656462626433343664633338653065613535313065376538 +31633932663362366536633466616235333337323939356131343135343836383134393566323630 +64636338613762373463636633646436303137323937656531386233656334333434326566373163 +63303138633438626437373465353130346534376433363361356535306536646564313736336237 +63323336623830333931613165366463363337623165653164663731393766356462313839376435 +66346362396234323764646163653561316531623061346238303032333035623333383563396530 +32396230336538333563363236313335643862393162613637373539343634653532613336313663 +30393864363963626134323963643864383739663833306365313434333739353532666130316265 +33316438636262373862396136663061393962633037643532343236376639366136306236316461 +31393362366531333964653763633632343962343239616132616361663665623663303065323366 +61303131666138373337313565363435316238313830343965636430336532316666383939633933 +66346231373438323066326231633336666535646232393933336330643666326534356164336636 +39353438616563383265366330643837356263343466663537356337616166623037303238313061 +66316666623866633035326336653431366665616235363432643139373961663435366331313234 +39663431353161386231353636656331656134396334396439383637303561366537313632646539 +36636336666433363731656136373561393632336235663266306166663134333465366438393762 +66393534663739323263303333353739616336316539623537303839656438356534616262336633 +34656466656230316532303039656639323835613833653739656339666264616363323363666330 +38616464393163653037613030323032656562316535306265326262633962313534643836633233 +61386539373036306634333764363366383566646137393034346565366366396136343032653538 +32323335306438303861613136613937343961666537333161613939653564366439353537363465 +33376361393532313962306435313730303866643462316537373632396362316166396166643437 +39396239393864323661643331643938646335353032363262326165373465643436306631666164 +34306661353536383938626632323966643561313864613630353765313230386239663661396432 +66383761623539376634376661633132613032333464666639633531643963366533613536353863 +64333433396564386139656238316638323966616231336361396238663433636237653766623062 +37656534373031656662333464663937633864393761666663303462353333343661656537383736 +38343339303465343839666132386239323734643461316566333166646637373238613836303738 +30323939366539313339313239383836616537663465626635656234363966383766363263643763 +36353865393461386633366562353161636166313039363834323838643834326464323136666537 +63346564623537323161653437663762356632366439636235656131393863333530373230373936 +65326539356438643337356538303031363038366334383834323139643830323531616632303037 +35363566636564336161663933323137393431396463653130303634353534633063613438623861 +38636164346536373838626264366361373634666131306532326539316233636165313631326631 +63643735633933316237636231323432646439633538366535316165623838376362303962313733 +39313365636634393639346532383135333566613361363530656534393561653565393737623061 +36633035383636343339613964643638646636626335303566646234393130613264616539383539 +38383262383462313361363630326161653731306165663038363338623931323862316466626339 +35356233373461616463636530373962306134636565643466613963396364643835373364343562 +66316630626630306361313837386236633433323438653264316464313763336163623031353166 +39393036633933656666396465663339326663306338356332333738663161323837653431383037 +39333463623538306666653830616630666335313664316238326264376237656537393632636237 +32323063356663616261333561646562356233353237303166303062636332636135633634313131 +35663064373436386166393564343933646630303635666234663061323638373338633662353064 +61363838613836643662386431366362333934373964346432616138336337393034663762376334 +31386135616333663334663130383530393836333037646336393434376233363638326661656662 +34346363343131373564663931316431316261666536396231633436363266366231393464303438 +62373364626339393961656235626163663837353361363036313634653230316366323065333933 +64326334656661393432313737643735373633313263626463616264363463343434663832633135 +37633938306362303262636663633231666634306463656663653535663063623233383362333631 +38353237373361636637616239613334623364623232326662646461373034383030666561613764 +31376533663666376437663363333763663761643533393937363731363636346263396436326366 +62316337336533326266353862633437313338646235316537626335363438643363396235663231 +63333732303536643036613063313962623165633562643534636339346635346563313437646633 +61363535363234623439666365316134396633396139396663303263353934396365363837363361 +36353966366666626236356331303333333332326465656266393165653632336532353930626363 +38303135313837326465373139626138373430393763376635313062386132383738393037613965 +66343838383665313430313564653131373863646130386433626164646131653234616238356236 +61393530616566656162643763363166313665653238323836356539653064646661306635633038 +61663631313031666564333361653337303731656639356362346639303561393265303461623364 +61666637646533613831383863353562336363663263646437376164353063373934346139353237 +35396132353766653836646532616435633162663335393734623336643231306538666235653532 +66373364336261363737396634346530346266303565613262373639393837626630613432316335 +35353438326336316463323135313238643863653663383437306566623634336466663464623364 +61336562303566373732363231366163383538333636353366306631643339396635623839383739 +35303433616436303335633334316162663938306631636362366334303836613035646231633062 +38636530343037356435343039373935343737613635383666613666613336613933306433346536 +33353034303662386164303130633739396630323930646332343461303637623836323138613037 +38323137356335613362666263386538316563323834626631396661343431353162313263636537 +66333663323366333734636262326335616634656366646566353963646563646331363864643235 +35316338356263326566343462353331323565363737393030373136303634303236313266343030 +31626438346266633234633263643831613964313562613065393737363237666537636536616135 +39653761666363303362366439373938313063306364393161656332626138333235306464306439 +64356433303262353636336535376535383639376361383661646330643561383738373535663635 +61383664363262386666613763386533303438366666383035326235303932656336383535323738 +62623636336164323462653939386130303662333037616562326432363537653437376364343630 +39656634656133353639616637656166633537383465323463626636663030303139313062633337 +64626664373038373833656664663630383231373161313538336134623135613737633831383362 +31386439653865313765336133316337386664653939343162373834613737373062653036396534 +64643133396530326335636332376634393734353135373863653237616162353262376139353237 +35643764333365393135386363646438306362646561346665343163383834363931643135366137 +38633931316436623465306533636664346433386230613436656562653635346161646534336665 +62303136383563366134323035333635363337366539643332336237306235643532633634383936 +31316335663833316163316364383564626236343164333538356333323761363736313263323137 +37613933366566383265356561386238656334613631643232343862373833623538636236316536 +33386631343265663032383735643361636332613835333833383130316662646463343139613530 +61326433616163626336343532323839393065656630613534613466633763353061353930653437 +33653232326636653039666533323735373736346532333337363163316631656530613935333864 +38393833336161643136383835373432363939366166626566633064356366663337373933323934 +39313964343035333562303861616166393961353166346638393633663636353930333563633365 +63633663643864383661306236376166643366616165346331323761656666393936363631363031 +31373463363066376661306133346366663239393333376564373133393432353866653462383662 +36313661663862363662386564356363316634363964336537636561653730613436396165356433 +38666532646436633132653964313737343165303938653966336231663138373265343363313935 +33383961623431333161363661356163396438633565663964663162303362363063366465303933 +36333662633930313238613662323063663634643037323739393231656631333632393136306439 +33643439323263666337333865316664336332656235373731643139373732396136626534316330 +36636461616230613632313966663762663533303037373763313562306562373232316332356634 +34333935353333346335616133303235376336326661396266653934373765343663666338306537 +38646230306562313538636136306531343765326439663636373763373764666336636133386466 +61613665316361393631313564356339626161313135613037376332626636313766353731633430 +35346635643239636133383865396634653665333431626333323336636239363063646535363239 +32626331383333376365383533363132366364316639356632656339396263306134376136663534 +63396535343938376337626433333539393134363434393230633566326332303666343434303832 +64313063363966333232383138383539656565343834386534366661626266666334653066656537 +32323337343336333536353263653066643731373766376330613232386564316263336166376461 +38326362306664313336326534623436323336393036323961616262656236626336646331323238 +39336233333832356234363065323762623734353439363538646362626534336133313931353537 +62366431373537343464343235343464326462616466613038313536646466393965636463393163 +30343363363530383361653433643035346335663535376665653737303064353662636531663331 +31663734663266343566643630323738386337656530646334303936636562376238313936353139 +65346438386263646231343031363162336134363532623665396666313933356134666334353365 +39306536353238653761363735383064363533343834646265353834653137343937633966666235 +30623434366439633234643265613530386134393466373365366339363561373132343134656433 +33303565383837633266346139323561323338353634613037626336353763386239383061346663 +39353062396339393234656164343736313862393335616230313664373139663262633561616436 +66386466663130613663666639613062633234376436623931356332323232353064663761663437 +32366631393833306632653130623161646365383565396430656637646361333366643833383461 +32373833393237623836663637373665373761363463316339343332326564333639656235623738 +36663135633463646564376463353532383134303864303332396366316265613464343134396466 +37656531353137356261383731393162643235313332343262336231333165326632356539313864 +38326665376533626162626538666638343434363263306637643333646636346236396664386234 +66316366336366623432356463383362653937623739333136353239346635323437336361643831 +62663937343562323461343166313430666434366332383462666539626566393164386134386236 +66303637323762666564313230333637646662633738633537323364316164653462626433313861 +38346231633164306432323435313466393830653962353466323962306635316265653466396263 +63393939316430356235326565376531633433626663303734306335666438383439306637666166 +30353766643233386463623666643430313961633561363666303630343231346133616461656662 +61323861333862313531303166376663303933613837386666643039393162396332373261363731 +32303634303132346535366630383761656533316335363837366463323565343062623261376264 +32356239313064303632366264343465643362646431656136343136386539303866396439333936 +62666164373839323732363262343131323338623234326430333538646564653937396133653866 +31373964653039326262316662626266376462316238656132333134303437356136613361666362 +65623362323637336664366433356435303332626536363966393764353635663731386433666134 +38333161653533616462386665633861643330623561393334636663396363363833656439666339 +31386237383531373536623036386437306135376637326134663937373838653063616463363236 +33306462343230303762373335626362393334353531313663333761636536613733323435386663 +33313762326465376134343435353263346532393865373366363935376337636632373034386431 +65316133613634616663376231363136383733336139636335323063613538616434373736336364 +34623666653131333862353931646266643737323865623636623038333636663663383863363336 +66363936303938346435373866306234616164313930653866646164636466333661336632663830 +64396337646636613661333933396336626264346238346361393562633364316361356236663435 +66623063376561396138646666623738663539356138306561353664356365343535306531343332 +64393362333636333135333735616366626266313331343634323338333738356437303462383538 +37396463663731663565313066623931613030303633626266623739383063376536646130333865 +31373263353261356361306639633331663632393338346561383933633838643438643730363565 +36323563343639373639656264623761643263646438333333326364366532336363633563393639 +35623436653566653563353161393438353332613537343336353830306139666631373237336130 +64343131373965383333623833633734653039633138646431633739336264643131386538633836 +61366530373732356530323530663232326335653230303366373461623137363033376138383562 +66373931646162613438323263303763616464323338626334313630373832623234343439363264 +34396533616535303931643630636363393433366463663665393536643835383438663961653435 +34653962636333313936636238316237626234386366363634363739613431646239626439636662 +35623731653937643263656235623466396537613663626237353233633865323633653439396332 +64326362343532346239386435633437646230303031653938616363393261346665653034353833 +65326465663032373932323866396564653538336535373634643332633032323435653439396535 +32373135373363656132383863656266383566363036343232623037363666316234643366623639 +34666531653965323363393664363230666536633064393035646163333730376264363966356638 +37376437376461613035636461663336633330306464396566633361623436356333633234366237 +33616635663966333738346264636534633764376363643233623135376536613730363631316235 +34653235373331663432333635386435353034613831373435666633313765343065396662653932 +66643339313164336239373732393231333037326338303933626430366463353831663536393530 +38626262353335656338623335383666303661373430326535643464363937343064306465646432 +65613335643831366164316365666361613165653863343033653730393236663437616361383165 +65616332366261653461376435343333396333653533353662333261313831633338356531393639 +30326562653862393333613666643332643830303634316637643264383165373539306531313632 +61636132646335656333636363343464356632316534333538383131376432383162646430376431 +63316339353232356432386431353438616337376161326563336461613061313337636539323133 +34646161656565623537336463613235656335346663363439616365316661376435363861326135 +31613532653931636365626264326536623839666637373737323831356461316239373562623336 +32633337623830633731623537353064336533666139333364356437663835656331366339653564 +31396633396162316361346338636362363630376162353733633762373461393063336462633464 +35353530616265353636313338623863613936306663643037363665636236363233386535656437 +61626165366333333736333039623138613835346562356631333730646234333134393366643533 +62356637396466396662656361333432666664633037373262313863333539326563643063656564 +66366637326263323638386232386630396634643132623433343035656361386165616664396633 +33613063633463336430313237373965613565633035623361313162373032386161346139613233 +66333665363466343938626665643632366130353461343533363461653036313233326461363265 +34656166646331303836613039346130656439666530376263316162323233306638306664653561 +64353735613863623166393833613962343464326561326238393231346335396633666233646332 +39303736343632613135373465616264633635326537363835666333343061363739336332373330 +66653864393534663330623039626434626365643538363964613634613061363939613837613261 +38336466323636643438373038666536656633386332366661343861323330306632623130626637 +35613334343731653134323361326563616165333833626134366137376236646337633239636333 +30366636666265306533616138646339393362633236633633313861643364633933376664653035 +36346663643762663365343635383739323165633333353138656366373638356539343939633534 +32333837633636363937353762666162626430393236663238373932663039616464613566613361 +36326632666463353066633764323563613333623333356465353163653431323632653135613061 +37363663613738303265613665623565316331356336623830303432646661333065373530393431 +37656566353130643230376432663132613338653730386464376230316362313533306466666130 +39656536353830343465366162373237376561323566323433313538663237666166626532386262 +35653435386238373431353762353239326365656134386433643466643462636232303236366633 +66336562656264666235396162636433353064353537343538613338653935663930623532656165 +33316562633131363862613566386566383835633065343532643731313234363034333165336131 +36626635616433626564356436383233623030356661616365616365616161336132656639303564 +31323466643464353461306462316538663963613636373831623361393433646465626666366631 +38363264313033656231653161633962626234646239373564663333333434336462356362343234 +62353862343734323339653831656536623265626439343632343161383663373532363765613535 +39656662633732343431616265323266663366346634316135356230336263323563643335336662 +64653064633538653133613735303838396366346665346338303337306637313236313139643135 +35313433366332356366363132323363383533336235333632653265303539326266346137333334 +32346131353435633762643834393230633664373535643762623534346364373163373038343636 +30313663333139353862353630623730666530323262663435653636663839363737393061383066 +31633530623665663838366331636263313265323234653630663661316465653564373163663633 +34663063643164336639363132643731336431646134333263636235343835633937626265393561 +32363939623837333438616461356361643132336130396564323665303463613261343863643266 +31303039633038383631363665396335616336343838376539306238346463376535313561653732 +31376338663165346339643236313038393164646463343062353137663366393735336235646339 +62646232323838613534366164346435366662393865363861396662353666363230373737666261 +66323563383930376237666131646339393032656166626632626439333232633164313831313165 +30376238616435653831636236376332356535666265663863643139643764336630376462333337 +32303537326362643439666136623636353534313366613563313432626266373564393030326632 +30396635393933306464613766306336323233636438396132323338383066636632316330633238 +62613366383336313434343339303166336436393766666561393664636164303566373334336338 +31356162303836623961333638646166373435393137376136386239343430353036353734616230 +33626332316433393466393365323932383837303338383136376338663166383133643364653764 +61383534636130613366366639336566663234636461346461316130396661336262623337393534 +66373036306563373662383335623965323739626236613766366236623062313637323964373038 +38383136333133663364323066366261663734306136653832366134353938303739346234343936 +38303366343366666538333661643433376539653666616666333261656631646537343731653034 +36373832623165333363346363353762663935323737323565353336396630653535343339663037 +32623737633230396562613762646663373833366632313663363261613737383565383633653830 +39613263313465643135336131376534393337666433623262633234646431303264656630386333 +32656362346164646462376464656362386233373039663637383233646461383230646336356433 +36323439653564653438323966393566633339326337646434313930383532663861373237613663 +34623363323735323433363466393835616633316164663833373439316461376164616164653865 +39326163623763383633373561333730336532643966393730623962656338333437366132616338 +36363933353238643464373461323130373930373162333761373363393165313635363766663935 +35303066323334313531616361373835653234373134306233333037336235306134366633623864 +36623235313230656339373739626230316338636430623134353233366261353134616633663463 +65373435366230313861633638303437356262333562303464383536633037316134623833626431 +65313062396337343033636264373032363739393836633665623862633931393264646239343039 +63643231373636636636303331393730663634653831663834633931323733623031326236656265 +33396537656165303964633535633065326533376665323236326266383134376138613538393932 +66616565353236313463393136343238353835653761313562363930373630393065313732346332 +39656537376132306134613838343332383736376230646235333266363136623030356433636131 +62623861376431613431373139376335343135626434323733623434353761393630613531306433 +32636637613864353361653733383965626465386562633331633264386633326165346532626533 +32343637643638643037386236316164363539313437363038393533663238616436653238326136 +35363437653063616562623334333736376639623461333463303466343838313731383363623639 +63636536326438333735376137396435363764656432656132326439363137323533346366393564 +61383635643037626134386461336563643434393636396166353633306162383665363831663561 +32383961353066636532386166323639376266623563613134323236616462393739363430616538 +32376132653436343834363661633138376539666239663136313132643830306139616563656265 +33336664613262326463383064623032383139383434343064363338336463626136643765303437 +62663765326434393830653237363564626632363964373234316233383130333964366663346264 +64616437326139613836623465643266323839356536393265326237386131393166616365636538 +30363332386139646563656664356435633736386165643830313766663637666438356536376530 +66333636336666303766396465383066356138376462616664636136663430646466333239333437 +39316137313665333537356432363835303834376639663362613636663931306538316361656664 +33343533326530343832376562646661653364303866343630623866636161613234313636343138 +31376461333834633566303364333566363932373264323432643139333131323339316531643661 +38363039363361636261633136326564353337303339353437643331313534633632646562636132 +31663739376335613961383766353964653535306664373738626464353438653030346339613536 +34393238636665323732633832353863323933663638663433306230626264323336373531383061 +38666666393062333637393634396638353035373765313637323130646666616664313034663638 +34633235373137326165346530303637633837343463383131386432326430363332356635623235 +32663263386335313837663135663032313765636663356432663733643830333464353634616266 +66656563653037326333656238663937363835646139393230383763613736396466326531383937 +35366266396436623131383966653839323835373032356463336561396265623130346433333630 +33346635313264626434666532396536373965346164393934386330373931646264326433616461 +33666464323465666361353036353831653637393436646238613037636334663863323630346331 +64316563626635346235376463333165333938326166323461653935373966353164383664666461 +61383361653964396666663365613938626534626337363933343464383962623564323039363431 +66386564353431323838396365333234376665636533346562643864636566306633663832646232 +66363033363737616564336632626331346136343762316137373037653034313738656638646133 +62386264666661633036623861633131636666353433616462336230383737636164633362363662 +32323930653732663064343234383136633332316534323238383236326330303533386337363832 +32313036613132333563633333356535323531363230366534616263323962326635376261356164 +30633663386432666466396466376437353066313934303639333935653330343434643266613065 +39336662326561656638616230326334376637303431666539333439313636383437353066393532 +63343331663566653665343533333935383937666133353037396438616461343038343666633636 +36353834323435323633303738653262623635313134333364663633343562356364326365613764 +31383362366233323937393065653464396663333830326337616464386434336337333434366533 +32323338363833313565346238626162383763383665626538306564623065363738646138393664 +30623730323038323163636239313433643366353032376234343166656234316230633530373630 +34303137396634313562613562303361306434653833373232393062313461393337646166373964 +63313966303432383830363164373339386139346237313035663966316438343464656236616536 +33336630336532616239316261636438346536303566656332363366336466393531353261653731 +30393665343236663462616562313737386666613736396465656266333533623435646132663466 +32343962663230316636393337613061383330663938613938376433333264393932616331313337 +64616632313263633332363464633166643932333634306337333638616566333431323361653761 +63383137386262633037346562323732663630633939343764313463346432623839346364646361 +34393430386230643863613030326464356532376232666135376436636637626163386162663662 +61393239373662353437623064643835353966643366656435386235343461623734303734373936 +61396630353537623563373736343934663832363138306465323930396532356365363937636539 +36373066383738653465386561343837303035313933636232323763366265353434666536386435 +66383739633437356533386366306130656432356163386365373337656463326638626666323162 +34333137306131386335353064663962336432663730373338313661326266353738326330616239 +33643531656339376663613735646266663065346138313838323061363265666239613663346334 +64323633336632663836626166626163356330343863323939366265366339386236363530353534 +61336633663763303462373463323563346332646534613437323736646639323834373439643430 +32393034646434306163373434623434623836656134383230636236653662306562393335646662 +36316664363334353436633466626137353930653436343163353662633565333338386630393237 +66633732646134383232306466663230333036303939336534613163386562383234616338383166 +39646365383839383065653033613366313739393661656239366661323734353366636266373463 +35303437393061356138393135313832616532356438303434383663353331613030386665386462 +37376566626239363730663464333635353265376635663962336534306262333938333363646163 +64373961313632373365663562393333633539363137303062353834303936393239653937383261 +34323664666234313262326266623465653963396330663638303133626630326466393331363936 +66343730626334393163323561643639363466333966653266623232343063383934666665366630 +36386132346561303831636262393634326561373232366438383532333963316364323031343366 +30383338643035353663646237366431356435346662396436633636343732653132616562643130 +66613263653831363130363436613231626464343234346137623537366331346138633166376334 +37333962363931623033393134386564353265323436353564646634663361353236386332313665 +65656234383831323561643638646139643165643464633836343233326532343362313134623239 +32363762376533393430336133643231366634613934623761333434626437313435616661316231 +36356636656665656562313739393130343162343462336133633561646434613163346130353738 +34303935623936616539636135333761306463393236346436636132383837376333306633636531 +62343166383036353865333737356534353661303330306661323039636131376365383864396163 +62633537663630393665363930646133643464653834616564373530666663386132393235393864 +37653233343936386437336532646664313962333864316438396662326139636161393533666466 +36643034363538306435323464326164616664353066323564323432336261353462373961353237 +63616562373035313561363661366332346130323932393131623538353537633162663362383438 +66633930363733353936613230613438356662633134386664613435666133303136333637616539 +32366164646536363335333365663961643965336332306364363437633762636230393538326265 +30313431623265313634666264366664316361653631306534396265353964393839396331326363 +31636538303362323764313265323462643635323734643435386664316663633335613132363432 +33316561326631313737356231303632653664393863383264633962326637633436393364323864 +63643636636664393331653032376336323039313265633466313965633664346632653237356562 +33393966323937393266336233336566636232616231396465323462353639343230643261393336 +61643134393239386661633833663937653233386235633964366565343232333238363665323063 +39376463393936313932333265373065393333343761363134646565383564616335366630363731 +64333035383031636538313364633438346563323534633462396430353732666361343032626132 +61326339323230393632363934366336663062333832303262623431623961393338386531303763 +38373362643234306538613439306665333130663432373533343739633932383564613036383433 +31656466396436656563303132393033653530393733663531646361643533383639623765373235 +61653635323731396436636531363638646462366565323136333431373063636164666563636665 +38376237623332636234663862363330653138363463323832306330366162656235623737316539 +36393161316134393838323565366333623261396538623737323732653730623265623031333562 +31663964366166633261646163343933666137333738643263333663373365333630326236353263 +66643961313939383736343862303366356161376466323763356162393031353738393065313538 +38623038363065376665313031323636653361333561343536663332616637643131393936346337 +34643639333133366538336539643162303262356239336366316631323431656633653761303266 +66333161633630613533316166633439346137373064363862336664386539316561383464373136 +38303733663164353531663561336137636161333836663963343135326138643363363238376638 +35343233366337653964663635396534373233356235383930316437376363653737386639336636 +31386238323737616139373632663562383734653763333139303239303830363961653961333633 +35336264626634646262663166613331333239623963366133333833656333613837323632313863 +35643733623966613936646636326163363735303733336439353731613062343034626262346661 +35663234663338623361393530626232663561663830636633613431393832373663386238623230 +36653737333563306534653230376239353833653131303035353637323339316235323639366637 +30343335313831376237633932656332306265373530653165653061656261306530653966373132 +64353962626465343639613764333463633365326230336563303231383665393162353034336331 +63333264323264306332323633613163633465376362336466336564303532636465663563663538 +62656632346133653330373737646664386161386264383236336531623931316666343537363466 +64643861643935363433316133633835636166346136363261363735663063343538313766653161 +61613433386165666638633663656235346135353764373132333630353432616433623862306139 +37633066636533326139393033336566666135646132663233303361613833333533666366616437 +39316537353534626330343762623432366239396233333033353238393439323339663339346664 +36386163383466643035643366363639343831613534373466643430623362666638663439373835 +62386662653132643133626463353366366561373338663734363535613838363063366665636637 +34333333316531613931613036383538383333306635646464366463396339313534333638623131 +31663731653535626236623161346561623439356162316537666139343266623138643830363734 +65386136323235616162356439353933353063386661343665663532386532396338353733396663 +33656561653430613832363263306337383334656633376431613135383066333837613165303939 +30636465373735623434323331616539386531386163623265656566623265633238373838633330 +66396639313935623436313733333339623066333838633563643563383233306565376136306632 +31343838346237383362393238373363633237376330316139383638613535643566646464633361 +36343431623165356631383964323561663866656532643439346231393731393838613362666562 +38646237653530623837363165386561663438366663353964333933626136396237616663643566 +36376663363137363835616535623133346136343362373033376562323034656432393064343766 +31666334663263356539346463393232663135313331333435393063333031303063323433663765 +63393734313265306563613630313634333262666334343066343835316461326163646638363961 +36323036386134366232346432393261373631336539653965646431313363613761363433333334 +36303535616135643363333265623236656161373832653835343535373039636563363664656430 +37326631656439363730313831646436333965366232653163336139343763333631396265616562 +38326366396266386663343431306338363033653166663964396631643932396536303536626431 +33396430636130636332346239373536326161396338336536623636363734343832633666323965 +65613735316638663438626237316366643831643764626135366531323835343161316564373764 +65336164656431636632343864376234366139346162663537633465656239643739333265313838 +66363337333966373261336664613666343135663436663632623934363739353932396539353033 +61343161393539386236366562393061336434653535316635373061643832366364643230623436 +64653730303934386537656663366535666131323737323534323531313135316438393838373063 +32383336636333393763643339613939383332646139656564613164353264643236363834373966 +62613532376635643162323834636364363233653437336563393062326137666132343831656434 +34616235366561343766376236376165616630643332363639613866663066326339636164303232 +30376363383431363233363738306230303735663933323530363664376136306236346362323332 +31306365653731373135316439323366666639663765653630613330383635333139383336333634 +34363933636532306433646264323031396364376432323537376236643933333566363135613336 +36386462616363313336623233666564653361306563386663623431643536646637366431623261 +65653338376238613761383532376233393631383133396635633033353933336138383064636538 +33366336396564653134663835343964316261336665303664346166633235383533306234626434 +66633137393336336465313833653430333937623635336230323664396334396538366265653861 +37366464396166616461326435656537383162363966306166303765633739636332336533633063 +39326566666433333939646662336534633064303765316338616239626635336566346137663464 +61666564636332336134363331306337373630653962613962646630356538316233623938633266 +34383737373765653934373233626437643839376334636665303738373035366230666162626163 +63383464623534343464396163626665633462333134663561616533373038373932623536363461 +64613736613433643866396166303132633361313837653639646330663034663630363038363664 +63623061323362383338303536303061346635316532366535303835616231333836653330666661 +30313839373161393735313536383734333262666261633862613363393137346137363437363232 +63653538636633353966306436663835656638356332623237393434353235343064333037656235 +36346162636631343139653634346563356635613665656661316163383962353237343534633339 +38386462323162653039393735393661326665386638323934613439353830663632306332656137 +61363233383535356536333761666564643464316436306235613331356134613834666561303161 +34333830333139333733663632303838653037306135633533363865346432343734303837633061 +64616134393636383331613164393465386630353461623764396534326462623866663066353530 +61643736633430616232633933363364303533336338636230643039386530353233316266656436 +66643433316338353262333661356563633266346331393965643561663864653663663533383665 +37323363343861343737633134666530646237313364323165393732393737646465343163666630 +64643536336433303134333238393861323463663436356433353635326134323439366438353134 +65643065396366363964343236663635313866373265663033326363353034323561666336363762 +64626532393537326539636266323162666662383333663363326232333139363536393537333734 +30333032626162613533613165353165356437376230616335643564623034356131666439613262 +64653533386265303866396135616538633661613036623864313165336632643333626264363639 +66643864376236373266613761323038326664373533363931643264623065633835346331623261 +38313664663062663331633338363036613761366130313464666539393933316564303662666661 +66646232353262616636643034343530313835666163373433633833613837633565386164656235 +66343032316136356232623739613135643165653366623162346234353630306365653438376332 +62316536393831383733303735643436653735396236646430643232346535396533643635356332 +39623031393336313635656535653535613933376232323135376165356662353239333638366633 +30646362663362646439643932303030313738386535363262306438333039376133313935326339 +64363663313934353265326638306262373662373636383135303334386136636166386266613535 +64323235383435363761656234393034646531353836626135303863636637613333383137346235 +37613636363438373830623039623236353736373365363038333637656265383135656164353731 +62323935346535343535333863616363383766333937636464376331306239636563343938303534 +39336337646137363135383134393163306637623964646339663366646130623539303735303833 +36396135316432356534356365316235323437353331346464663739343561353536623031643338 +32613131366235633434373034613766626463623530613032663839336366383335623763656666 +64613634383364643232316166653333356566356232646662666234363635643538653364316565 +63626531376566313933636635653231636438653033346563613964616437366339353131373961 +38656535616332656462626361363364613034623633636138343231643062653936316637333838 +32303131623034343233373336306635663038343234626561376264303635383338663734356237 +62393634633565653331363462346664663434353461623965323838666231666335313031323864 +65353364623330613131366539306564303061383134316362623665666636613936306135386363 +32636536356235323266643961643534653331663361636665353031323464376639356130363765 +63343262316661393931343336363437373336356163663835636366653364323537346532643661 +34666531313064353537666533303837663237313635633934653036353966323765646435626336 +61653338326161333035353631663239366335353239303737616137313364306265326134663037 +31636465623039616361646332303962663937633039666337393762393532313166323633633539 +33666236336133326630323766626533373035316330303262643264633839363337316161383439 +33613165363964356130663963393961626438383531613163663830613835333038336339366465 +36653461306166653633353738393666396261353538393834393637326636616439343131636536 +35653234633566653563383738653538363635316239633736386563393865623264316266373863 +34623235626132336165373134336438653032633534623639663864383438326437386238613062 +39643330633430336435643361643664336330303466333539306361386362366265623734633830 +62663565626366396533643130363662373830623164633536313665656230373830343036633237 +62343332616364653930383766396336386165383133373431623665653038643931313536643732 +34353831323038653963623533336465356337653130333264396231613235303961323230636534 +38623935653833366264316535663133623632363130646136643730373338613230336532343633 +35376463303936346562306161616231623236653164326261323164623735303834363266316537 +36353161613864633131666663646266663463306562646331656563346435386164363132366637 +35316132616661353637303265303137643863366537626533313264656166383461633066336437 +37323732653533643165393931616465626230626663643933313737396537316165326230653463 +61653166396165623464643438626238646630303865313330646234343635623365646665333437 +35333333346338303733306639393533346166653565333362316536356235616162333234633737 +36613030646365666363373063373564656337663837663039643333363365326161326537626335 +65393136306161396166346239323337393232323235373535643765323932353563313631643863 +31613465333439376665363664643433653539666533323531636437356330656361616637376231 +66353139373864636534333966613263613039653832343464313466633235393631323161336330 +66366266616365386538633130333034396138396162663733393836656137336337613062393837 +66323661666137333335393939626232663334333035623434356663336135643837363433306535 +31633564363130336639666538343038323834646536663332306336383864306165373033393563 +33623135333561666265666439353666343437393833613637393634663330656562653631343035 +32336666393131363334323637303939663133613261353965393934633933613534303438333538 +65353930303864646337383237396133346136336136353131323461323262343730323334343035 +62653766366136303338343964643961373532636630353333343032376631353165633438356239 +36323365663366653630323364646465373861643637316538396433333463633934636162643562 +39366532666434313439383864656166323233353763383935333964313438333630636364363366 +39383261623864363633323666663033366564363664356231663032653639623362663061656632 +33373562663932346534393631376663666231303238303232363532663536663630636363366639 +62326631613034366266633834383966613632656664323965393631323665623831343437356363 +32313666633164386232643538663238323932336638396136386238313663313433343031353934 +36353238636539326337303161663135616433633764666462393662313662633466303335633866 +35313637336232353236616139306130326263313336326664313934626561313633346530353134 +35303765366233653635633034633764613861316533633437623261383633373261356135313731 +66316565666134356263393761303533623862613138333134383566326134656435346537353037 +33666635373233323430346565353937396237376232303561356237353632313835326535376631 +30636566386239643036353133393165363939626235323366393431363363303164353261303939 +34633135646132323234383766346263613934393434366535373634376139366233366134366433 +38363738396539393434663361346130383331646565306362343266323131303538323933313430 +64316134653634323962353136353661376466656566383630653963353831363038326535323165 +64383962343563306566613837653432363366313433646631303537316339623162363563373332 +65616239316135333464643730373061616162653833346131633033313633303539636262613763 +65633561623432316435373061633335616530353963313164313535366163623861613464623237 +32343663323636643933663539393538313765623939643331396166333836653730656236663536 +65303961396161386261386630363833633634613431656565326331333136323437326137356263 +34316362376238626333393136346437626535643639393937633532336461333237353765633966 +30666339656661336638376435373561346134383638363566373661333437646362386262646538 +61383232633337336438303761376666336338393133383034343139376264306330333135323030 +61376235663738636435643966306331366433316530396666353365646366316539323038613439 +35656434623163323661376130383061393038633532386563393465643834626630346132323461 +35633966623064623336376665343437613031616237613066336331326339646535363761346163 +37303533336561366133653633366263383132326438326632646661636333383436626535376264 +34363830646664653133363539666534366666653138346235623338363365373263663439396563 +36386331626665653662643164363566656239633564636633396562393037326663356266356339 +38653239616531376664643165633634396533643732613038313361356535616461373235623961 +36376132643932393130663061343366383436666437336366363562373639373465303537313166 +37346265653166306231313635653962363761303733626133633862356161316134326166346362 +32646633363964353937353730623938353061346364373235306132326532616634366330643631 +37353337306261343462373332343133323136363432616165356631356566656134313432363639 +31623066396466383465303262343265623235313261636163376238343861333132356339383663 +36383232383239656635386566666663323762323062636138656265353736323638393933616235 +63346165663930333065653066366532343332366262323662346565333332343532313563393438 +32626231343537313632303137376364626163666462326266646337303262303530323237613365 +38666231646237626238653038363135356531383132366635653163326537633630643063393661 +32323930366436336432633864646565633236616162303439343731306139386463396231313136 +61636434336364303230373432636233343131376163363138666538663763343330646330646465 +66393263313661396266623862393037396330666533643738623966336431633935373863306566 +63356430333232636339376662363463653631323162646666393262363930613166643334313537 +62313463393961336663363338353436366632386461313135653364643937616435363162636235 +39643231333363383531666131313439333331366264656362333439663264396636333263306363 +33363434353331656666363966396135323065363564393835646663643631346530353565326332 +34656431333936663163643238353565326537643839643336653535323432613536633737346332 +66346634613663366630336533633239613238306537376166326231363439333462643534343035 +63643666313765333465333164313332633664383163636238363966363039363662313831353733 +64373435666136303337653333353066643731363433656536666630313464643465313239623462 +39323930343461323037343064653666653738396631613030393034333032666231633936343732 +38396530313734303135303063613765663766303662373562663566303431633937643938313430 +38633061313337383438326134346665303561386431623334616166633036383063323137633239 +35373561353163666262306630353061613861353633616535636236653831373231386337386136 +62303631313538613330353635656562626362663032383236633233343431653237633034316264 +61353839623937366339353865343935313062623965386433633932356466346661393639663135 +65653938363661356562666663326234376330626161663161376135363565663535373562383231 +61333733333365663130313264396130316336656332343934353564653365353863366661666362 +34376161613464653461613830373061323330646130376631363235353935323835643461333065 +36386264653132316364646230313334353639656134396163393136316332613434313536376338 +65383839363432363835653131363963313965346231653137383937623464303439663533636539 +38623430653339353731393764616636376537666366653763346337623535393961313232376434 +36636236303262363737336433653362386633303135336465653764326662646338613537353931 +34336363393737313462646564663761383366316663303530643332326135333962616264643830 +32353162346239636665356339353436333232396635613138303065366534323261623736373633 +38623331663238336661333938383661323939363537356562323533373330336335343063613133 +63373162643738346566303732303531303530316230623432366532633234366262646234303837 +61373733353535343037326164373865313633656238373938396264663537656566643136633535 +65353634333765386562316138633531616437396163366630303931346434336230626138643234 +31666637373464633565326131666234663633376639393662373630383630393336356333366162 +65323630373230313439336565633465363361333661346262313037396131363535633637633530 +38396632393061623534333935366235356136643264363439383731633730306637623437316333 +39383936653031326532656661303361306232393134663231336263313939333233393832666134 +32363931323034366333643066383765386361666266623237623932666532633564323832666264 +39623364626331643063333930666166393533656263653436336265353433303761333861626566 +36633362333331663865366334353730636132643038346661333561363835393031356638393134 +38366565346430383065343532643331303831323566393138653135383338663439393662306563 +34353737376439633837353033626332346632396331643432306339366235616332316634353162 +61323162656666353666623333633238663933646132363338353365336632363937636532666264 +61323838323333353564373635633164383031663434326638653130346334303236326363343435 +35306664333233303965353166346131343136313966366232326535376435346534616431623337 +32353065323638336665613630306232666462613033633032633130633566396266396532393261 +36383831373733353633633963636161646130633763633034356137383038656461343139623430 +31653066386536333633323263666237316461626534623465636536393664643936366434646438 +36333933646263346534316539666132636664383365653939636630333435626532313366356630 +30663035356164376262373036633132636533373065326163313266333262666265616666326132 +36616530316530666639396330373935326438353733386235386664363465343232613236336130 +38333264323462386662393764333364386564303331356534373863343534356433383337353135 +33353961363034363865323331646532333838303135616464616337363935336236333964643632 +63643630343731323331393539613733363033303832323362343761313963366561306464346432 +63313332653037353365323631313230383132333736306338353239346162363931653163313932 +62613333396131323732646161303036623033333763383731306133656237343039313034353030 +34373538376162656266333231336365356562353766386261323566643962623133336465646337 +61373535643133373434633165383538333339346635383735643061343262643535633435396338 +62616234646534396339313636646464386366653235633861373730643361363938376631653563 +39613431343964393933373034363365653239643230363338623234666534343332303236373231 +34313833346263613832326562376563326461333861366139363638306432316438643164623234 +35383338376264306434363739383733313838663964333261333939383364343538396333313136 +63396536613135646235343966303634636636326236356634343930386631633663343134663739 +32313164323539343737663263636365663463313063623139363363383965656333353931623632 +37346161616233396534636563646436363033353839666635343532663965653663653061323934 +30663561353263393634376361373066386530323765343161646364303835666662306562393233 +31393235643536623433646136393732306538646330306163623835313135613762363933643037 +35303666336237373565323262376461393436326665636261323639386262366634336661313565 +39306331396364613939636164626532656438373862303838623438303064623739383639323637 +37386131663465343137383832363737303934633432353438343035623938326435663763656163 +32636337303366333865316131643135363833333562386562633365303266623861306266626330 +64373531346263316364353231383230393737346463303939336163386634313032313733633530 +66616534613237653436643363323237396631393339646534393533316334336364626662663038 +36386438653165383161626230393532656463663238643566303166656238393638343664643163 +62306634633364663166333761386434386635323034306531353562386164633137306462313339 +63333166643136383335346130383436376361373765636438663735393830306631333539343439 +63346464336564313434313538646438393865376562613733393739343239313864666635643832 +34616136613161643933343361633037613266333933363339363130363566623739636532386263 +64383331616161663561613830376430366663303931653534666539663165643061343339383138 +64336261333731393063316162313832633765653665633839613330343062316330623831353331 +62646333373166303538366439663535356661373632636539653333646239663630316138653161 +39376534373862336264393634303339313166383632613564616633396463653731623433323637 +63653433393531376639363037313963366231623161343239643538616534353437653137623738 +39323563633038386462323862636261383031663935353934323563663764343532323338393063 +61323165336530656366316533333432356331316534663131333239373432383830656561393836 +65383263356631323337363963346634633537353131386537303635623834653661393538343366 +65303466373132666536396261636361316365653561633731613539393630323063633761393538 +30356262653562666562643662383430346635326433316138663734303838383635616565326537 +36326330306630313430383538366165643337306262663166306462366139643438323932616635 +64303533373066376263356533376163376339316564316163313335343835663238316337306461 +35393765626338373032306663333337616130326439306164353132666331646635343039653732 +32653662353761656664366335353033643436376231373439323335646562373837306236323635 +39666134306365393762633766313538383635393864353835363366313562343537353163396337 +35376638303361323463313366386162626533323135313934343730396134336365613938643139 +66363435353838666464653833376636333961636235303433656463636132396266326339653566 +31383865323339323962333733323062323264626239653665346232346539363539353539333230 +65653137383831323539356163623465313964653964663234636433396631333165643134383435 +31353132346434393635653833313236393831396664386566613032386534343537306563636631 +36353861663530313534643962366537336139633436323136636530623165303865666435383065 +31653665353833366134386132363162396330353465373462333263393537653839323563373838 +35613166313537353565323766323864656361303165653737356264633634656235666331653634 +63636138656530656264333462613962633434656134353662373165666530623363623834633632 +62313434626131313362333430643432336564613130633366643330346533366633353237666233 +33353137383236383362653361623732356330333833316631343137666164396538323034323165 +66633838326665346531306534613237643938643866303034363137303664366665343634303237 +63646534626338326632303264313737636236393237643935396134656661326435363133653566 +64643562343235326432303532646665363431393063626664626335303438633639323635363766 +32343662343664313139333565326365333630323332646262316535613262353236363537633961 +37306137326139353337396466643932623539326331323736393038373261656665393732353134 +66303065666137336563333164396464653038303530326662613635383563623766353365393162 +31646635303632626233303131303237313438633462376262666463326430323031323165623933 +62613965656661343563383066343530333564626438326262323265326363656530643362326434 +39663337626137333533346434313465393432653266313835343663393936396162356533313034 +34313932363632623363363763376338303131656161326637666436333237633061313537623639 +65333637666432646231343538633865343239613434343839616563656261633562373066643364 +31633166643263393636346539303037666165343131656363633465653566323461623234386130 +62633164333830303633353464613637333031633630386163333531396534376530663330616234 +34356237313430646565346663636138363635623635346561353961316531363038663961343536 +61386532363064396663636236303938393166666439386638633933383633383561663763393062 +61646465326532336236303833353361353638653363376338316163653061616137613864626635 +61636135623139333434336537356663653137336464346565633161666132363562613732313166 +34663964633437393932613534336665366361656535333530613262653564623433393437353835 +32343831323932353163336364343230333962393165666262313736633234643661313837303965 +61623061316462316636366166656634353462343063343064616136643537386562336362373532 +64653631333634616566383637326161663935646266306563313339313339383138633139613136 +66623939666631343466383935613766646631393962633963336263383635383034333761366133 +63333234313731393837616635343634663161393634656165353535323765663331623266343937 +39303562383936323163633165666437383065336631333264646662333464303631386137306531 +66386339663739303230303531616439666137633961623666383935623230353334356432366338 +62633965613539373732653439313334643533383033323837613165653262396462343937626133 +65646432336630613736636233336136633562386233313631306231303132383632386533303734 +64306466323533656632313133633361316163386338303336646130653734343562323362653861 +31383261373432346266386235666261383733346464396163396466333331353634633062343738 +31396438643738303530383131666134366662646164343866383138346465653362663137376262 +35313838663334646235643861636335393038633431643565363632623966633463386532323939 +65393135323930303362373134313266356436323838326665346166346633333936376131313430 +30323361383865343530383536333164313530626363373335353166653066393831383134306464 +62653538373130316266396261356639666436343562383639353839633336613666616366666431 +63346161636134346433623439313635653831353531353536383439383037353534613465626532 +34373538633838646530663764666532643865623334366366323131343032643266376436663231 +37616363363339363734373165353864303365343633636466623734373736633963303839636632 +62663139616137393334346661353438623236326561626639383635343636656131396164343466 +38616233353038316139303739333461666337393631383834613938653166613766623034653839 +64666265383539303163373539616631323733356134663839643162303964633337656564346265 +62396532323139323166383135373637633639316432373738313666386230336133353737626331 +32373532333437343262636135623632636335653632623735306263393562613866653561316131 +65663133396161613131653738643039316533333739636437323966643936346336366365633963 +66333538643737383238343866623235626434346637633164646138336566636535613961666132 +38383932653861613036303562666531383039363031636336663063333662653733323130633966 +39373262363632343438343239666433366534363530333262326666663434373533646635356533 +61613935326664383634623530343636626135336637633837343138313861343462633438326362 +66353938383432326238316131663933326136633731326465346633353962613064323663353134 +32336436646162643934313138643037643333663835646464643863626134663963616230326535 +66323434323536616639633963393537623239613664633130343738663663336538343037386435 +61666332306161663334383736636638386237643230343433313830353734363238326334663266 +63353333666537626139306335323964633635303638356265396265386636613539393561653730 +33323265633035643364636365623566643739323634656461613063643639306539323634343261 +66326333666136306164643166336235313134373035346665653133623239373763653938626365 +32643162313662623935396363633236386561386531376365616662646332376235663334303561 +34653861303630623266333035613631643738353936623636393839343539323334386431396437 +38643338323963363964363332343731643365313835383961313637333038643738653366353663 +30343062303632663562303134326463333636313066343233333132353266313766343734373138 +61396561396635346539333164383964653539326465613362663836636333613462333731346437 +37656162636331363536636433313534613038383130616164623866653436323836323232393862 +66343266633231653734643630303437396134396631366336626663346662313861356362323866 +31646563323066353961366134336339356638363239363138386662376234663764353761396361 +62316434323564373338383464323265303866303561336133376239343636626665663561613366 +61656463643564336437343136646635386533663062623066323664326561643938663330313064 +36323361383230613263653735336361393532303664653332613663613830393864643830666633 +62633737303332623039613838323063343932386136343966663437313163623938656663366236 +36356364323936363864313237353861613962613862396365386339663562623365656132666463 +30666535333930386236323939343563633362333636393334343231663734663965333434336331 +35663138363264323438376138363630643062356631343437303662313864663030613534386334 +62326462316331626230313261633533373964633766643631313736383964393864343961636439 +65633064313938346562376132326362396337353435323362626665383331336631653033333132 +33313832663934326435313162393865623331346132646433646564356131663536356166376132 +61316138373134646236356261316535326135393131306533313861636436663036656530363265 +38393136303263313238356161303830326435336666383133373430653631623063366336326666 +36306161363337303532653637323264356665326130333832303533393463393531323737643362 +62303530646538646566616164336334323239313135353237303263386162363238653964633936 +35393264306635363933646537303462346234656631613261356666653439643164663232373061 +64313132656630353432643231376664376164306163373234326635613339343833633365373331 +66376134383062373461306537386530386431323261663261663939303866343832656433633937 +36616563383133346231376237363431386338363762646534653362393937363564303566356161 +36363331383932383736356561626234383662356461393939643832633365333230626461343735 +39393939316235343764376666356363616335633937346262633735656539343431373736346163 +39646634326463373738323133643232316433373831306637336437353033613836343431633063 +63386565393630616532313038386434633066343764313963316262323236323336316536313362 +34396262303539303837623335313934633130663730326364623935323835663061393134363637 +64313065326239336166313735343962653930656332626364396536396461653537393662386435 +30333638316334373235623337666266376439336163396533373231623535373761666535633933 +63616230383835386463616133306633336262646365396631653230303062653962343530353066 +64326538636234623530313539333834346239626263396365353766363639626537313966663836 +63656437303863346266356561613562663134306465623135626361643736616663646330353231 +34356464393535653163396264366164353435623031646562383263636132363533 diff --git a/keycloak/scripts/ansible/inventories/local/group_vars/local-es.yml b/keycloak/scripts/ansible/inventories/local/group_vars/local-es.yml new file mode 100644 index 00000000..947c47f1 --- /dev/null +++ b/keycloak/scripts/ansible/inventories/local/group_vars/local-es.yml @@ -0,0 +1,6 @@ +es_heap_size: 1500m +es_etc_cluster_name: sunbird-dev +es_etc_discovery_zen_minimum_master_nodes: 2 +es_snapshot_host: "{{ groups['es-backup'][0] }}" +es_restore_host: "{{ groups['es-backup'][0] }}" +snapshot_base_path: application diff --git a/keycloak/scripts/ansible/inventories/local/group_vars/local-log-es.yml b/keycloak/scripts/ansible/inventories/local/group_vars/local-log-es.yml new file mode 100644 index 00000000..a62feed5 --- /dev/null +++ b/keycloak/scripts/ansible/inventories/local/group_vars/local-log-es.yml @@ -0,0 +1,6 @@ +es_heap_size: 1500m +es_etc_cluster_name: sunbird-log-dev +es_snapshot_host: "{{ groups['log-es-backup'][0] }}" +es_restore_host: "{{ groups['log-es-backup'][0] }}" +snapshot_base_path: logger +es_host: "{{ groups['log-es'][0] }}" diff --git a/keycloak/scripts/ansible/inventories/local/group_vars/local-postgresql-master.yml b/keycloak/scripts/ansible/inventories/local/group_vars/local-postgresql-master.yml new file mode 100644 index 00000000..804b9da3 --- /dev/null +++ b/keycloak/scripts/ansible/inventories/local/group_vars/local-postgresql-master.yml @@ -0,0 +1,25 @@ +# postgresql_users should only be created in master and replicated to slave +postgresql_databases: + - name: "{{kong_postgres_database}}" + - name: "{{keycloak_postgres_database}}" + - name: "{{application_postgres_database}}" + +postgresql_users: + - name: "{{ postgres_replication_user_name }}" + password: "{{ postgres_replication_user_password }}" + role_attr_flags: REPLICATION + - name: "{{ postgres_exporter_user }}" + password: "{{ postgres_exporter_password }}" + role_attr_flags: SUPERUSER + - name: "{{kong_postgres_user}}" + password: "{{kong_postgres_password}}" + db: "{{kong_postgres_database}}" + priv: "ALL" + - name: "{{keycloak_postgres_user}}" + password: "{{keycloak_postgres_password}}" + db: "{{keycloak_postgres_database}}" + priv: "ALL" + - name: "{{application_postgres_user}}" + password: "{{application_postgres_password}}" + db: "{{application_postgres_database}}" + priv: "ALL" diff --git a/keycloak/scripts/ansible/inventories/local/group_vars/local.yml b/keycloak/scripts/ansible/inventories/local/group_vars/local.yml new file mode 100644 index 00000000..9c5173b7 --- /dev/null +++ b/keycloak/scripts/ansible/inventories/local/group_vars/local.yml @@ -0,0 +1,291 @@ +# ENVIRONMENT CONFIGURATION +env: local #Name of the environment, e.g. dev, staging or production. +proxy_server_name: dev.open-sunbird.org #Domain on which the portal will be accessed. e.g. staging.{implementation-name}.org +proxy_site_key: "{{ vault_proxy_site_key }}" #SSL certificate's site.key file contents. More details in this wiki: https://github.com/project-sunbird/sunbird-commons/wiki/Updating-SSL-certificates-in-Sunbird-Proxy-service +proxy_site_crt: "{{ vault_proxy_site_crt }}" #SSL certificate's site.crt file contents. More details in this wiki: https://github.com/project-sunbird/sunbird-commons/wiki/Updating-SSL-certificates-in-Sunbird-Proxy-service +ansible_connection: "local" + +# DB CONFIGURATION + +## Below passwords are used by DB install scripts when creating databases. Please use strong passwords. +application_postgres_password: "{{vault_application_postgres_password}}" #Password for Application database. +keycloak_postgres_password: "{{vault_keycloak_postgres_password}}" #Password for Keycloak (Authentication service) database. +kong_postgres_password: "{{ vault_kong_postgres_password }}" #Password for Kong (API Manager) database. + +## Postgres configuration +swarm_address_space: 10.0.0.0/16 #Application server address space (e.g. 10.3.0.0/24), also the agentpublicSubnet if using Azure scripts provided +keycloak_address_space: 10.113.0.0/24 +postgres_address_space: 10.10.0.0/24 + +## Cassandra configuration +cassandra_server_private_ip: 10.10.4.4 #Private IP of cassandra server +keystore_password: "{{vault_keystore_password}}" #Password to use for encrypting cassandra keystore. Use a strong password. +truststore_password: "{{vault_truststore_password}}" #Password to use for encrypting cassandra truststore. Use a strong password. + +# APPLICATION CONFIGURATION + +kong_host: api-manager_kong + +## DB address +application_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server +keycloak_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server +kong_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server +sunbird_mongo_ip: 10.10.2.5 #Private IP of Mongo DB server +sunbird_cassandra_host: 10.10.4.4 #Private IP of Cassandra server +sunbird_es_host: 10.10.3.7,10.10.3.8,10.10.3.6 #Private IP of Elastic Search server. If ES cluster has multiple nodes then add all nodes by separating them with comma. e.g. 10.2.0.1,10.2.0.2,10.2.0.3 + +## Application server configurations +sunbird_ekstep_api_base_url: https://qa.ekstep.in/api #API base URL of the Ekstep environment. Use `https://qa.ekstep.in/api` for non-prod deployments, and use `https://api.ekstep.in/` for prod deployment. +sunbird_ekstep_proxy_base_url: https://qa.ekstep.in #Base URL of the Ekstep environment. Use `https://qa.ekstep.in/` for non-prod deployments, and `https://community.ekstep.in/` for prod deployment. +sunbird_env: qa #Ekstep environment to connect to. Use `qa` for non-prod deployments, and `prod` for prod deployment. +sunbird_mail_server_host: "{{ mail_server_host }}" #SMTP server IP. Could be ignored if not mails are to be sent. +sunbird_mail_server_port: "{{ mail_server_port }}" #SMTP port. Could be ignored if not mails are to be sent. +sunbird_mail_server_username: "{{ mail_server_username }}" #SMTP username. Could be ignored if not mails are to be sent. +sunbird_mail_server_password: "{{ mail_server_password }}" #SMTP server pasword. Could be ignored if not mails are to be sent. +sunbird_mail_server_from_email: support-dev@open-sunbird.org #Email ID that should be as from address in mails + +## Keycloak (auth server) login details +sunbird_sso_username: "{{ vault_sunbird_sso_username }}" +sunbird_sso_password: "{{ vault_sunbird_sso_password }}" +keycloak_admin_username: admin +keycloak_admin_initial_password: "{{ vault_keycloak_admin_password }}" +keycloak_tar_path: keycloak.tar.gz +keycloak_theme_path: artifacts/sunbird + + +## Content Repo configuration +sunbird_api_auth_token: "{{ vault_sunbird_api_auth_token }}" #Authorization key (JWT) to access Sunbird APIs. This will be in the output of deploy-apis.sh script, extracting it out is documented in the deployment wiki. +sunbird_ekstep_api_key: "{{ vault_sunbird_ekstep_api_key }}" #Authorization key (JWT) to access Ekstep APIs. Steps to generate this are documented on https://github.com/project-sunbird/sunbird-commons/wiki/Obtaining-API-token-for-accessing-ekstep-APIs +sunbird_trampoline_secret: "{{ vault_sunbird_trampoline_secret }}" + +# ADVANCED CONFIGURATIONS + +cassandra_listen_address: "{{ cassandra_server_private_ip }}" +cassandra_seeds: "{{ cassandra_server_private_ip }}" +cassandra_broadcast_rpc_address: "{{ cassandra_server_private_ip }}" +cassandra_broadcast_address: "{{ cassandra_server_private_ip }}" +cassandra_listen_interface: '' +cassandra_log_dir: '/var/log/cassandra' +cassandra_root_dir: '/etc/cassandra' +cassandra_version: '3.9' +cassandra_port: 9042 +cassandra_rpc_address: 0.0.0.0 +cassandra_restore_dir: /home/deployer/ +cassandra_backup_azure_container_name: cassandra-backup +cassandra_backup_azure_storage_account_name: "{{ backup_storage_name }}" +cassandra_backup_azure_storage_access_key: "{{backup_storage_key}}" +cassandra_backup_dir: /data/cassandra/backup + +keycloak_url: http://10.113.0.7 + +keycloak_auth_server_url: "https://{{ proxy_server_name }}/auth" +keycloak_realm: sunbird +sunbird_content_player_url: "https://{{ proxy_server_name }}/api/" +sunbird_learner_player_url: "https://{{ proxy_server_name }}/api/" +sunbird_sso_client_id: admin-cli +sunbird_mongo_port: 27017 +sunbird_mongodb_port: 27017 +sunbird_portal_realm: sunbird +sunbird_portal_auth_server_client: portal +sunbird_trampoline_client_id: trampoline +sunbird_appid: sunbird_portal +sunbird_default_tenant: sunbird +sunbird_echo_api_url: "https://{{ proxy_server_name }}/api/echo/" +sunbird_pg_host: "{{ application_postgres_host }}" +sunbird_pg_port: 5432 +sunbird_pg_db: quartz +sunbird_pg_user: quartz +sunbird_pg_password: "{{ application_postgres_password }}" +sunbird_installation: sunbird +sunbird_account_name: sunbirddev +sunbird_account_key: "{{ vault_sunbird_account_key }}" +sunbird_sunbird_quartz_mode: cluster +sunbird_encryption_mode: local +sunbird_cassandra_urls: "{{ cassandra_server_private_ip }}:{{ cassandra_port }}" +sunbird_session_store_type: cassandra +sunbird_keycloak_client_id: 'portal' +sunbird_keycloak_public: true +sunbird_cache_store: "memory" +sunbird_cache_ttl: 1800 +sunbird_portal_title_name: portal +sunbird_web_url: "https://{{ proxy_server_name }}" +sunbird_sso_publickey: "{{vault_sunbird_sso_publickey}}" +sunbird_azure_storage_account: "{{vault_sunbird_azure_storage_account}}" +sunbird_azure_storage_key: "{{vault_sunbird_azure_storage_key}}" +sunbird_container_name: portal +sunbird_cdn_url: https://dev-sunbird-temp.azureedge.net/{{sunbird_container_name}} +mongo_backup_dir: /home/deployer/mongo-backups +sunbird_background_actor_host: actor-service +sunbird_actor_system_name: BackGroundRemoteMiddlewareActorSystem +sunbird_app_url: +sunbird_fcm_account_key: +sunbird_env_logo_url: + + +#player_tenant_dir: +sunbird_dataservice_url: https://{{ proxy_server_name }}/api/ +project: sunbird +application_postgres_database: quartz +application_postgres_user: quartz +keycloak_postgres_database: keycloak +keycloak_postgres_user: keycloak + + +## Cassandra download URI +cassandra_repo: 'deb http://www.apache.org/dist/cassandra/debian 39x main' +cassandra_repo_key: 'https://www.apache.org/dist/cassandra/KEYS' + +#API Manager +kong_postgres_port: 5432 +kong_postgres_user: api_manager_dev +kong_postgres_database: api_manager_dev + +es_curl_host: 10.10.3.7 + +## Logging details +syslog: + host: 172.16.0.5 + port: 51415 + +## PostgreSQL config +postgres_replication_user_name: replication +postgres_replication_user_password: "{{ vault_postgres_replication_user_password }}" + +postgresql_hba_entries: + - { type: local, database: all, user: postgres, auth_method: peer } + - { type: local, database: all, user: all, auth_method: peer } + - { type: host, database: all, user: all, address: '127.0.0.1/32', auth_method: md5 } + - { type: host, database: all, user: all, address: '::1/128', auth_method: md5 } + - { type: host, database: all, user: "{{ postgres_exporter_user }}", address: '{{ swarm_address_space }}', auth_method: md5 } + - { type: host, database: replication, user: "{{ postgres_replication_user_name }}", address: '{{ postgres_address_space }}', auth_method: md5 } + - { type: host, database: all, user: all, address: '{{ swarm_address_space }}', auth_method: md5 } + - { type: host, database: all, user: all, address: '{{ keycloak_address_space }}', auth_method: md5 } + +ansible_vault_password: "{{ vault_ansible_vault_password }}" +docker_hub_password: "{{ vault_docker_hub_password }}" +jenkins_slave_jenkins_username: "{{ vault_jenkins_slave_jenkins_username }}" +jenkins_slave_jenkins_password: "{{ vault_jenkins_slave_jenkins_password }}" +ops_private_key: "{{ vault_ops_private_key }}" +deployer_ssh_key: "{{ vault_deployer_ssh_key }}" +proxy_prometheus_admin_creds: "{{ vault_proxy_prometheus_admin_creds }}" + +# ADDITIONAL CONFIGURATION +backup_storage_name: "sunbirdbackupsdev" +prometheus_storage_retention_time: 72h0m0s +curl_host: dev.open-sunbird.org + +mail_server_host: smtp.sendgrid.net +mail_server_port: 587 +mail_server_username: azure_886153b1defb14e38ecc9c7301625aba@azure.com +mail_server_password: "{{ vault_mail_server_password }}" + +logger_es_host: "{{ groups['dev-log-es'][0] }}" +logger_es_port: 9200 + +kibana_oauth_redirect_url: https://dev.open-sunbird.org/oauth2/callback +monitor_alerts_slack_channel: sunbird-dev-alert +keycloak: True + +api__host: dev.open-sunbird.org + +proxy_replicas: 2 +proxy_reservation_memory: 32M +proxy_limit_memory: 128M +kong_replicas: 3 +kong_reservation_memory: 64M +kong_limit_memory: 256M +echo_service_replicas: 2 +echo_service_reservation_memory: 8M +echo_service_limit_memory: 16M +adminutil_replicas: 2 +adminutil_reservation_memory: 512M +adminutil_limit_memory: 1024M + +actor_replicas: 2 +actor_reservation_memory: 500M +actor_limit_memory: 1024M + +learner_replicas: 2 +learner_reservation_memory: 1500M +learner_limit_memory: 1500M + +player_replicas: 2 +player_reservation_memory: 256M +player_limit_memory: 512M + +content_replicas: 2 +content_reservation_memory: 64M +content_limit_memory: 256M + +keycloak1_replicas: 1 +keycloak1_reservation_memory: 768M +keycloak1_limit_memory: 1024M + +keycloak2_replicas: 1 +keycloak2_reservation_memory: 768M +keycloak2_limit_memory: 1024M + +monitor_es_host: "{{ groups['es'][0] }}" +alertmanager_host: "{{ groups['swarm-agent-for-alertmanager'][0] }}" +prometheus_host: "{{ groups['swarm-agent-for-prometheus'][0] }}" + +swarm_load_balancer: 10.0.0.100 +filebeat_logtsash_host: "{{ swarm_load_balancer }}" + +expected_minimum_logs_per_minute: 30 + +proxy_prometheus: true + +enable_scraping_docker_metrics: true +enable_mongodb_availability_check: false + +postgres_exporter_postgres_port: 5432 +postgres_exporter_user: postgres_exporter +postgres_exporter_password: "{{ vault_postgres_exporter_password }}" +sunbird_learner_service_base_url: https://dev.open-sunbird.org/api +kong_admin_api_url: http://api-manager_kong:8001 + +postgresql_backup_azure_storage_account_name: "{{ backup_storage_name }}" +postgresql_backup_azure_storage_access_key: "{{ backup_storage_key }}" +postgresql_restore_azure_storage_account_name: "{{ backup_storage_name }}" +postgresql_restore_azure_storage_access_key: "{{ backup_storage_key }}" + +grafana_url: https://dev.open-sunbird.org/grafana +grafana_editor_username: editor + +app_alerts_mailing_list: "rayulu@ilimi.in, harishg@ilimi.in, manzarul.haque@tarento.com,{{devops_alerts_mailing_list}}" +devops_alerts_mailing_list: "deepakn@sahajsoft.com, manojv@ilimi.in, shashankt@sahajsoft.com, mathew.pallan@tarento.com, bineesh.k@riflexions.com" +site_alerts_mailing_list: "shailesh@ekstepplus.org, ashwin@tekditechnologies.com, lakhan_m@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" +keycloak_alerts_mailing_list: "ashwin@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" +api_manager_alerts_mailing_list: "ashwin@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" + +jenkins_url: http://10.20.0.4:8080/jenkins + +kibana_oauth_authenticated_email_domains: + - ekstep.org + - sahajsoft.com + - ilimi.in + - tarento.com + +kibana_oauth_authenticated_email_ids: + - shailesh@ekstepplus.org + - vijetha.nayak@riflexions.com + - bineesh.k@riflexions.com + - arvind.yadav@compassitesinc.com + +monitor_alerts_mail_from_email: alerts@open-sunbird.org +monitor_alerts_mail_server_host: "{{ mail_server_host }}" +monitor_alerts_mail_server_port: "{{ mail_server_port }}" +monitor_alerts_mail_server_username: "{{ mail_server_username }}" +monitor_alerts_mail_server_password: "{{ mail_server_password }}" +env_short_name: dev + +# keycloak sms provider +keycloak_build_src: "keycloak_build" +keycloak_ver: "keycloak-3.2.0.Final" +keycloak_sms_provider_build: "keycloak-email-phone-autthenticator-1.0-SNAPSHOT.jar" +keycloak_sms_provider_templates_src: "templates.tar.gz" +keycloak_sms_provider_templates_dest: "/opt/keycloak/themes/sunbird/login" +keycloak_ekstep_sunbird_login_theme_file: "login.tar.gz" +keycloak_ekstep_sunbird_login_theme_dest: "/opt/keycloak/themes/sunbird/login" +keycloak_postgresql: "postgresql-9.4.1212.jar" diff --git a/keycloak/scripts/ansible/inventories/local/group_vars/localhost.yml b/keycloak/scripts/ansible/inventories/local/group_vars/localhost.yml new file mode 100644 index 00000000..9c5173b7 --- /dev/null +++ b/keycloak/scripts/ansible/inventories/local/group_vars/localhost.yml @@ -0,0 +1,291 @@ +# ENVIRONMENT CONFIGURATION +env: local #Name of the environment, e.g. dev, staging or production. +proxy_server_name: dev.open-sunbird.org #Domain on which the portal will be accessed. e.g. staging.{implementation-name}.org +proxy_site_key: "{{ vault_proxy_site_key }}" #SSL certificate's site.key file contents. More details in this wiki: https://github.com/project-sunbird/sunbird-commons/wiki/Updating-SSL-certificates-in-Sunbird-Proxy-service +proxy_site_crt: "{{ vault_proxy_site_crt }}" #SSL certificate's site.crt file contents. More details in this wiki: https://github.com/project-sunbird/sunbird-commons/wiki/Updating-SSL-certificates-in-Sunbird-Proxy-service +ansible_connection: "local" + +# DB CONFIGURATION + +## Below passwords are used by DB install scripts when creating databases. Please use strong passwords. +application_postgres_password: "{{vault_application_postgres_password}}" #Password for Application database. +keycloak_postgres_password: "{{vault_keycloak_postgres_password}}" #Password for Keycloak (Authentication service) database. +kong_postgres_password: "{{ vault_kong_postgres_password }}" #Password for Kong (API Manager) database. + +## Postgres configuration +swarm_address_space: 10.0.0.0/16 #Application server address space (e.g. 10.3.0.0/24), also the agentpublicSubnet if using Azure scripts provided +keycloak_address_space: 10.113.0.0/24 +postgres_address_space: 10.10.0.0/24 + +## Cassandra configuration +cassandra_server_private_ip: 10.10.4.4 #Private IP of cassandra server +keystore_password: "{{vault_keystore_password}}" #Password to use for encrypting cassandra keystore. Use a strong password. +truststore_password: "{{vault_truststore_password}}" #Password to use for encrypting cassandra truststore. Use a strong password. + +# APPLICATION CONFIGURATION + +kong_host: api-manager_kong + +## DB address +application_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server +keycloak_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server +kong_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server +sunbird_mongo_ip: 10.10.2.5 #Private IP of Mongo DB server +sunbird_cassandra_host: 10.10.4.4 #Private IP of Cassandra server +sunbird_es_host: 10.10.3.7,10.10.3.8,10.10.3.6 #Private IP of Elastic Search server. If ES cluster has multiple nodes then add all nodes by separating them with comma. e.g. 10.2.0.1,10.2.0.2,10.2.0.3 + +## Application server configurations +sunbird_ekstep_api_base_url: https://qa.ekstep.in/api #API base URL of the Ekstep environment. Use `https://qa.ekstep.in/api` for non-prod deployments, and use `https://api.ekstep.in/` for prod deployment. +sunbird_ekstep_proxy_base_url: https://qa.ekstep.in #Base URL of the Ekstep environment. Use `https://qa.ekstep.in/` for non-prod deployments, and `https://community.ekstep.in/` for prod deployment. +sunbird_env: qa #Ekstep environment to connect to. Use `qa` for non-prod deployments, and `prod` for prod deployment. +sunbird_mail_server_host: "{{ mail_server_host }}" #SMTP server IP. Could be ignored if not mails are to be sent. +sunbird_mail_server_port: "{{ mail_server_port }}" #SMTP port. Could be ignored if not mails are to be sent. +sunbird_mail_server_username: "{{ mail_server_username }}" #SMTP username. Could be ignored if not mails are to be sent. +sunbird_mail_server_password: "{{ mail_server_password }}" #SMTP server pasword. Could be ignored if not mails are to be sent. +sunbird_mail_server_from_email: support-dev@open-sunbird.org #Email ID that should be as from address in mails + +## Keycloak (auth server) login details +sunbird_sso_username: "{{ vault_sunbird_sso_username }}" +sunbird_sso_password: "{{ vault_sunbird_sso_password }}" +keycloak_admin_username: admin +keycloak_admin_initial_password: "{{ vault_keycloak_admin_password }}" +keycloak_tar_path: keycloak.tar.gz +keycloak_theme_path: artifacts/sunbird + + +## Content Repo configuration +sunbird_api_auth_token: "{{ vault_sunbird_api_auth_token }}" #Authorization key (JWT) to access Sunbird APIs. This will be in the output of deploy-apis.sh script, extracting it out is documented in the deployment wiki. +sunbird_ekstep_api_key: "{{ vault_sunbird_ekstep_api_key }}" #Authorization key (JWT) to access Ekstep APIs. Steps to generate this are documented on https://github.com/project-sunbird/sunbird-commons/wiki/Obtaining-API-token-for-accessing-ekstep-APIs +sunbird_trampoline_secret: "{{ vault_sunbird_trampoline_secret }}" + +# ADVANCED CONFIGURATIONS + +cassandra_listen_address: "{{ cassandra_server_private_ip }}" +cassandra_seeds: "{{ cassandra_server_private_ip }}" +cassandra_broadcast_rpc_address: "{{ cassandra_server_private_ip }}" +cassandra_broadcast_address: "{{ cassandra_server_private_ip }}" +cassandra_listen_interface: '' +cassandra_log_dir: '/var/log/cassandra' +cassandra_root_dir: '/etc/cassandra' +cassandra_version: '3.9' +cassandra_port: 9042 +cassandra_rpc_address: 0.0.0.0 +cassandra_restore_dir: /home/deployer/ +cassandra_backup_azure_container_name: cassandra-backup +cassandra_backup_azure_storage_account_name: "{{ backup_storage_name }}" +cassandra_backup_azure_storage_access_key: "{{backup_storage_key}}" +cassandra_backup_dir: /data/cassandra/backup + +keycloak_url: http://10.113.0.7 + +keycloak_auth_server_url: "https://{{ proxy_server_name }}/auth" +keycloak_realm: sunbird +sunbird_content_player_url: "https://{{ proxy_server_name }}/api/" +sunbird_learner_player_url: "https://{{ proxy_server_name }}/api/" +sunbird_sso_client_id: admin-cli +sunbird_mongo_port: 27017 +sunbird_mongodb_port: 27017 +sunbird_portal_realm: sunbird +sunbird_portal_auth_server_client: portal +sunbird_trampoline_client_id: trampoline +sunbird_appid: sunbird_portal +sunbird_default_tenant: sunbird +sunbird_echo_api_url: "https://{{ proxy_server_name }}/api/echo/" +sunbird_pg_host: "{{ application_postgres_host }}" +sunbird_pg_port: 5432 +sunbird_pg_db: quartz +sunbird_pg_user: quartz +sunbird_pg_password: "{{ application_postgres_password }}" +sunbird_installation: sunbird +sunbird_account_name: sunbirddev +sunbird_account_key: "{{ vault_sunbird_account_key }}" +sunbird_sunbird_quartz_mode: cluster +sunbird_encryption_mode: local +sunbird_cassandra_urls: "{{ cassandra_server_private_ip }}:{{ cassandra_port }}" +sunbird_session_store_type: cassandra +sunbird_keycloak_client_id: 'portal' +sunbird_keycloak_public: true +sunbird_cache_store: "memory" +sunbird_cache_ttl: 1800 +sunbird_portal_title_name: portal +sunbird_web_url: "https://{{ proxy_server_name }}" +sunbird_sso_publickey: "{{vault_sunbird_sso_publickey}}" +sunbird_azure_storage_account: "{{vault_sunbird_azure_storage_account}}" +sunbird_azure_storage_key: "{{vault_sunbird_azure_storage_key}}" +sunbird_container_name: portal +sunbird_cdn_url: https://dev-sunbird-temp.azureedge.net/{{sunbird_container_name}} +mongo_backup_dir: /home/deployer/mongo-backups +sunbird_background_actor_host: actor-service +sunbird_actor_system_name: BackGroundRemoteMiddlewareActorSystem +sunbird_app_url: +sunbird_fcm_account_key: +sunbird_env_logo_url: + + +#player_tenant_dir: +sunbird_dataservice_url: https://{{ proxy_server_name }}/api/ +project: sunbird +application_postgres_database: quartz +application_postgres_user: quartz +keycloak_postgres_database: keycloak +keycloak_postgres_user: keycloak + + +## Cassandra download URI +cassandra_repo: 'deb http://www.apache.org/dist/cassandra/debian 39x main' +cassandra_repo_key: 'https://www.apache.org/dist/cassandra/KEYS' + +#API Manager +kong_postgres_port: 5432 +kong_postgres_user: api_manager_dev +kong_postgres_database: api_manager_dev + +es_curl_host: 10.10.3.7 + +## Logging details +syslog: + host: 172.16.0.5 + port: 51415 + +## PostgreSQL config +postgres_replication_user_name: replication +postgres_replication_user_password: "{{ vault_postgres_replication_user_password }}" + +postgresql_hba_entries: + - { type: local, database: all, user: postgres, auth_method: peer } + - { type: local, database: all, user: all, auth_method: peer } + - { type: host, database: all, user: all, address: '127.0.0.1/32', auth_method: md5 } + - { type: host, database: all, user: all, address: '::1/128', auth_method: md5 } + - { type: host, database: all, user: "{{ postgres_exporter_user }}", address: '{{ swarm_address_space }}', auth_method: md5 } + - { type: host, database: replication, user: "{{ postgres_replication_user_name }}", address: '{{ postgres_address_space }}', auth_method: md5 } + - { type: host, database: all, user: all, address: '{{ swarm_address_space }}', auth_method: md5 } + - { type: host, database: all, user: all, address: '{{ keycloak_address_space }}', auth_method: md5 } + +ansible_vault_password: "{{ vault_ansible_vault_password }}" +docker_hub_password: "{{ vault_docker_hub_password }}" +jenkins_slave_jenkins_username: "{{ vault_jenkins_slave_jenkins_username }}" +jenkins_slave_jenkins_password: "{{ vault_jenkins_slave_jenkins_password }}" +ops_private_key: "{{ vault_ops_private_key }}" +deployer_ssh_key: "{{ vault_deployer_ssh_key }}" +proxy_prometheus_admin_creds: "{{ vault_proxy_prometheus_admin_creds }}" + +# ADDITIONAL CONFIGURATION +backup_storage_name: "sunbirdbackupsdev" +prometheus_storage_retention_time: 72h0m0s +curl_host: dev.open-sunbird.org + +mail_server_host: smtp.sendgrid.net +mail_server_port: 587 +mail_server_username: azure_886153b1defb14e38ecc9c7301625aba@azure.com +mail_server_password: "{{ vault_mail_server_password }}" + +logger_es_host: "{{ groups['dev-log-es'][0] }}" +logger_es_port: 9200 + +kibana_oauth_redirect_url: https://dev.open-sunbird.org/oauth2/callback +monitor_alerts_slack_channel: sunbird-dev-alert +keycloak: True + +api__host: dev.open-sunbird.org + +proxy_replicas: 2 +proxy_reservation_memory: 32M +proxy_limit_memory: 128M +kong_replicas: 3 +kong_reservation_memory: 64M +kong_limit_memory: 256M +echo_service_replicas: 2 +echo_service_reservation_memory: 8M +echo_service_limit_memory: 16M +adminutil_replicas: 2 +adminutil_reservation_memory: 512M +adminutil_limit_memory: 1024M + +actor_replicas: 2 +actor_reservation_memory: 500M +actor_limit_memory: 1024M + +learner_replicas: 2 +learner_reservation_memory: 1500M +learner_limit_memory: 1500M + +player_replicas: 2 +player_reservation_memory: 256M +player_limit_memory: 512M + +content_replicas: 2 +content_reservation_memory: 64M +content_limit_memory: 256M + +keycloak1_replicas: 1 +keycloak1_reservation_memory: 768M +keycloak1_limit_memory: 1024M + +keycloak2_replicas: 1 +keycloak2_reservation_memory: 768M +keycloak2_limit_memory: 1024M + +monitor_es_host: "{{ groups['es'][0] }}" +alertmanager_host: "{{ groups['swarm-agent-for-alertmanager'][0] }}" +prometheus_host: "{{ groups['swarm-agent-for-prometheus'][0] }}" + +swarm_load_balancer: 10.0.0.100 +filebeat_logtsash_host: "{{ swarm_load_balancer }}" + +expected_minimum_logs_per_minute: 30 + +proxy_prometheus: true + +enable_scraping_docker_metrics: true +enable_mongodb_availability_check: false + +postgres_exporter_postgres_port: 5432 +postgres_exporter_user: postgres_exporter +postgres_exporter_password: "{{ vault_postgres_exporter_password }}" +sunbird_learner_service_base_url: https://dev.open-sunbird.org/api +kong_admin_api_url: http://api-manager_kong:8001 + +postgresql_backup_azure_storage_account_name: "{{ backup_storage_name }}" +postgresql_backup_azure_storage_access_key: "{{ backup_storage_key }}" +postgresql_restore_azure_storage_account_name: "{{ backup_storage_name }}" +postgresql_restore_azure_storage_access_key: "{{ backup_storage_key }}" + +grafana_url: https://dev.open-sunbird.org/grafana +grafana_editor_username: editor + +app_alerts_mailing_list: "rayulu@ilimi.in, harishg@ilimi.in, manzarul.haque@tarento.com,{{devops_alerts_mailing_list}}" +devops_alerts_mailing_list: "deepakn@sahajsoft.com, manojv@ilimi.in, shashankt@sahajsoft.com, mathew.pallan@tarento.com, bineesh.k@riflexions.com" +site_alerts_mailing_list: "shailesh@ekstepplus.org, ashwin@tekditechnologies.com, lakhan_m@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" +keycloak_alerts_mailing_list: "ashwin@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" +api_manager_alerts_mailing_list: "ashwin@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" + +jenkins_url: http://10.20.0.4:8080/jenkins + +kibana_oauth_authenticated_email_domains: + - ekstep.org + - sahajsoft.com + - ilimi.in + - tarento.com + +kibana_oauth_authenticated_email_ids: + - shailesh@ekstepplus.org + - vijetha.nayak@riflexions.com + - bineesh.k@riflexions.com + - arvind.yadav@compassitesinc.com + +monitor_alerts_mail_from_email: alerts@open-sunbird.org +monitor_alerts_mail_server_host: "{{ mail_server_host }}" +monitor_alerts_mail_server_port: "{{ mail_server_port }}" +monitor_alerts_mail_server_username: "{{ mail_server_username }}" +monitor_alerts_mail_server_password: "{{ mail_server_password }}" +env_short_name: dev + +# keycloak sms provider +keycloak_build_src: "keycloak_build" +keycloak_ver: "keycloak-3.2.0.Final" +keycloak_sms_provider_build: "keycloak-email-phone-autthenticator-1.0-SNAPSHOT.jar" +keycloak_sms_provider_templates_src: "templates.tar.gz" +keycloak_sms_provider_templates_dest: "/opt/keycloak/themes/sunbird/login" +keycloak_ekstep_sunbird_login_theme_file: "login.tar.gz" +keycloak_ekstep_sunbird_login_theme_dest: "/opt/keycloak/themes/sunbird/login" +keycloak_postgresql: "postgresql-9.4.1212.jar" diff --git a/keycloak/scripts/ansible/inventories/local/hosts b/keycloak/scripts/ansible/inventories/local/hosts new file mode 100644 index 00000000..74af6e13 --- /dev/null +++ b/keycloak/scripts/ansible/inventories/local/hosts @@ -0,0 +1,166 @@ +[dev-postgresql-1] +10.10.0.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-postgresql-master:children] +dev-postgresql-1 + +[dev-postgresql-slave:children] + + +[postgresql-master:children] +dev-postgresql-master + +[postgresql-slave:children] +dev-postgresql-slave + +[postgresql-backup:children] +postgresql-master + +[postgresql-restore:children] +postgresql-master + +[dev-keycloak-1] +10.113.0.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-keycloak-2] +10.113.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + + +[dev-log-es-1] +10.10.3.10 ansible_ssh_user=deployer node_name=dev-log-es-1 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-es-1] +10.10.3.7 ansible_ssh_user=deployer es_instance_name=dev-es-1 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-es-2] +10.10.3.8 ansible_ssh_user=deployer es_instance_name=dev-es-2 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-es-3] +10.10.3.6 ansible_ssh_user=deployer es_instance_name=dev-es-3 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-cassandra-1] +10.10.4.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-swarm-bootstrap-manager] +172.16.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-swarm-manager] +172.16.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-keycloak1] +10.113.0.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-keycloak2] +10.113.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[keycloak:children] +dev-keycloak1 +dev-keycloak2 + +[swarm-agent-docker-prune] +localhost ansible_connection=local + +[dev-kong-api] +localhost ansible_connection=local + +[kong-api:children] +dev-kong-api + +[dev-grafana-dashboards-export] +localhost ansible_connection=local + +[grafana-dashboards-export:children] +dev-grafana-dashboards-export + +[dev-grafana-dashboards-import] +localhost ansible_connection=local + +[grafana-dashboards-import:children] +dev-grafana-dashboards-import + +[swarm-bootstrap-manager:children] +dev-swarm-bootstrap-manager + +[swarm-manager:children] +dev-swarm-manager + + +[dev-es:children] +dev-es-1 +dev-es-2 +dev-es-3 + +[dev-log-es:children] +dev-log-es-1 + +[es:children] +dev-es + +[es-backup:children] +dev-es-1 + +[log-es-backup:children] +dev-log-es-1 + +[log-es:children] +dev-log-es + +[cassandra:children] +dev-cassandra-1 + +[dev-keycloak:children] +dev-keycloak-1 +dev-keycloak-2 + +[swarm-agent-for-prometheus] +10.0.0.9 ansible_ssh_user=ops ansible_ssh_private_key_file=/run/secrets/ops-private-key + +[swarm-agent-for-grafana] +10.0.0.12 ansible_ssh_user=ops ansible_ssh_private_key_file=/run/secrets/ops-private-key + +[swarm-agent-for-alertmanager] +10.0.0.9 ansible_ssh_user=ops ansible_ssh_private_key_file=/run/secrets/ops-private-key + +[local] +localhost ansible_connection=local + +[localhost] +localhost ansible_connection=local + +[non-swarm-nodes:children] +postgresql-master +postgresql-slave +postgresql-backup +postgresql-restore +es +cassandra +log-es +keycloak +local +localhost + +[local-task-runners:children] +kong-api +grafana-dashboards-export +grafana-dashboards-import + +[swarm-nodes:children] +swarm-manager +swarm-bootstrap-manager +swarm-agent-for-prometheus +swarm-agent-for-grafana +swarm-agent-for-alertmanager + +[node-exporter:children] +non-swarm-nodes +swarm-manager + +[log-forwarder:children] +non-swarm-nodes +swarm-manager + +[dev:children] +non-swarm-nodes +swarm-nodes +local-task-runners + diff --git a/keycloak/scripts/ansible/inventories/local/secrets.yml b/keycloak/scripts/ansible/inventories/local/secrets.yml new file mode 100644 index 00000000..be20efff --- /dev/null +++ b/keycloak/scripts/ansible/inventories/local/secrets.yml @@ -0,0 +1,806 @@ +$ANSIBLE_VAULT;1.1;AES256 +36303132313138313463326365646333383038393233383933383866373566626136386162613065 +6439656630616138356461336236653930663938666164320a346139373336333761666333336139 +37626139313933356164653232666537663232336334363962323430636139373638313636326531 +6132643336643034620a373532363830633066633137316261616365646239326132333639653334 +30613062383462633164646237616566353235646637353765386239666361346662316238386438 +38336239633038643132343064383932663666373361346162306233346362363863343135663431 +33623431633963343961656539303764626166643634623631303163623537663362373038343264 +33333938333333623064666132363863386231393734333066363563643937303035323237636163 +36343937346533633338646132626461303338633036663035666161616631363130623731656631 +30633834393037383065663931303931373366323933366333313538666136626234613163316139 +31383635346632316162303461613336653833633463316561363739393862316633356231666532 +30616234326235386464386435633334613134353964376132306438393332333436333936363239 +36336232336266303037346138396165346131653833333232313233343864303465646661373561 +65343539653961396562656663306266356538633965653761653834666563346232333065663666 +63336130663034356132383932356466656233613631653538396664383038646230613566326466 +64396363326563613630653133363733343132353930656330373161663837656439376531343733 +65653762623366656334333732653463366239623762366339313966386465316565326665663838 +65646563326264623739663633306634316133626438383462333537316132353265623034306136 +35393036643864353036643265383937363363323232326232356235343562386637303565663061 +62383163313436623633613363633638386430636434646539616334623436316662306466653639 +38653264323330383766663038626263343232356538393237343338396665323062343535373034 +61316534343462353335626166643337623762353437333830303430376161356539643138383733 +63663964366264316639353934613761616466613831626465653662633061633131623733313336 +66333233383930343231363863623634316437623462626665303530303835393733626564326339 +61313861633830366466663836613837366665393130343062336430376236646637653430666663 +39646563623437636438336132316537316363333837353133646536303437666166353237333230 +33326636333362346538626362616161306131623238616563663431623439323563363633623936 +33386230633564396465646266336564363963636439313662613765323935666430636439336631 +64363332666165346530323762323963636165343633393939303965653738616364366432623636 +33386136336163303332343438663330303036333332363530383231316239623838376132316235 +30383533643934646361313663366539316562636563326665656365383837313534346133616531 +35346162333237333835336263613563633731386164306139643338306538666463303163623261 +31626634386138633539396162643063396536313632366161613335656365346464373130333663 +39646261613233636631373761653235366430343438663639326334643735323030663139616434 +66383034633837663433386463356463633133303238383962636430396539663036346330663338 +66323832363561333538393331376465636533396663386135623739333865306530613338623766 +63363732353535303836336462636533623135393164313332656363656262656534353266656239 +33353466363131323736343136333433373433346136373866313166306135326337333837333136 +38663737626630613932383735343838663961393263393266366136386532373365393462336163 +64343238303832663937376133656135643834343061353461626439356265643630656437306135 +32356637363433303465356661346263333561386630323962613265393037663239343062653564 +32656639393939336636656338333866646332303935346539333537623266613863643864653063 +38336337633262636630643262636138346161626538313431383132636639626633363663373736 +32353165373363643136353535316334626635333866316461393730613336666133353734313533 +37616438313466373931636166633133393334376636643738353263626439323139653530313837 +30616434626461636437313566653038383061333366373137643265316633316566653735353734 +39313366373864613839313837376662316231306561336439656330663261643163343039343066 +64613432343332363461366630626435336133616232653032643232343862626135643637666332 +36303536333666356235386338656437653236653530313264633435373765336234386635343435 +66636130323963323265373831313739353738313535393461383031616164343332376565663964 +34656137386532633637643730356135363361643539356433613130646165373065666461646631 +66623263346138616632373164396334613538353235373135656164343035303036656462333062 +31626635636232343965656238323330393962656461343534613131376666663261633261356331 +33356134373164653436613537636531626433313130313431616164663962343233326365376138 +36663936636664313537643861303565643166653965666266393266353135343164623162356334 +63613930323133663464396430653039386538393962303339333236366631393831643239656232 +31383138323466366362623032396633346463346566376330623635636463333733623866396266 +32313763666438353231313132373363353737393335653835623330306633343638326637353531 +38613466386637656531363762626135653362666266393939393966636634616230343238653136 +63613236383734663365656339396135656162366533343539633734386664633561376330653866 +39643235646238343435646166636330613334386138333462633564333131306464316137306664 +61376562396530626338636433303939336431626566643261393763316234626265303338613530 +66336432656363313930613336383636393036386232323737333436393436386538626134383964 +61613939353133376230623066336338663535643932396232323066363463643731613534636134 +34656637306338383131666139336439363437646366396333363837303466376330613763353764 +32383839653136343633323430373737373131613163353233353631373063666234323630343331 +30623137623863393665626562356461306336313463393336383330663861366132663630626136 +61323464656137653431616166366366656566656530363138313935376136656461343366313532 +31373966623662333662313331356233613230653762653635643038633332356161323635346364 +34623138333337333734616431663262393866303736383663306265313330303035306365616566 +37363233336661356135313337336235663063386161306564663334343066623161353966333739 +63316361633433346637366637326631326363653938396638636237373330383033313061643566 +30316532643062346631356266653139656539353462333831643763326537616530323539383831 +62613035366534336632393531633462623662666637363165633633336631373535663261636331 +38353436663139663832323061656165383464353232616330366566663432616563303438383937 +66633563663765393564653035386234386238303037396232656263326564353237363165373230 +63643066323964383030333037646634386130313639633161393939636139373130383739636339 +34666464303933613866313734656235643461666466336439343761323432363631386165636364 +65616634666338393531396132306537653136643035323262333464356132396536326366376631 +31396262666363613138663733316661333763363531366463643564373863386636396637343730 +30643861326639636332643834333662313333643466636165663730356438303139326465616239 +39316563623437306633626136343637313432626533373165343931626536623666633765333262 +63396165333835313937343634356633336134643836356235376131386439383037636230373234 +32343063373063333363363531613562623966643834306566353734313336333537343230626563 +62306339373532383938363934656233643333663662666363323134373835356666643863666538 +37356237396361653032623538303937396464343432623237613965306633376330326537643639 +30653233346134343637656333616233666639643931646633316362353866353131306532386163 +35376135336631353166353565366562626535636562623833616339373532386434383431633565 +36343335656265616235666235393661663263616538393465346363656637663765653461653066 +33303338643162393063303336636330656363316239636165383363653661393039363663633362 +39386165303462373865333964623933363930623034653865613565303238376532366637633162 +37313433353332336139633330626130636438663031623131333661343430653033383330646566 +32643861663235396633663930353864636533613036383563653839313532343731346634336466 +31626161386361643562356561643865333962623166376333643066623634653664646231323635 +66333866376632613765306539306636613533633063353233383564653761653237396163396564 +35643566656663363239643632616164393535633635653863653937663331373132613063346238 +62363263396462383862336132643837316430393738323366363035376261353833333137323262 +38333466633034346464393433366131376439396266323331373237393031376466653137643061 +64633535616130353037646334386133653336633739366330613163396237356665366239646236 +35623531336239656137613933373536653530663936323735346238336463663834666537653365 +31656339373264373931663764633235616463366266323939356539343064393064323561666631 +31346533323334633731636366383136613637376431363532633534623033643662363263383965 +32646232303264643034396664663635366262316234613732663736626162623266353334363564 +35326133643166396134333963303934353266333331666138623664396436383064663835643637 +38373866363835623933393734643535643962666331333561663334303433366564303263393037 +30636133303939636635656564613766656363666361326461646136336661373732636633396637 +37623034336261626665613739366630616438396533666436623632663162393933386362313966 +39616138303938303132656439643966643634636638343534333030343833393064613837366336 +62643962313366633434316237316135363765656637636563643965373830633962373861313031 +34343633613938383031363433646133623931376465613034346562666562383763626530636366 +33366565646565623562353466633062356433653562633931333866646339656466623738353839 +35343036306664313539303030363464653536373365396136306463393636376434376532653039 +63636236306461336332643937326461323961373639363061663165356435636466393361323834 +36663232333237653031373332636539613631626234366137373861646135313535656463623337 +31363265383933343634643862623733666237626130303936343736633861616561316239336162 +30346533393662623361656134613831323236316238663930633231663865353133336432343937 +32396535613035376564393761313230656462626433343664633338653065613535313065376538 +31633932663362366536633466616235333337323939356131343135343836383134393566323630 +64636338613762373463636633646436303137323937656531386233656334333434326566373163 +63303138633438626437373465353130346534376433363361356535306536646564313736336237 +63323336623830333931613165366463363337623165653164663731393766356462313839376435 +66346362396234323764646163653561316531623061346238303032333035623333383563396530 +32396230336538333563363236313335643862393162613637373539343634653532613336313663 +30393864363963626134323963643864383739663833306365313434333739353532666130316265 +33316438636262373862396136663061393962633037643532343236376639366136306236316461 +31393362366531333964653763633632343962343239616132616361663665623663303065323366 +61303131666138373337313565363435316238313830343965636430336532316666383939633933 +66346231373438323066326231633336666535646232393933336330643666326534356164336636 +39353438616563383265366330643837356263343466663537356337616166623037303238313061 +66316666623866633035326336653431366665616235363432643139373961663435366331313234 +39663431353161386231353636656331656134396334396439383637303561366537313632646539 +36636336666433363731656136373561393632336235663266306166663134333465366438393762 +66393534663739323263303333353739616336316539623537303839656438356534616262336633 +34656466656230316532303039656639323835613833653739656339666264616363323363666330 +38616464393163653037613030323032656562316535306265326262633962313534643836633233 +61386539373036306634333764363366383566646137393034346565366366396136343032653538 +32323335306438303861613136613937343961666537333161613939653564366439353537363465 +33376361393532313962306435313730303866643462316537373632396362316166396166643437 +39396239393864323661643331643938646335353032363262326165373465643436306631666164 +34306661353536383938626632323966643561313864613630353765313230386239663661396432 +66383761623539376634376661633132613032333464666639633531643963366533613536353863 +64333433396564386139656238316638323966616231336361396238663433636237653766623062 +37656534373031656662333464663937633864393761666663303462353333343661656537383736 +38343339303465343839666132386239323734643461316566333166646637373238613836303738 +30323939366539313339313239383836616537663465626635656234363966383766363263643763 +36353865393461386633366562353161636166313039363834323838643834326464323136666537 +63346564623537323161653437663762356632366439636235656131393863333530373230373936 +65326539356438643337356538303031363038366334383834323139643830323531616632303037 +35363566636564336161663933323137393431396463653130303634353534633063613438623861 +38636164346536373838626264366361373634666131306532326539316233636165313631326631 +63643735633933316237636231323432646439633538366535316165623838376362303962313733 +39313365636634393639346532383135333566613361363530656534393561653565393737623061 +36633035383636343339613964643638646636626335303566646234393130613264616539383539 +38383262383462313361363630326161653731306165663038363338623931323862316466626339 +35356233373461616463636530373962306134636565643466613963396364643835373364343562 +66316630626630306361313837386236633433323438653264316464313763336163623031353166 +39393036633933656666396465663339326663306338356332333738663161323837653431383037 +39333463623538306666653830616630666335313664316238326264376237656537393632636237 +32323063356663616261333561646562356233353237303166303062636332636135633634313131 +35663064373436386166393564343933646630303635666234663061323638373338633662353064 +61363838613836643662386431366362333934373964346432616138336337393034663762376334 +31386135616333663334663130383530393836333037646336393434376233363638326661656662 +34346363343131373564663931316431316261666536396231633436363266366231393464303438 +62373364626339393961656235626163663837353361363036313634653230316366323065333933 +64326334656661393432313737643735373633313263626463616264363463343434663832633135 +37633938306362303262636663633231666634306463656663653535663063623233383362333631 +38353237373361636637616239613334623364623232326662646461373034383030666561613764 +31376533663666376437663363333763663761643533393937363731363636346263396436326366 +62316337336533326266353862633437313338646235316537626335363438643363396235663231 +63333732303536643036613063313962623165633562643534636339346635346563313437646633 +61363535363234623439666365316134396633396139396663303263353934396365363837363361 +36353966366666626236356331303333333332326465656266393165653632336532353930626363 +38303135313837326465373139626138373430393763376635313062386132383738393037613965 +66343838383665313430313564653131373863646130386433626164646131653234616238356236 +61393530616566656162643763363166313665653238323836356539653064646661306635633038 +61663631313031666564333361653337303731656639356362346639303561393265303461623364 +61666637646533613831383863353562336363663263646437376164353063373934346139353237 +35396132353766653836646532616435633162663335393734623336643231306538666235653532 +66373364336261363737396634346530346266303565613262373639393837626630613432316335 +35353438326336316463323135313238643863653663383437306566623634336466663464623364 +61336562303566373732363231366163383538333636353366306631643339396635623839383739 +35303433616436303335633334316162663938306631636362366334303836613035646231633062 +38636530343037356435343039373935343737613635383666613666613336613933306433346536 +33353034303662386164303130633739396630323930646332343461303637623836323138613037 +38323137356335613362666263386538316563323834626631396661343431353162313263636537 +66333663323366333734636262326335616634656366646566353963646563646331363864643235 +35316338356263326566343462353331323565363737393030373136303634303236313266343030 +31626438346266633234633263643831613964313562613065393737363237666537636536616135 +39653761666363303362366439373938313063306364393161656332626138333235306464306439 +64356433303262353636336535376535383639376361383661646330643561383738373535663635 +61383664363262386666613763386533303438366666383035326235303932656336383535323738 +62623636336164323462653939386130303662333037616562326432363537653437376364343630 +39656634656133353639616637656166633537383465323463626636663030303139313062633337 +64626664373038373833656664663630383231373161313538336134623135613737633831383362 +31386439653865313765336133316337386664653939343162373834613737373062653036396534 +64643133396530326335636332376634393734353135373863653237616162353262376139353237 +35643764333365393135386363646438306362646561346665343163383834363931643135366137 +38633931316436623465306533636664346433386230613436656562653635346161646534336665 +62303136383563366134323035333635363337366539643332336237306235643532633634383936 +31316335663833316163316364383564626236343164333538356333323761363736313263323137 +37613933366566383265356561386238656334613631643232343862373833623538636236316536 +33386631343265663032383735643361636332613835333833383130316662646463343139613530 +61326433616163626336343532323839393065656630613534613466633763353061353930653437 +33653232326636653039666533323735373736346532333337363163316631656530613935333864 +38393833336161643136383835373432363939366166626566633064356366663337373933323934 +39313964343035333562303861616166393961353166346638393633663636353930333563633365 +63633663643864383661306236376166643366616165346331323761656666393936363631363031 +31373463363066376661306133346366663239393333376564373133393432353866653462383662 +36313661663862363662386564356363316634363964336537636561653730613436396165356433 +38666532646436633132653964313737343165303938653966336231663138373265343363313935 +33383961623431333161363661356163396438633565663964663162303362363063366465303933 +36333662633930313238613662323063663634643037323739393231656631333632393136306439 +33643439323263666337333865316664336332656235373731643139373732396136626534316330 +36636461616230613632313966663762663533303037373763313562306562373232316332356634 +34333935353333346335616133303235376336326661396266653934373765343663666338306537 +38646230306562313538636136306531343765326439663636373763373764666336636133386466 +61613665316361393631313564356339626161313135613037376332626636313766353731633430 +35346635643239636133383865396634653665333431626333323336636239363063646535363239 +32626331383333376365383533363132366364316639356632656339396263306134376136663534 +63396535343938376337626433333539393134363434393230633566326332303666343434303832 +64313063363966333232383138383539656565343834386534366661626266666334653066656537 +32323337343336333536353263653066643731373766376330613232386564316263336166376461 +38326362306664313336326534623436323336393036323961616262656236626336646331323238 +39336233333832356234363065323762623734353439363538646362626534336133313931353537 +62366431373537343464343235343464326462616466613038313536646466393965636463393163 +30343363363530383361653433643035346335663535376665653737303064353662636531663331 +31663734663266343566643630323738386337656530646334303936636562376238313936353139 +65346438386263646231343031363162336134363532623665396666313933356134666334353365 +39306536353238653761363735383064363533343834646265353834653137343937633966666235 +30623434366439633234643265613530386134393466373365366339363561373132343134656433 +33303565383837633266346139323561323338353634613037626336353763386239383061346663 +39353062396339393234656164343736313862393335616230313664373139663262633561616436 +66386466663130613663666639613062633234376436623931356332323232353064663761663437 +32366631393833306632653130623161646365383565396430656637646361333366643833383461 +32373833393237623836663637373665373761363463316339343332326564333639656235623738 +36663135633463646564376463353532383134303864303332396366316265613464343134396466 +37656531353137356261383731393162643235313332343262336231333165326632356539313864 +38326665376533626162626538666638343434363263306637643333646636346236396664386234 +66316366336366623432356463383362653937623739333136353239346635323437336361643831 +62663937343562323461343166313430666434366332383462666539626566393164386134386236 +66303637323762666564313230333637646662633738633537323364316164653462626433313861 +38346231633164306432323435313466393830653962353466323962306635316265653466396263 +63393939316430356235326565376531633433626663303734306335666438383439306637666166 +30353766643233386463623666643430313961633561363666303630343231346133616461656662 +61323861333862313531303166376663303933613837386666643039393162396332373261363731 +32303634303132346535366630383761656533316335363837366463323565343062623261376264 +32356239313064303632366264343465643362646431656136343136386539303866396439333936 +62666164373839323732363262343131323338623234326430333538646564653937396133653866 +31373964653039326262316662626266376462316238656132333134303437356136613361666362 +65623362323637336664366433356435303332626536363966393764353635663731386433666134 +38333161653533616462386665633861643330623561393334636663396363363833656439666339 +31386237383531373536623036386437306135376637326134663937373838653063616463363236 +33306462343230303762373335626362393334353531313663333761636536613733323435386663 +33313762326465376134343435353263346532393865373366363935376337636632373034386431 +65316133613634616663376231363136383733336139636335323063613538616434373736336364 +34623666653131333862353931646266643737323865623636623038333636663663383863363336 +66363936303938346435373866306234616164313930653866646164636466333661336632663830 +64396337646636613661333933396336626264346238346361393562633364316361356236663435 +66623063376561396138646666623738663539356138306561353664356365343535306531343332 +64393362333636333135333735616366626266313331343634323338333738356437303462383538 +37396463663731663565313066623931613030303633626266623739383063376536646130333865 +31373263353261356361306639633331663632393338346561383933633838643438643730363565 +36323563343639373639656264623761643263646438333333326364366532336363633563393639 +35623436653566653563353161393438353332613537343336353830306139666631373237336130 +64343131373965383333623833633734653039633138646431633739336264643131386538633836 +61366530373732356530323530663232326335653230303366373461623137363033376138383562 +66373931646162613438323263303763616464323338626334313630373832623234343439363264 +34396533616535303931643630636363393433366463663665393536643835383438663961653435 +34653962636333313936636238316237626234386366363634363739613431646239626439636662 +35623731653937643263656235623466396537613663626237353233633865323633653439396332 +64326362343532346239386435633437646230303031653938616363393261346665653034353833 +65326465663032373932323866396564653538336535373634643332633032323435653439396535 +32373135373363656132383863656266383566363036343232623037363666316234643366623639 +34666531653965323363393664363230666536633064393035646163333730376264363966356638 +37376437376461613035636461663336633330306464396566633361623436356333633234366237 +33616635663966333738346264636534633764376363643233623135376536613730363631316235 +34653235373331663432333635386435353034613831373435666633313765343065396662653932 +66643339313164336239373732393231333037326338303933626430366463353831663536393530 +38626262353335656338623335383666303661373430326535643464363937343064306465646432 +65613335643831366164316365666361613165653863343033653730393236663437616361383165 +65616332366261653461376435343333396333653533353662333261313831633338356531393639 +30326562653862393333613666643332643830303634316637643264383165373539306531313632 +61636132646335656333636363343464356632316534333538383131376432383162646430376431 +63316339353232356432386431353438616337376161326563336461613061313337636539323133 +34646161656565623537336463613235656335346663363439616365316661376435363861326135 +31613532653931636365626264326536623839666637373737323831356461316239373562623336 +32633337623830633731623537353064336533666139333364356437663835656331366339653564 +31396633396162316361346338636362363630376162353733633762373461393063336462633464 +35353530616265353636313338623863613936306663643037363665636236363233386535656437 +61626165366333333736333039623138613835346562356631333730646234333134393366643533 +62356637396466396662656361333432666664633037373262313863333539326563643063656564 +66366637326263323638386232386630396634643132623433343035656361386165616664396633 +33613063633463336430313237373965613565633035623361313162373032386161346139613233 +66333665363466343938626665643632366130353461343533363461653036313233326461363265 +34656166646331303836613039346130656439666530376263316162323233306638306664653561 +64353735613863623166393833613962343464326561326238393231346335396633666233646332 +39303736343632613135373465616264633635326537363835666333343061363739336332373330 +66653864393534663330623039626434626365643538363964613634613061363939613837613261 +38336466323636643438373038666536656633386332366661343861323330306632623130626637 +35613334343731653134323361326563616165333833626134366137376236646337633239636333 +30366636666265306533616138646339393362633236633633313861643364633933376664653035 +36346663643762663365343635383739323165633333353138656366373638356539343939633534 +32333837633636363937353762666162626430393236663238373932663039616464613566613361 +36326632666463353066633764323563613333623333356465353163653431323632653135613061 +37363663613738303265613665623565316331356336623830303432646661333065373530393431 +37656566353130643230376432663132613338653730386464376230316362313533306466666130 +39656536353830343465366162373237376561323566323433313538663237666166626532386262 +35653435386238373431353762353239326365656134386433643466643462636232303236366633 +66336562656264666235396162636433353064353537343538613338653935663930623532656165 +33316562633131363862613566386566383835633065343532643731313234363034333165336131 +36626635616433626564356436383233623030356661616365616365616161336132656639303564 +31323466643464353461306462316538663963613636373831623361393433646465626666366631 +38363264313033656231653161633962626234646239373564663333333434336462356362343234 +62353862343734323339653831656536623265626439343632343161383663373532363765613535 +39656662633732343431616265323266663366346634316135356230336263323563643335336662 +64653064633538653133613735303838396366346665346338303337306637313236313139643135 +35313433366332356366363132323363383533336235333632653265303539326266346137333334 +32346131353435633762643834393230633664373535643762623534346364373163373038343636 +30313663333139353862353630623730666530323262663435653636663839363737393061383066 +31633530623665663838366331636263313265323234653630663661316465653564373163663633 +34663063643164336639363132643731336431646134333263636235343835633937626265393561 +32363939623837333438616461356361643132336130396564323665303463613261343863643266 +31303039633038383631363665396335616336343838376539306238346463376535313561653732 +31376338663165346339643236313038393164646463343062353137663366393735336235646339 +62646232323838613534366164346435366662393865363861396662353666363230373737666261 +66323563383930376237666131646339393032656166626632626439333232633164313831313165 +30376238616435653831636236376332356535666265663863643139643764336630376462333337 +32303537326362643439666136623636353534313366613563313432626266373564393030326632 +30396635393933306464613766306336323233636438396132323338383066636632316330633238 +62613366383336313434343339303166336436393766666561393664636164303566373334336338 +31356162303836623961333638646166373435393137376136386239343430353036353734616230 +33626332316433393466393365323932383837303338383136376338663166383133643364653764 +61383534636130613366366639336566663234636461346461316130396661336262623337393534 +66373036306563373662383335623965323739626236613766366236623062313637323964373038 +38383136333133663364323066366261663734306136653832366134353938303739346234343936 +38303366343366666538333661643433376539653666616666333261656631646537343731653034 +36373832623165333363346363353762663935323737323565353336396630653535343339663037 +32623737633230396562613762646663373833366632313663363261613737383565383633653830 +39613263313465643135336131376534393337666433623262633234646431303264656630386333 +32656362346164646462376464656362386233373039663637383233646461383230646336356433 +36323439653564653438323966393566633339326337646434313930383532663861373237613663 +34623363323735323433363466393835616633316164663833373439316461376164616164653865 +39326163623763383633373561333730336532643966393730623962656338333437366132616338 +36363933353238643464373461323130373930373162333761373363393165313635363766663935 +35303066323334313531616361373835653234373134306233333037336235306134366633623864 +36623235313230656339373739626230316338636430623134353233366261353134616633663463 +65373435366230313861633638303437356262333562303464383536633037316134623833626431 +65313062396337343033636264373032363739393836633665623862633931393264646239343039 +63643231373636636636303331393730663634653831663834633931323733623031326236656265 +33396537656165303964633535633065326533376665323236326266383134376138613538393932 +66616565353236313463393136343238353835653761313562363930373630393065313732346332 +39656537376132306134613838343332383736376230646235333266363136623030356433636131 +62623861376431613431373139376335343135626434323733623434353761393630613531306433 +32636637613864353361653733383965626465386562633331633264386633326165346532626533 +32343637643638643037386236316164363539313437363038393533663238616436653238326136 +35363437653063616562623334333736376639623461333463303466343838313731383363623639 +63636536326438333735376137396435363764656432656132326439363137323533346366393564 +61383635643037626134386461336563643434393636396166353633306162383665363831663561 +32383961353066636532386166323639376266623563613134323236616462393739363430616538 +32376132653436343834363661633138376539666239663136313132643830306139616563656265 +33336664613262326463383064623032383139383434343064363338336463626136643765303437 +62663765326434393830653237363564626632363964373234316233383130333964366663346264 +64616437326139613836623465643266323839356536393265326237386131393166616365636538 +30363332386139646563656664356435633736386165643830313766663637666438356536376530 +66333636336666303766396465383066356138376462616664636136663430646466333239333437 +39316137313665333537356432363835303834376639663362613636663931306538316361656664 +33343533326530343832376562646661653364303866343630623866636161613234313636343138 +31376461333834633566303364333566363932373264323432643139333131323339316531643661 +38363039363361636261633136326564353337303339353437643331313534633632646562636132 +31663739376335613961383766353964653535306664373738626464353438653030346339613536 +34393238636665323732633832353863323933663638663433306230626264323336373531383061 +38666666393062333637393634396638353035373765313637323130646666616664313034663638 +34633235373137326165346530303637633837343463383131386432326430363332356635623235 +32663263386335313837663135663032313765636663356432663733643830333464353634616266 +66656563653037326333656238663937363835646139393230383763613736396466326531383937 +35366266396436623131383966653839323835373032356463336561396265623130346433333630 +33346635313264626434666532396536373965346164393934386330373931646264326433616461 +33666464323465666361353036353831653637393436646238613037636334663863323630346331 +64316563626635346235376463333165333938326166323461653935373966353164383664666461 +61383361653964396666663365613938626534626337363933343464383962623564323039363431 +66386564353431323838396365333234376665636533346562643864636566306633663832646232 +66363033363737616564336632626331346136343762316137373037653034313738656638646133 +62386264666661633036623861633131636666353433616462336230383737636164633362363662 +32323930653732663064343234383136633332316534323238383236326330303533386337363832 +32313036613132333563633333356535323531363230366534616263323962326635376261356164 +30633663386432666466396466376437353066313934303639333935653330343434643266613065 +39336662326561656638616230326334376637303431666539333439313636383437353066393532 +63343331663566653665343533333935383937666133353037396438616461343038343666633636 +36353834323435323633303738653262623635313134333364663633343562356364326365613764 +31383362366233323937393065653464396663333830326337616464386434336337333434366533 +32323338363833313565346238626162383763383665626538306564623065363738646138393664 +30623730323038323163636239313433643366353032376234343166656234316230633530373630 +34303137396634313562613562303361306434653833373232393062313461393337646166373964 +63313966303432383830363164373339386139346237313035663966316438343464656236616536 +33336630336532616239316261636438346536303566656332363366336466393531353261653731 +30393665343236663462616562313737386666613736396465656266333533623435646132663466 +32343962663230316636393337613061383330663938613938376433333264393932616331313337 +64616632313263633332363464633166643932333634306337333638616566333431323361653761 +63383137386262633037346562323732663630633939343764313463346432623839346364646361 +34393430386230643863613030326464356532376232666135376436636637626163386162663662 +61393239373662353437623064643835353966643366656435386235343461623734303734373936 +61396630353537623563373736343934663832363138306465323930396532356365363937636539 +36373066383738653465386561343837303035313933636232323763366265353434666536386435 +66383739633437356533386366306130656432356163386365373337656463326638626666323162 +34333137306131386335353064663962336432663730373338313661326266353738326330616239 +33643531656339376663613735646266663065346138313838323061363265666239613663346334 +64323633336632663836626166626163356330343863323939366265366339386236363530353534 +61336633663763303462373463323563346332646534613437323736646639323834373439643430 +32393034646434306163373434623434623836656134383230636236653662306562393335646662 +36316664363334353436633466626137353930653436343163353662633565333338386630393237 +66633732646134383232306466663230333036303939336534613163386562383234616338383166 +39646365383839383065653033613366313739393661656239366661323734353366636266373463 +35303437393061356138393135313832616532356438303434383663353331613030386665386462 +37376566626239363730663464333635353265376635663962336534306262333938333363646163 +64373961313632373365663562393333633539363137303062353834303936393239653937383261 +34323664666234313262326266623465653963396330663638303133626630326466393331363936 +66343730626334393163323561643639363466333966653266623232343063383934666665366630 +36386132346561303831636262393634326561373232366438383532333963316364323031343366 +30383338643035353663646237366431356435346662396436633636343732653132616562643130 +66613263653831363130363436613231626464343234346137623537366331346138633166376334 +37333962363931623033393134386564353265323436353564646634663361353236386332313665 +65656234383831323561643638646139643165643464633836343233326532343362313134623239 +32363762376533393430336133643231366634613934623761333434626437313435616661316231 +36356636656665656562313739393130343162343462336133633561646434613163346130353738 +34303935623936616539636135333761306463393236346436636132383837376333306633636531 +62343166383036353865333737356534353661303330306661323039636131376365383864396163 +62633537663630393665363930646133643464653834616564373530666663386132393235393864 +37653233343936386437336532646664313962333864316438396662326139636161393533666466 +36643034363538306435323464326164616664353066323564323432336261353462373961353237 +63616562373035313561363661366332346130323932393131623538353537633162663362383438 +66633930363733353936613230613438356662633134386664613435666133303136333637616539 +32366164646536363335333365663961643965336332306364363437633762636230393538326265 +30313431623265313634666264366664316361653631306534396265353964393839396331326363 +31636538303362323764313265323462643635323734643435386664316663633335613132363432 +33316561326631313737356231303632653664393863383264633962326637633436393364323864 +63643636636664393331653032376336323039313265633466313965633664346632653237356562 +33393966323937393266336233336566636232616231396465323462353639343230643261393336 +61643134393239386661633833663937653233386235633964366565343232333238363665323063 +39376463393936313932333265373065393333343761363134646565383564616335366630363731 +64333035383031636538313364633438346563323534633462396430353732666361343032626132 +61326339323230393632363934366336663062333832303262623431623961393338386531303763 +38373362643234306538613439306665333130663432373533343739633932383564613036383433 +31656466396436656563303132393033653530393733663531646361643533383639623765373235 +61653635323731396436636531363638646462366565323136333431373063636164666563636665 +38376237623332636234663862363330653138363463323832306330366162656235623737316539 +36393161316134393838323565366333623261396538623737323732653730623265623031333562 +31663964366166633261646163343933666137333738643263333663373365333630326236353263 +66643961313939383736343862303366356161376466323763356162393031353738393065313538 +38623038363065376665313031323636653361333561343536663332616637643131393936346337 +34643639333133366538336539643162303262356239336366316631323431656633653761303266 +66333161633630613533316166633439346137373064363862336664386539316561383464373136 +38303733663164353531663561336137636161333836663963343135326138643363363238376638 +35343233366337653964663635396534373233356235383930316437376363653737386639336636 +31386238323737616139373632663562383734653763333139303239303830363961653961333633 +35336264626634646262663166613331333239623963366133333833656333613837323632313863 +35643733623966613936646636326163363735303733336439353731613062343034626262346661 +35663234663338623361393530626232663561663830636633613431393832373663386238623230 +36653737333563306534653230376239353833653131303035353637323339316235323639366637 +30343335313831376237633932656332306265373530653165653061656261306530653966373132 +64353962626465343639613764333463633365326230336563303231383665393162353034336331 +63333264323264306332323633613163633465376362336466336564303532636465663563663538 +62656632346133653330373737646664386161386264383236336531623931316666343537363466 +64643861643935363433316133633835636166346136363261363735663063343538313766653161 +61613433386165666638633663656235346135353764373132333630353432616433623862306139 +37633066636533326139393033336566666135646132663233303361613833333533666366616437 +39316537353534626330343762623432366239396233333033353238393439323339663339346664 +36386163383466643035643366363639343831613534373466643430623362666638663439373835 +62386662653132643133626463353366366561373338663734363535613838363063366665636637 +34333333316531613931613036383538383333306635646464366463396339313534333638623131 +31663731653535626236623161346561623439356162316537666139343266623138643830363734 +65386136323235616162356439353933353063386661343665663532386532396338353733396663 +33656561653430613832363263306337383334656633376431613135383066333837613165303939 +30636465373735623434323331616539386531386163623265656566623265633238373838633330 +66396639313935623436313733333339623066333838633563643563383233306565376136306632 +31343838346237383362393238373363633237376330316139383638613535643566646464633361 +36343431623165356631383964323561663866656532643439346231393731393838613362666562 +38646237653530623837363165386561663438366663353964333933626136396237616663643566 +36376663363137363835616535623133346136343362373033376562323034656432393064343766 +31666334663263356539346463393232663135313331333435393063333031303063323433663765 +63393734313265306563613630313634333262666334343066343835316461326163646638363961 +36323036386134366232346432393261373631336539653965646431313363613761363433333334 +36303535616135643363333265623236656161373832653835343535373039636563363664656430 +37326631656439363730313831646436333965366232653163336139343763333631396265616562 +38326366396266386663343431306338363033653166663964396631643932396536303536626431 +33396430636130636332346239373536326161396338336536623636363734343832633666323965 +65613735316638663438626237316366643831643764626135366531323835343161316564373764 +65336164656431636632343864376234366139346162663537633465656239643739333265313838 +66363337333966373261336664613666343135663436663632623934363739353932396539353033 +61343161393539386236366562393061336434653535316635373061643832366364643230623436 +64653730303934386537656663366535666131323737323534323531313135316438393838373063 +32383336636333393763643339613939383332646139656564613164353264643236363834373966 +62613532376635643162323834636364363233653437336563393062326137666132343831656434 +34616235366561343766376236376165616630643332363639613866663066326339636164303232 +30376363383431363233363738306230303735663933323530363664376136306236346362323332 +31306365653731373135316439323366666639663765653630613330383635333139383336333634 +34363933636532306433646264323031396364376432323537376236643933333566363135613336 +36386462616363313336623233666564653361306563386663623431643536646637366431623261 +65653338376238613761383532376233393631383133396635633033353933336138383064636538 +33366336396564653134663835343964316261336665303664346166633235383533306234626434 +66633137393336336465313833653430333937623635336230323664396334396538366265653861 +37366464396166616461326435656537383162363966306166303765633739636332336533633063 +39326566666433333939646662336534633064303765316338616239626635336566346137663464 +61666564636332336134363331306337373630653962613962646630356538316233623938633266 +34383737373765653934373233626437643839376334636665303738373035366230666162626163 +63383464623534343464396163626665633462333134663561616533373038373932623536363461 +64613736613433643866396166303132633361313837653639646330663034663630363038363664 +63623061323362383338303536303061346635316532366535303835616231333836653330666661 +30313839373161393735313536383734333262666261633862613363393137346137363437363232 +63653538636633353966306436663835656638356332623237393434353235343064333037656235 +36346162636631343139653634346563356635613665656661316163383962353237343534633339 +38386462323162653039393735393661326665386638323934613439353830663632306332656137 +61363233383535356536333761666564643464316436306235613331356134613834666561303161 +34333830333139333733663632303838653037306135633533363865346432343734303837633061 +64616134393636383331613164393465386630353461623764396534326462623866663066353530 +61643736633430616232633933363364303533336338636230643039386530353233316266656436 +66643433316338353262333661356563633266346331393965643561663864653663663533383665 +37323363343861343737633134666530646237313364323165393732393737646465343163666630 +64643536336433303134333238393861323463663436356433353635326134323439366438353134 +65643065396366363964343236663635313866373265663033326363353034323561666336363762 +64626532393537326539636266323162666662383333663363326232333139363536393537333734 +30333032626162613533613165353165356437376230616335643564623034356131666439613262 +64653533386265303866396135616538633661613036623864313165336632643333626264363639 +66643864376236373266613761323038326664373533363931643264623065633835346331623261 +38313664663062663331633338363036613761366130313464666539393933316564303662666661 +66646232353262616636643034343530313835666163373433633833613837633565386164656235 +66343032316136356232623739613135643165653366623162346234353630306365653438376332 +62316536393831383733303735643436653735396236646430643232346535396533643635356332 +39623031393336313635656535653535613933376232323135376165356662353239333638366633 +30646362663362646439643932303030313738386535363262306438333039376133313935326339 +64363663313934353265326638306262373662373636383135303334386136636166386266613535 +64323235383435363761656234393034646531353836626135303863636637613333383137346235 +37613636363438373830623039623236353736373365363038333637656265383135656164353731 +62323935346535343535333863616363383766333937636464376331306239636563343938303534 +39336337646137363135383134393163306637623964646339663366646130623539303735303833 +36396135316432356534356365316235323437353331346464663739343561353536623031643338 +32613131366235633434373034613766626463623530613032663839336366383335623763656666 +64613634383364643232316166653333356566356232646662666234363635643538653364316565 +63626531376566313933636635653231636438653033346563613964616437366339353131373961 +38656535616332656462626361363364613034623633636138343231643062653936316637333838 +32303131623034343233373336306635663038343234626561376264303635383338663734356237 +62393634633565653331363462346664663434353461623965323838666231666335313031323864 +65353364623330613131366539306564303061383134316362623665666636613936306135386363 +32636536356235323266643961643534653331663361636665353031323464376639356130363765 +63343262316661393931343336363437373336356163663835636366653364323537346532643661 +34666531313064353537666533303837663237313635633934653036353966323765646435626336 +61653338326161333035353631663239366335353239303737616137313364306265326134663037 +31636465623039616361646332303962663937633039666337393762393532313166323633633539 +33666236336133326630323766626533373035316330303262643264633839363337316161383439 +33613165363964356130663963393961626438383531613163663830613835333038336339366465 +36653461306166653633353738393666396261353538393834393637326636616439343131636536 +35653234633566653563383738653538363635316239633736386563393865623264316266373863 +34623235626132336165373134336438653032633534623639663864383438326437386238613062 +39643330633430336435643361643664336330303466333539306361386362366265623734633830 +62663565626366396533643130363662373830623164633536313665656230373830343036633237 +62343332616364653930383766396336386165383133373431623665653038643931313536643732 +34353831323038653963623533336465356337653130333264396231613235303961323230636534 +38623935653833366264316535663133623632363130646136643730373338613230336532343633 +35376463303936346562306161616231623236653164326261323164623735303834363266316537 +36353161613864633131666663646266663463306562646331656563346435386164363132366637 +35316132616661353637303265303137643863366537626533313264656166383461633066336437 +37323732653533643165393931616465626230626663643933313737396537316165326230653463 +61653166396165623464643438626238646630303865313330646234343635623365646665333437 +35333333346338303733306639393533346166653565333362316536356235616162333234633737 +36613030646365666363373063373564656337663837663039643333363365326161326537626335 +65393136306161396166346239323337393232323235373535643765323932353563313631643863 +31613465333439376665363664643433653539666533323531636437356330656361616637376231 +66353139373864636534333966613263613039653832343464313466633235393631323161336330 +66366266616365386538633130333034396138396162663733393836656137336337613062393837 +66323661666137333335393939626232663334333035623434356663336135643837363433306535 +31633564363130336639666538343038323834646536663332306336383864306165373033393563 +33623135333561666265666439353666343437393833613637393634663330656562653631343035 +32336666393131363334323637303939663133613261353965393934633933613534303438333538 +65353930303864646337383237396133346136336136353131323461323262343730323334343035 +62653766366136303338343964643961373532636630353333343032376631353165633438356239 +36323365663366653630323364646465373861643637316538396433333463633934636162643562 +39366532666434313439383864656166323233353763383935333964313438333630636364363366 +39383261623864363633323666663033366564363664356231663032653639623362663061656632 +33373562663932346534393631376663666231303238303232363532663536663630636363366639 +62326631613034366266633834383966613632656664323965393631323665623831343437356363 +32313666633164386232643538663238323932336638396136386238313663313433343031353934 +36353238636539326337303161663135616433633764666462393662313662633466303335633866 +35313637336232353236616139306130326263313336326664313934626561313633346530353134 +35303765366233653635633034633764613861316533633437623261383633373261356135313731 +66316565666134356263393761303533623862613138333134383566326134656435346537353037 +33666635373233323430346565353937396237376232303561356237353632313835326535376631 +30636566386239643036353133393165363939626235323366393431363363303164353261303939 +34633135646132323234383766346263613934393434366535373634376139366233366134366433 +38363738396539393434663361346130383331646565306362343266323131303538323933313430 +64316134653634323962353136353661376466656566383630653963353831363038326535323165 +64383962343563306566613837653432363366313433646631303537316339623162363563373332 +65616239316135333464643730373061616162653833346131633033313633303539636262613763 +65633561623432316435373061633335616530353963313164313535366163623861613464623237 +32343663323636643933663539393538313765623939643331396166333836653730656236663536 +65303961396161386261386630363833633634613431656565326331333136323437326137356263 +34316362376238626333393136346437626535643639393937633532336461333237353765633966 +30666339656661336638376435373561346134383638363566373661333437646362386262646538 +61383232633337336438303761376666336338393133383034343139376264306330333135323030 +61376235663738636435643966306331366433316530396666353365646366316539323038613439 +35656434623163323661376130383061393038633532386563393465643834626630346132323461 +35633966623064623336376665343437613031616237613066336331326339646535363761346163 +37303533336561366133653633366263383132326438326632646661636333383436626535376264 +34363830646664653133363539666534366666653138346235623338363365373263663439396563 +36386331626665653662643164363566656239633564636633396562393037326663356266356339 +38653239616531376664643165633634396533643732613038313361356535616461373235623961 +36376132643932393130663061343366383436666437336366363562373639373465303537313166 +37346265653166306231313635653962363761303733626133633862356161316134326166346362 +32646633363964353937353730623938353061346364373235306132326532616634366330643631 +37353337306261343462373332343133323136363432616165356631356566656134313432363639 +31623066396466383465303262343265623235313261636163376238343861333132356339383663 +36383232383239656635386566666663323762323062636138656265353736323638393933616235 +63346165663930333065653066366532343332366262323662346565333332343532313563393438 +32626231343537313632303137376364626163666462326266646337303262303530323237613365 +38666231646237626238653038363135356531383132366635653163326537633630643063393661 +32323930366436336432633864646565633236616162303439343731306139386463396231313136 +61636434336364303230373432636233343131376163363138666538663763343330646330646465 +66393263313661396266623862393037396330666533643738623966336431633935373863306566 +63356430333232636339376662363463653631323162646666393262363930613166643334313537 +62313463393961336663363338353436366632386461313135653364643937616435363162636235 +39643231333363383531666131313439333331366264656362333439663264396636333263306363 +33363434353331656666363966396135323065363564393835646663643631346530353565326332 +34656431333936663163643238353565326537643839643336653535323432613536633737346332 +66346634613663366630336533633239613238306537376166326231363439333462643534343035 +63643666313765333465333164313332633664383163636238363966363039363662313831353733 +64373435666136303337653333353066643731363433656536666630313464643465313239623462 +39323930343461323037343064653666653738396631613030393034333032666231633936343732 +38396530313734303135303063613765663766303662373562663566303431633937643938313430 +38633061313337383438326134346665303561386431623334616166633036383063323137633239 +35373561353163666262306630353061613861353633616535636236653831373231386337386136 +62303631313538613330353635656562626362663032383236633233343431653237633034316264 +61353839623937366339353865343935313062623965386433633932356466346661393639663135 +65653938363661356562666663326234376330626161663161376135363565663535373562383231 +61333733333365663130313264396130316336656332343934353564653365353863366661666362 +34376161613464653461613830373061323330646130376631363235353935323835643461333065 +36386264653132316364646230313334353639656134396163393136316332613434313536376338 +65383839363432363835653131363963313965346231653137383937623464303439663533636539 +38623430653339353731393764616636376537666366653763346337623535393961313232376434 +36636236303262363737336433653362386633303135336465653764326662646338613537353931 +34336363393737313462646564663761383366316663303530643332326135333962616264643830 +32353162346239636665356339353436333232396635613138303065366534323261623736373633 +38623331663238336661333938383661323939363537356562323533373330336335343063613133 +63373162643738346566303732303531303530316230623432366532633234366262646234303837 +61373733353535343037326164373865313633656238373938396264663537656566643136633535 +65353634333765386562316138633531616437396163366630303931346434336230626138643234 +31666637373464633565326131666234663633376639393662373630383630393336356333366162 +65323630373230313439336565633465363361333661346262313037396131363535633637633530 +38396632393061623534333935366235356136643264363439383731633730306637623437316333 +39383936653031326532656661303361306232393134663231336263313939333233393832666134 +32363931323034366333643066383765386361666266623237623932666532633564323832666264 +39623364626331643063333930666166393533656263653436336265353433303761333861626566 +36633362333331663865366334353730636132643038346661333561363835393031356638393134 +38366565346430383065343532643331303831323566393138653135383338663439393662306563 +34353737376439633837353033626332346632396331643432306339366235616332316634353162 +61323162656666353666623333633238663933646132363338353365336632363937636532666264 +61323838323333353564373635633164383031663434326638653130346334303236326363343435 +35306664333233303965353166346131343136313966366232326535376435346534616431623337 +32353065323638336665613630306232666462613033633032633130633566396266396532393261 +36383831373733353633633963636161646130633763633034356137383038656461343139623430 +31653066386536333633323263666237316461626534623465636536393664643936366434646438 +36333933646263346534316539666132636664383365653939636630333435626532313366356630 +30663035356164376262373036633132636533373065326163313266333262666265616666326132 +36616530316530666639396330373935326438353733386235386664363465343232613236336130 +38333264323462386662393764333364386564303331356534373863343534356433383337353135 +33353961363034363865323331646532333838303135616464616337363935336236333964643632 +63643630343731323331393539613733363033303832323362343761313963366561306464346432 +63313332653037353365323631313230383132333736306338353239346162363931653163313932 +62613333396131323732646161303036623033333763383731306133656237343039313034353030 +34373538376162656266333231336365356562353766386261323566643962623133336465646337 +61373535643133373434633165383538333339346635383735643061343262643535633435396338 +62616234646534396339313636646464386366653235633861373730643361363938376631653563 +39613431343964393933373034363365653239643230363338623234666534343332303236373231 +34313833346263613832326562376563326461333861366139363638306432316438643164623234 +35383338376264306434363739383733313838663964333261333939383364343538396333313136 +63396536613135646235343966303634636636326236356634343930386631633663343134663739 +32313164323539343737663263636365663463313063623139363363383965656333353931623632 +37346161616233396534636563646436363033353839666635343532663965653663653061323934 +30663561353263393634376361373066386530323765343161646364303835666662306562393233 +31393235643536623433646136393732306538646330306163623835313135613762363933643037 +35303666336237373565323262376461393436326665636261323639386262366634336661313565 +39306331396364613939636164626532656438373862303838623438303064623739383639323637 +37386131663465343137383832363737303934633432353438343035623938326435663763656163 +32636337303366333865316131643135363833333562386562633365303266623861306266626330 +64373531346263316364353231383230393737346463303939336163386634313032313733633530 +66616534613237653436643363323237396631393339646534393533316334336364626662663038 +36386438653165383161626230393532656463663238643566303166656238393638343664643163 +62306634633364663166333761386434386635323034306531353562386164633137306462313339 +63333166643136383335346130383436376361373765636438663735393830306631333539343439 +63346464336564313434313538646438393865376562613733393739343239313864666635643832 +34616136613161643933343361633037613266333933363339363130363566623739636532386263 +64383331616161663561613830376430366663303931653534666539663165643061343339383138 +64336261333731393063316162313832633765653665633839613330343062316330623831353331 +62646333373166303538366439663535356661373632636539653333646239663630316138653161 +39376534373862336264393634303339313166383632613564616633396463653731623433323637 +63653433393531376639363037313963366231623161343239643538616534353437653137623738 +39323563633038386462323862636261383031663935353934323563663764343532323338393063 +61323165336530656366316533333432356331316534663131333239373432383830656561393836 +65383263356631323337363963346634633537353131386537303635623834653661393538343366 +65303466373132666536396261636361316365653561633731613539393630323063633761393538 +30356262653562666562643662383430346635326433316138663734303838383635616565326537 +36326330306630313430383538366165643337306262663166306462366139643438323932616635 +64303533373066376263356533376163376339316564316163313335343835663238316337306461 +35393765626338373032306663333337616130326439306164353132666331646635343039653732 +32653662353761656664366335353033643436376231373439323335646562373837306236323635 +39666134306365393762633766313538383635393864353835363366313562343537353163396337 +35376638303361323463313366386162626533323135313934343730396134336365613938643139 +66363435353838666464653833376636333961636235303433656463636132396266326339653566 +31383865323339323962333733323062323264626239653665346232346539363539353539333230 +65653137383831323539356163623465313964653964663234636433396631333165643134383435 +31353132346434393635653833313236393831396664386566613032386534343537306563636631 +36353861663530313534643962366537336139633436323136636530623165303865666435383065 +31653665353833366134386132363162396330353465373462333263393537653839323563373838 +35613166313537353565323766323864656361303165653737356264633634656235666331653634 +63636138656530656264333462613962633434656134353662373165666530623363623834633632 +62313434626131313362333430643432336564613130633366643330346533366633353237666233 +33353137383236383362653361623732356330333833316631343137666164396538323034323165 +66633838326665346531306534613237643938643866303034363137303664366665343634303237 +63646534626338326632303264313737636236393237643935396134656661326435363133653566 +64643562343235326432303532646665363431393063626664626335303438633639323635363766 +32343662343664313139333565326365333630323332646262316535613262353236363537633961 +37306137326139353337396466643932623539326331323736393038373261656665393732353134 +66303065666137336563333164396464653038303530326662613635383563623766353365393162 +31646635303632626233303131303237313438633462376262666463326430323031323165623933 +62613965656661343563383066343530333564626438326262323265326363656530643362326434 +39663337626137333533346434313465393432653266313835343663393936396162356533313034 +34313932363632623363363763376338303131656161326637666436333237633061313537623639 +65333637666432646231343538633865343239613434343839616563656261633562373066643364 +31633166643263393636346539303037666165343131656363633465653566323461623234386130 +62633164333830303633353464613637333031633630386163333531396534376530663330616234 +34356237313430646565346663636138363635623635346561353961316531363038663961343536 +61386532363064396663636236303938393166666439386638633933383633383561663763393062 +61646465326532336236303833353361353638653363376338316163653061616137613864626635 +61636135623139333434336537356663653137336464346565633161666132363562613732313166 +34663964633437393932613534336665366361656535333530613262653564623433393437353835 +32343831323932353163336364343230333962393165666262313736633234643661313837303965 +61623061316462316636366166656634353462343063343064616136643537386562336362373532 +64653631333634616566383637326161663935646266306563313339313339383138633139613136 +66623939666631343466383935613766646631393962633963336263383635383034333761366133 +63333234313731393837616635343634663161393634656165353535323765663331623266343937 +39303562383936323163633165666437383065336631333264646662333464303631386137306531 +66386339663739303230303531616439666137633961623666383935623230353334356432366338 +62633965613539373732653439313334643533383033323837613165653262396462343937626133 +65646432336630613736636233336136633562386233313631306231303132383632386533303734 +64306466323533656632313133633361316163386338303336646130653734343562323362653861 +31383261373432346266386235666261383733346464396163396466333331353634633062343738 +31396438643738303530383131666134366662646164343866383138346465653362663137376262 +35313838663334646235643861636335393038633431643565363632623966633463386532323939 +65393135323930303362373134313266356436323838326665346166346633333936376131313430 +30323361383865343530383536333164313530626363373335353166653066393831383134306464 +62653538373130316266396261356639666436343562383639353839633336613666616366666431 +63346161636134346433623439313635653831353531353536383439383037353534613465626532 +34373538633838646530663764666532643865623334366366323131343032643266376436663231 +37616363363339363734373165353864303365343633636466623734373736633963303839636632 +62663139616137393334346661353438623236326561626639383635343636656131396164343466 +38616233353038316139303739333461666337393631383834613938653166613766623034653839 +64666265383539303163373539616631323733356134663839643162303964633337656564346265 +62396532323139323166383135373637633639316432373738313666386230336133353737626331 +32373532333437343262636135623632636335653632623735306263393562613866653561316131 +65663133396161613131653738643039316533333739636437323966643936346336366365633963 +66333538643737383238343866623235626434346637633164646138336566636535613961666132 +38383932653861613036303562666531383039363031636336663063333662653733323130633966 +39373262363632343438343239666433366534363530333262326666663434373533646635356533 +61613935326664383634623530343636626135336637633837343138313861343462633438326362 +66353938383432326238316131663933326136633731326465346633353962613064323663353134 +32336436646162643934313138643037643333663835646464643863626134663963616230326535 +66323434323536616639633963393537623239613664633130343738663663336538343037386435 +61666332306161663334383736636638386237643230343433313830353734363238326334663266 +63353333666537626139306335323964633635303638356265396265386636613539393561653730 +33323265633035643364636365623566643739323634656461613063643639306539323634343261 +66326333666136306164643166336235313134373035346665653133623239373763653938626365 +32643162313662623935396363633236386561386531376365616662646332376235663334303561 +34653861303630623266333035613631643738353936623636393839343539323334386431396437 +38643338323963363964363332343731643365313835383961313637333038643738653366353663 +30343062303632663562303134326463333636313066343233333132353266313766343734373138 +61396561396635346539333164383964653539326465613362663836636333613462333731346437 +37656162636331363536636433313534613038383130616164623866653436323836323232393862 +66343266633231653734643630303437396134396631366336626663346662313861356362323866 +31646563323066353961366134336339356638363239363138386662376234663764353761396361 +62316434323564373338383464323265303866303561336133376239343636626665663561613366 +61656463643564336437343136646635386533663062623066323664326561643938663330313064 +36323361383230613263653735336361393532303664653332613663613830393864643830666633 +62633737303332623039613838323063343932386136343966663437313163623938656663366236 +36356364323936363864313237353861613962613862396365386339663562623365656132666463 +30666535333930386236323939343563633362333636393334343231663734663965333434336331 +35663138363264323438376138363630643062356631343437303662313864663030613534386334 +62326462316331626230313261633533373964633766643631313736383964393864343961636439 +65633064313938346562376132326362396337353435323362626665383331336631653033333132 +33313832663934326435313162393865623331346132646433646564356131663536356166376132 +61316138373134646236356261316535326135393131306533313861636436663036656530363265 +38393136303263313238356161303830326435336666383133373430653631623063366336326666 +36306161363337303532653637323264356665326130333832303533393463393531323737643362 +62303530646538646566616164336334323239313135353237303263386162363238653964633936 +35393264306635363933646537303462346234656631613261356666653439643164663232373061 +64313132656630353432643231376664376164306163373234326635613339343833633365373331 +66376134383062373461306537386530386431323261663261663939303866343832656433633937 +36616563383133346231376237363431386338363762646534653362393937363564303566356161 +36363331383932383736356561626234383662356461393939643832633365333230626461343735 +39393939316235343764376666356363616335633937346262633735656539343431373736346163 +39646634326463373738323133643232316433373831306637336437353033613836343431633063 +63386565393630616532313038386434633066343764313963316262323236323336316536313362 +34396262303539303837623335313934633130663730326364623935323835663061393134363637 +64313065326239336166313735343962653930656332626364396536396461653537393662386435 +30333638316334373235623337666266376439336163396533373231623535373761666535633933 +63616230383835386463616133306633336262646365396631653230303062653962343530353066 +64326538636234623530313539333834346239626263396365353766363639626537313966663836 +63656437303863346266356561613562663134306465623135626361643736616663646330353231 +34356464393535653163396264366164353435623031646562383263636132363533 diff --git a/keycloak/scripts/ansible/keycloak.yml b/keycloak/scripts/ansible/keycloak.yml new file mode 100644 index 00000000..fff6fbb3 --- /dev/null +++ b/keycloak/scripts/ansible/keycloak.yml @@ -0,0 +1,7 @@ +--- +- hosts: localhost + become: true + vars_files: + - ['{{inventory_dir}}/secrets.yml'] + roles: + - keycloak diff --git a/keycloak/scripts/ansible/roles/keycloak/defaults/main.yml b/keycloak/scripts/ansible/roles/keycloak/defaults/main.yml index 7e0c487d..8cee07e5 100644 --- a/keycloak/scripts/ansible/roles/keycloak/defaults/main.yml +++ b/keycloak/scripts/ansible/roles/keycloak/defaults/main.yml @@ -1,4 +1,85 @@ --- sunbird_auth_version: 1.0v -keycloak_pkg_src: https://downloads.jboss.org/keycloak/3.2.0.Final/keycloak-3.2.0.Final.tar.gz +#keycloak_pkg_src: https://downloads.jboss.org/keycloak/3.2.0.Final/keycloak-3.2.0.Final.tar.gz +keycloak_pkg_src: http://192.168.1.151/keycloak-3.2.0.Final.tar.gz postgresql_driver_src: https://jdbc.postgresql.org/download/postgresql-9.4.1212.jar + +keycloak_subsystem: ' + + auth + ' +keycloak_cache_container: ' + + + + + + + ' +keycloak_default_ds: ' + + + jdbc:h2:${jboss.server.data.dir}/keycloak;AUTO_SERVER=TRUE + + h2 + + sa + sa + + ' + +keycloak_ds_driver_path: "/opt/keycloak/modules/system/layers/keycloak/org/postgresql/main" +wildfly_dir: /opt/keycloak +keycloak_download_dir: /opt +keycloak_download_url: https://downloads.jboss.org/keycloak/3.2.0.Final/keycloak-3.2.0.Final.tar.gz +wildfly_user: keycloak +wildfly_group: keycloak +wildfly_standalone_config_path: /opt/keycloak/keycloak/standalone/configuration/standalone-ha.xml +keycloak_ext: +keycloak_download_file: keycloak-3.2.0.Final.tar.gz + +keycloak_ds_driver_url: https://jdbc.postgresql.org/download/postgresql-9.2.1212.jar +keycloak_ds_driver_name: "postgresql" +keycloak_ds_driver_module: ' + + + + + + + + + + + + ' +keycloak_custom_driver: ' + + + org.postgresql.xa.PGXADataSource + + org.postgresql.ds.PGPoolingDataSource + ' +keycloak_custom_ds: ' + + jdbc:postgresql://11.0.0.6:5432/keycloak + org.postgresql.Driver + postgresql + + keycloak + KeyCloaK#2 + + + + true + + + ' + +keycloak_management_user: "admin" +keycloak_management_password: "{{keycloak_password}}" +theme: "sunrise.tar.gz" +dest_theme: "/opt/keycloak/themes/" +theme_file: sunrise +keycloak_home: /opt/keycloak diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml index 01efff08..08a4b578 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml @@ -1,44 +1,68 @@ - name: Create sunbird auth directory file: - path: sunbird_auth_{{sunbird_auth_version}} + path: sunbird_auth_{{sunbird_auth_version}}/providers state: directory mode: 0755 - name: get the keycloak tarball - get_url: url={{keycloak_pkg_src}} dest=sunbird_auth_{{sunbird_auth_version}} force=no owner={{wildfly_user}} group={{wildfly_group}} + get_url: url={{keycloak_pkg_src}} dest=sunbird_auth_{{sunbird_auth_version}}/ force=no -- name: get the postgresql driver - get_url: url={{postgresql_driver_src}} dest=sunbird_auth_{{sunbird_auth_version}}/modules/system/layers/keycloak/org/postgresql/main force=no owner={{wildfly_user}} group={{wildfly_group}} +- name: Extract keycloak-3.2.0.Final.tar.gz + shell: cd sunbird_auth_{{sunbird_auth_version}} && tar -xvf keycloak-3.2.0.Final.tar.gz --strip 1 -- name: Clone sunbird auth repo - git: - repo: https://github.com/project-sunbird/sunbird-auth.git - dest: sunbird-auth - refspec: refs/heads/master +- name: Create sunbird auth directory + file: + path: sunbird_auth_{{sunbird_auth_version}}/modules/system/layers/keycloak/org/postgresql/main + state: directory + mode: 0755 + +- name: get the postgresql driver + get_url: url={{postgresql_driver_src}} dest="sunbird_auth_{{sunbird_auth_version}}/modules/system/layers/keycloak/org/postgresql/main/" force=no - name: Build provider package - shell: cd sunbird-auth/keycloak/sms-provider && mvn package + shell: cd ../../sms-provider && mvn package - name: Copy SMS OTP jar file to providers dir - copy: src=sunbird-auth/keycloak/sms-provider/target/keycloak-email-phone-autthenticator-1.0-SNAPSHOT.jar dest="sunbird_auth_{{sunbird_auth_version}}/providers" + copy: src="../../sms-provider/target/keycloak-email-phone-autthenticator-1.0-SNAPSHOT.jar" dest="sunbird_auth_{{sunbird_auth_version}}/providers/" -- name: Copy Custom Validation theme html to sunbird login theme - copy: src=sunbird-auth/keycloak/sms-provider/templates dest=sunbird_auth_{{sunbird_auth_version}}/themes/sunbird/login +- name: Create sunbird auth directory + file: + path: sunbird_auth_{{sunbird_auth_version}}/themes/sunbird/login/ + state: directory + mode: 0755 -- name: Copy configuration templates to Keycloak - copy: src=sunbird-auth/keycloak/scripts/ansible/roles/keycloak/templates/ dest="sunbird_auth_{{sunbird_auth_version}}/standalone/configuration/standalone-ha.xml" +- name: Copy Custom Validation theme html to sunbird login theme + copy: src="../../sms-provider/templates/" dest="sunbird_auth_{{sunbird_auth_version}}/themes/sunbird/login/" force="yes" - name: XML file template: - src: sunbird-auth/keycloak/scripts/ansible/roles/keycloak/templates/standalone-ha.xml + src: "roles/keycloak/templates/standalone-ha.xml" dest: "sunbird_auth_{{sunbird_auth_version}}/standalone/configuration/standalone-ha.xml" + mode: 0750 - name: Copy module.xml template: - src: sunbird-auth/keycloak/scripts/ansible/roles/keycloak/templates/module.xml.j2 + src: roles/keycloak/templates/module.xml.j2 dest: "sunbird_auth_{{sunbird_auth_version}}/modules/system/layers/keycloak/org/postgresql/main/module.xml" + mode: 0750 + +- name: Create sunbird auth directory + file: + path: sunbird_auth_{{sunbird_auth_version}}/bin/sms-provider + state: directory + mode: 0755 - name: Create SMS provider configuration file template: - src: "sunbird-auth/keycloak/scripts/ansible/roles/keycloak/Msg91Creds.json.j2" + src: "roles/keycloak/templates/Msg91Creds.json.j2" dest: "sunbird_auth_{{sunbird_auth_version}}/bin/sms-provider/Msg91Creds.json" + mode: 0750 + +- name: remove the Keycloak zip + become: yes + file: path="sunbird_auth_{{sunbird_auth_version}}/keycloak-3.2.0.Final.tar.gz" state=absent + +- archive: + path: sunbird_auth_{{sunbird_auth_version}} + dest: "/home/ttpllt23/Desktop/sunbird_auth_{{sunbird_auth_version}}" + format: zip diff --git a/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev b/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev index 59bfef1c..acbdcbce 100644 --- a/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev +++ b/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev @@ -7,12 +7,12 @@ node('build-slave') { try { stage('Build'){ - sh('cd sunbird-devops/ansible && ansible-playbook -i ../../ansible/inventories/dev keycloak.yml --tags deploy --vault-password-file /run/secrets/vault-pass ') + sh('cd sunbird-auth/keycloak/scripts/ansible && ansible-playbook -i inventories/dev keycloak.yml --tags build --vault-password-file /run/secrets/vault-pass') } stage('Archive'){ - archiveArtifacts 'keycloak_build/login.tar.gz' - archiveArtifacts 'keycloak_build.tar.gz' + // archiveArtifacts 'keycloak_build/login.tar.gz' + // archiveArtifacts 'keycloak_build.tar.gz' } } catch (err) { From 1be99a18321d687bf381e0bed235197fb973fd8f Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Wed, 20 Dec 2017 23:46:17 +0530 Subject: [PATCH 04/41] Issue #24 chore:Sunbird auth package build --- .../inventories/local/group_vars/local-es.yml | 6 - .../local/group_vars/local-log-es.yml | 6 - .../group_vars/local-postgresql-master.yml | 25 - .../inventories/local/group_vars/local.yml | 291 ------- .../local/group_vars/localhost.yml | 291 ------- .../scripts/ansible/inventories/local/hosts | 166 ---- .../ansible/inventories/local/secrets.yml | 806 ------------------ 7 files changed, 1591 deletions(-) delete mode 100644 keycloak/scripts/ansible/inventories/local/group_vars/local-es.yml delete mode 100644 keycloak/scripts/ansible/inventories/local/group_vars/local-log-es.yml delete mode 100644 keycloak/scripts/ansible/inventories/local/group_vars/local-postgresql-master.yml delete mode 100644 keycloak/scripts/ansible/inventories/local/group_vars/local.yml delete mode 100644 keycloak/scripts/ansible/inventories/local/group_vars/localhost.yml delete mode 100644 keycloak/scripts/ansible/inventories/local/hosts delete mode 100644 keycloak/scripts/ansible/inventories/local/secrets.yml diff --git a/keycloak/scripts/ansible/inventories/local/group_vars/local-es.yml b/keycloak/scripts/ansible/inventories/local/group_vars/local-es.yml deleted file mode 100644 index 947c47f1..00000000 --- a/keycloak/scripts/ansible/inventories/local/group_vars/local-es.yml +++ /dev/null @@ -1,6 +0,0 @@ -es_heap_size: 1500m -es_etc_cluster_name: sunbird-dev -es_etc_discovery_zen_minimum_master_nodes: 2 -es_snapshot_host: "{{ groups['es-backup'][0] }}" -es_restore_host: "{{ groups['es-backup'][0] }}" -snapshot_base_path: application diff --git a/keycloak/scripts/ansible/inventories/local/group_vars/local-log-es.yml b/keycloak/scripts/ansible/inventories/local/group_vars/local-log-es.yml deleted file mode 100644 index a62feed5..00000000 --- a/keycloak/scripts/ansible/inventories/local/group_vars/local-log-es.yml +++ /dev/null @@ -1,6 +0,0 @@ -es_heap_size: 1500m -es_etc_cluster_name: sunbird-log-dev -es_snapshot_host: "{{ groups['log-es-backup'][0] }}" -es_restore_host: "{{ groups['log-es-backup'][0] }}" -snapshot_base_path: logger -es_host: "{{ groups['log-es'][0] }}" diff --git a/keycloak/scripts/ansible/inventories/local/group_vars/local-postgresql-master.yml b/keycloak/scripts/ansible/inventories/local/group_vars/local-postgresql-master.yml deleted file mode 100644 index 804b9da3..00000000 --- a/keycloak/scripts/ansible/inventories/local/group_vars/local-postgresql-master.yml +++ /dev/null @@ -1,25 +0,0 @@ -# postgresql_users should only be created in master and replicated to slave -postgresql_databases: - - name: "{{kong_postgres_database}}" - - name: "{{keycloak_postgres_database}}" - - name: "{{application_postgres_database}}" - -postgresql_users: - - name: "{{ postgres_replication_user_name }}" - password: "{{ postgres_replication_user_password }}" - role_attr_flags: REPLICATION - - name: "{{ postgres_exporter_user }}" - password: "{{ postgres_exporter_password }}" - role_attr_flags: SUPERUSER - - name: "{{kong_postgres_user}}" - password: "{{kong_postgres_password}}" - db: "{{kong_postgres_database}}" - priv: "ALL" - - name: "{{keycloak_postgres_user}}" - password: "{{keycloak_postgres_password}}" - db: "{{keycloak_postgres_database}}" - priv: "ALL" - - name: "{{application_postgres_user}}" - password: "{{application_postgres_password}}" - db: "{{application_postgres_database}}" - priv: "ALL" diff --git a/keycloak/scripts/ansible/inventories/local/group_vars/local.yml b/keycloak/scripts/ansible/inventories/local/group_vars/local.yml deleted file mode 100644 index 9c5173b7..00000000 --- a/keycloak/scripts/ansible/inventories/local/group_vars/local.yml +++ /dev/null @@ -1,291 +0,0 @@ -# ENVIRONMENT CONFIGURATION -env: local #Name of the environment, e.g. dev, staging or production. -proxy_server_name: dev.open-sunbird.org #Domain on which the portal will be accessed. e.g. staging.{implementation-name}.org -proxy_site_key: "{{ vault_proxy_site_key }}" #SSL certificate's site.key file contents. More details in this wiki: https://github.com/project-sunbird/sunbird-commons/wiki/Updating-SSL-certificates-in-Sunbird-Proxy-service -proxy_site_crt: "{{ vault_proxy_site_crt }}" #SSL certificate's site.crt file contents. More details in this wiki: https://github.com/project-sunbird/sunbird-commons/wiki/Updating-SSL-certificates-in-Sunbird-Proxy-service -ansible_connection: "local" - -# DB CONFIGURATION - -## Below passwords are used by DB install scripts when creating databases. Please use strong passwords. -application_postgres_password: "{{vault_application_postgres_password}}" #Password for Application database. -keycloak_postgres_password: "{{vault_keycloak_postgres_password}}" #Password for Keycloak (Authentication service) database. -kong_postgres_password: "{{ vault_kong_postgres_password }}" #Password for Kong (API Manager) database. - -## Postgres configuration -swarm_address_space: 10.0.0.0/16 #Application server address space (e.g. 10.3.0.0/24), also the agentpublicSubnet if using Azure scripts provided -keycloak_address_space: 10.113.0.0/24 -postgres_address_space: 10.10.0.0/24 - -## Cassandra configuration -cassandra_server_private_ip: 10.10.4.4 #Private IP of cassandra server -keystore_password: "{{vault_keystore_password}}" #Password to use for encrypting cassandra keystore. Use a strong password. -truststore_password: "{{vault_truststore_password}}" #Password to use for encrypting cassandra truststore. Use a strong password. - -# APPLICATION CONFIGURATION - -kong_host: api-manager_kong - -## DB address -application_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server -keycloak_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server -kong_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server -sunbird_mongo_ip: 10.10.2.5 #Private IP of Mongo DB server -sunbird_cassandra_host: 10.10.4.4 #Private IP of Cassandra server -sunbird_es_host: 10.10.3.7,10.10.3.8,10.10.3.6 #Private IP of Elastic Search server. If ES cluster has multiple nodes then add all nodes by separating them with comma. e.g. 10.2.0.1,10.2.0.2,10.2.0.3 - -## Application server configurations -sunbird_ekstep_api_base_url: https://qa.ekstep.in/api #API base URL of the Ekstep environment. Use `https://qa.ekstep.in/api` for non-prod deployments, and use `https://api.ekstep.in/` for prod deployment. -sunbird_ekstep_proxy_base_url: https://qa.ekstep.in #Base URL of the Ekstep environment. Use `https://qa.ekstep.in/` for non-prod deployments, and `https://community.ekstep.in/` for prod deployment. -sunbird_env: qa #Ekstep environment to connect to. Use `qa` for non-prod deployments, and `prod` for prod deployment. -sunbird_mail_server_host: "{{ mail_server_host }}" #SMTP server IP. Could be ignored if not mails are to be sent. -sunbird_mail_server_port: "{{ mail_server_port }}" #SMTP port. Could be ignored if not mails are to be sent. -sunbird_mail_server_username: "{{ mail_server_username }}" #SMTP username. Could be ignored if not mails are to be sent. -sunbird_mail_server_password: "{{ mail_server_password }}" #SMTP server pasword. Could be ignored if not mails are to be sent. -sunbird_mail_server_from_email: support-dev@open-sunbird.org #Email ID that should be as from address in mails - -## Keycloak (auth server) login details -sunbird_sso_username: "{{ vault_sunbird_sso_username }}" -sunbird_sso_password: "{{ vault_sunbird_sso_password }}" -keycloak_admin_username: admin -keycloak_admin_initial_password: "{{ vault_keycloak_admin_password }}" -keycloak_tar_path: keycloak.tar.gz -keycloak_theme_path: artifacts/sunbird - - -## Content Repo configuration -sunbird_api_auth_token: "{{ vault_sunbird_api_auth_token }}" #Authorization key (JWT) to access Sunbird APIs. This will be in the output of deploy-apis.sh script, extracting it out is documented in the deployment wiki. -sunbird_ekstep_api_key: "{{ vault_sunbird_ekstep_api_key }}" #Authorization key (JWT) to access Ekstep APIs. Steps to generate this are documented on https://github.com/project-sunbird/sunbird-commons/wiki/Obtaining-API-token-for-accessing-ekstep-APIs -sunbird_trampoline_secret: "{{ vault_sunbird_trampoline_secret }}" - -# ADVANCED CONFIGURATIONS - -cassandra_listen_address: "{{ cassandra_server_private_ip }}" -cassandra_seeds: "{{ cassandra_server_private_ip }}" -cassandra_broadcast_rpc_address: "{{ cassandra_server_private_ip }}" -cassandra_broadcast_address: "{{ cassandra_server_private_ip }}" -cassandra_listen_interface: '' -cassandra_log_dir: '/var/log/cassandra' -cassandra_root_dir: '/etc/cassandra' -cassandra_version: '3.9' -cassandra_port: 9042 -cassandra_rpc_address: 0.0.0.0 -cassandra_restore_dir: /home/deployer/ -cassandra_backup_azure_container_name: cassandra-backup -cassandra_backup_azure_storage_account_name: "{{ backup_storage_name }}" -cassandra_backup_azure_storage_access_key: "{{backup_storage_key}}" -cassandra_backup_dir: /data/cassandra/backup - -keycloak_url: http://10.113.0.7 - -keycloak_auth_server_url: "https://{{ proxy_server_name }}/auth" -keycloak_realm: sunbird -sunbird_content_player_url: "https://{{ proxy_server_name }}/api/" -sunbird_learner_player_url: "https://{{ proxy_server_name }}/api/" -sunbird_sso_client_id: admin-cli -sunbird_mongo_port: 27017 -sunbird_mongodb_port: 27017 -sunbird_portal_realm: sunbird -sunbird_portal_auth_server_client: portal -sunbird_trampoline_client_id: trampoline -sunbird_appid: sunbird_portal -sunbird_default_tenant: sunbird -sunbird_echo_api_url: "https://{{ proxy_server_name }}/api/echo/" -sunbird_pg_host: "{{ application_postgres_host }}" -sunbird_pg_port: 5432 -sunbird_pg_db: quartz -sunbird_pg_user: quartz -sunbird_pg_password: "{{ application_postgres_password }}" -sunbird_installation: sunbird -sunbird_account_name: sunbirddev -sunbird_account_key: "{{ vault_sunbird_account_key }}" -sunbird_sunbird_quartz_mode: cluster -sunbird_encryption_mode: local -sunbird_cassandra_urls: "{{ cassandra_server_private_ip }}:{{ cassandra_port }}" -sunbird_session_store_type: cassandra -sunbird_keycloak_client_id: 'portal' -sunbird_keycloak_public: true -sunbird_cache_store: "memory" -sunbird_cache_ttl: 1800 -sunbird_portal_title_name: portal -sunbird_web_url: "https://{{ proxy_server_name }}" -sunbird_sso_publickey: "{{vault_sunbird_sso_publickey}}" -sunbird_azure_storage_account: "{{vault_sunbird_azure_storage_account}}" -sunbird_azure_storage_key: "{{vault_sunbird_azure_storage_key}}" -sunbird_container_name: portal -sunbird_cdn_url: https://dev-sunbird-temp.azureedge.net/{{sunbird_container_name}} -mongo_backup_dir: /home/deployer/mongo-backups -sunbird_background_actor_host: actor-service -sunbird_actor_system_name: BackGroundRemoteMiddlewareActorSystem -sunbird_app_url: -sunbird_fcm_account_key: -sunbird_env_logo_url: - - -#player_tenant_dir: -sunbird_dataservice_url: https://{{ proxy_server_name }}/api/ -project: sunbird -application_postgres_database: quartz -application_postgres_user: quartz -keycloak_postgres_database: keycloak -keycloak_postgres_user: keycloak - - -## Cassandra download URI -cassandra_repo: 'deb http://www.apache.org/dist/cassandra/debian 39x main' -cassandra_repo_key: 'https://www.apache.org/dist/cassandra/KEYS' - -#API Manager -kong_postgres_port: 5432 -kong_postgres_user: api_manager_dev -kong_postgres_database: api_manager_dev - -es_curl_host: 10.10.3.7 - -## Logging details -syslog: - host: 172.16.0.5 - port: 51415 - -## PostgreSQL config -postgres_replication_user_name: replication -postgres_replication_user_password: "{{ vault_postgres_replication_user_password }}" - -postgresql_hba_entries: - - { type: local, database: all, user: postgres, auth_method: peer } - - { type: local, database: all, user: all, auth_method: peer } - - { type: host, database: all, user: all, address: '127.0.0.1/32', auth_method: md5 } - - { type: host, database: all, user: all, address: '::1/128', auth_method: md5 } - - { type: host, database: all, user: "{{ postgres_exporter_user }}", address: '{{ swarm_address_space }}', auth_method: md5 } - - { type: host, database: replication, user: "{{ postgres_replication_user_name }}", address: '{{ postgres_address_space }}', auth_method: md5 } - - { type: host, database: all, user: all, address: '{{ swarm_address_space }}', auth_method: md5 } - - { type: host, database: all, user: all, address: '{{ keycloak_address_space }}', auth_method: md5 } - -ansible_vault_password: "{{ vault_ansible_vault_password }}" -docker_hub_password: "{{ vault_docker_hub_password }}" -jenkins_slave_jenkins_username: "{{ vault_jenkins_slave_jenkins_username }}" -jenkins_slave_jenkins_password: "{{ vault_jenkins_slave_jenkins_password }}" -ops_private_key: "{{ vault_ops_private_key }}" -deployer_ssh_key: "{{ vault_deployer_ssh_key }}" -proxy_prometheus_admin_creds: "{{ vault_proxy_prometheus_admin_creds }}" - -# ADDITIONAL CONFIGURATION -backup_storage_name: "sunbirdbackupsdev" -prometheus_storage_retention_time: 72h0m0s -curl_host: dev.open-sunbird.org - -mail_server_host: smtp.sendgrid.net -mail_server_port: 587 -mail_server_username: azure_886153b1defb14e38ecc9c7301625aba@azure.com -mail_server_password: "{{ vault_mail_server_password }}" - -logger_es_host: "{{ groups['dev-log-es'][0] }}" -logger_es_port: 9200 - -kibana_oauth_redirect_url: https://dev.open-sunbird.org/oauth2/callback -monitor_alerts_slack_channel: sunbird-dev-alert -keycloak: True - -api__host: dev.open-sunbird.org - -proxy_replicas: 2 -proxy_reservation_memory: 32M -proxy_limit_memory: 128M -kong_replicas: 3 -kong_reservation_memory: 64M -kong_limit_memory: 256M -echo_service_replicas: 2 -echo_service_reservation_memory: 8M -echo_service_limit_memory: 16M -adminutil_replicas: 2 -adminutil_reservation_memory: 512M -adminutil_limit_memory: 1024M - -actor_replicas: 2 -actor_reservation_memory: 500M -actor_limit_memory: 1024M - -learner_replicas: 2 -learner_reservation_memory: 1500M -learner_limit_memory: 1500M - -player_replicas: 2 -player_reservation_memory: 256M -player_limit_memory: 512M - -content_replicas: 2 -content_reservation_memory: 64M -content_limit_memory: 256M - -keycloak1_replicas: 1 -keycloak1_reservation_memory: 768M -keycloak1_limit_memory: 1024M - -keycloak2_replicas: 1 -keycloak2_reservation_memory: 768M -keycloak2_limit_memory: 1024M - -monitor_es_host: "{{ groups['es'][0] }}" -alertmanager_host: "{{ groups['swarm-agent-for-alertmanager'][0] }}" -prometheus_host: "{{ groups['swarm-agent-for-prometheus'][0] }}" - -swarm_load_balancer: 10.0.0.100 -filebeat_logtsash_host: "{{ swarm_load_balancer }}" - -expected_minimum_logs_per_minute: 30 - -proxy_prometheus: true - -enable_scraping_docker_metrics: true -enable_mongodb_availability_check: false - -postgres_exporter_postgres_port: 5432 -postgres_exporter_user: postgres_exporter -postgres_exporter_password: "{{ vault_postgres_exporter_password }}" -sunbird_learner_service_base_url: https://dev.open-sunbird.org/api -kong_admin_api_url: http://api-manager_kong:8001 - -postgresql_backup_azure_storage_account_name: "{{ backup_storage_name }}" -postgresql_backup_azure_storage_access_key: "{{ backup_storage_key }}" -postgresql_restore_azure_storage_account_name: "{{ backup_storage_name }}" -postgresql_restore_azure_storage_access_key: "{{ backup_storage_key }}" - -grafana_url: https://dev.open-sunbird.org/grafana -grafana_editor_username: editor - -app_alerts_mailing_list: "rayulu@ilimi.in, harishg@ilimi.in, manzarul.haque@tarento.com,{{devops_alerts_mailing_list}}" -devops_alerts_mailing_list: "deepakn@sahajsoft.com, manojv@ilimi.in, shashankt@sahajsoft.com, mathew.pallan@tarento.com, bineesh.k@riflexions.com" -site_alerts_mailing_list: "shailesh@ekstepplus.org, ashwin@tekditechnologies.com, lakhan_m@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" -keycloak_alerts_mailing_list: "ashwin@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" -api_manager_alerts_mailing_list: "ashwin@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" - -jenkins_url: http://10.20.0.4:8080/jenkins - -kibana_oauth_authenticated_email_domains: - - ekstep.org - - sahajsoft.com - - ilimi.in - - tarento.com - -kibana_oauth_authenticated_email_ids: - - shailesh@ekstepplus.org - - vijetha.nayak@riflexions.com - - bineesh.k@riflexions.com - - arvind.yadav@compassitesinc.com - -monitor_alerts_mail_from_email: alerts@open-sunbird.org -monitor_alerts_mail_server_host: "{{ mail_server_host }}" -monitor_alerts_mail_server_port: "{{ mail_server_port }}" -monitor_alerts_mail_server_username: "{{ mail_server_username }}" -monitor_alerts_mail_server_password: "{{ mail_server_password }}" -env_short_name: dev - -# keycloak sms provider -keycloak_build_src: "keycloak_build" -keycloak_ver: "keycloak-3.2.0.Final" -keycloak_sms_provider_build: "keycloak-email-phone-autthenticator-1.0-SNAPSHOT.jar" -keycloak_sms_provider_templates_src: "templates.tar.gz" -keycloak_sms_provider_templates_dest: "/opt/keycloak/themes/sunbird/login" -keycloak_ekstep_sunbird_login_theme_file: "login.tar.gz" -keycloak_ekstep_sunbird_login_theme_dest: "/opt/keycloak/themes/sunbird/login" -keycloak_postgresql: "postgresql-9.4.1212.jar" diff --git a/keycloak/scripts/ansible/inventories/local/group_vars/localhost.yml b/keycloak/scripts/ansible/inventories/local/group_vars/localhost.yml deleted file mode 100644 index 9c5173b7..00000000 --- a/keycloak/scripts/ansible/inventories/local/group_vars/localhost.yml +++ /dev/null @@ -1,291 +0,0 @@ -# ENVIRONMENT CONFIGURATION -env: local #Name of the environment, e.g. dev, staging or production. -proxy_server_name: dev.open-sunbird.org #Domain on which the portal will be accessed. e.g. staging.{implementation-name}.org -proxy_site_key: "{{ vault_proxy_site_key }}" #SSL certificate's site.key file contents. More details in this wiki: https://github.com/project-sunbird/sunbird-commons/wiki/Updating-SSL-certificates-in-Sunbird-Proxy-service -proxy_site_crt: "{{ vault_proxy_site_crt }}" #SSL certificate's site.crt file contents. More details in this wiki: https://github.com/project-sunbird/sunbird-commons/wiki/Updating-SSL-certificates-in-Sunbird-Proxy-service -ansible_connection: "local" - -# DB CONFIGURATION - -## Below passwords are used by DB install scripts when creating databases. Please use strong passwords. -application_postgres_password: "{{vault_application_postgres_password}}" #Password for Application database. -keycloak_postgres_password: "{{vault_keycloak_postgres_password}}" #Password for Keycloak (Authentication service) database. -kong_postgres_password: "{{ vault_kong_postgres_password }}" #Password for Kong (API Manager) database. - -## Postgres configuration -swarm_address_space: 10.0.0.0/16 #Application server address space (e.g. 10.3.0.0/24), also the agentpublicSubnet if using Azure scripts provided -keycloak_address_space: 10.113.0.0/24 -postgres_address_space: 10.10.0.0/24 - -## Cassandra configuration -cassandra_server_private_ip: 10.10.4.4 #Private IP of cassandra server -keystore_password: "{{vault_keystore_password}}" #Password to use for encrypting cassandra keystore. Use a strong password. -truststore_password: "{{vault_truststore_password}}" #Password to use for encrypting cassandra truststore. Use a strong password. - -# APPLICATION CONFIGURATION - -kong_host: api-manager_kong - -## DB address -application_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server -keycloak_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server -kong_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server -sunbird_mongo_ip: 10.10.2.5 #Private IP of Mongo DB server -sunbird_cassandra_host: 10.10.4.4 #Private IP of Cassandra server -sunbird_es_host: 10.10.3.7,10.10.3.8,10.10.3.6 #Private IP of Elastic Search server. If ES cluster has multiple nodes then add all nodes by separating them with comma. e.g. 10.2.0.1,10.2.0.2,10.2.0.3 - -## Application server configurations -sunbird_ekstep_api_base_url: https://qa.ekstep.in/api #API base URL of the Ekstep environment. Use `https://qa.ekstep.in/api` for non-prod deployments, and use `https://api.ekstep.in/` for prod deployment. -sunbird_ekstep_proxy_base_url: https://qa.ekstep.in #Base URL of the Ekstep environment. Use `https://qa.ekstep.in/` for non-prod deployments, and `https://community.ekstep.in/` for prod deployment. -sunbird_env: qa #Ekstep environment to connect to. Use `qa` for non-prod deployments, and `prod` for prod deployment. -sunbird_mail_server_host: "{{ mail_server_host }}" #SMTP server IP. Could be ignored if not mails are to be sent. -sunbird_mail_server_port: "{{ mail_server_port }}" #SMTP port. Could be ignored if not mails are to be sent. -sunbird_mail_server_username: "{{ mail_server_username }}" #SMTP username. Could be ignored if not mails are to be sent. -sunbird_mail_server_password: "{{ mail_server_password }}" #SMTP server pasword. Could be ignored if not mails are to be sent. -sunbird_mail_server_from_email: support-dev@open-sunbird.org #Email ID that should be as from address in mails - -## Keycloak (auth server) login details -sunbird_sso_username: "{{ vault_sunbird_sso_username }}" -sunbird_sso_password: "{{ vault_sunbird_sso_password }}" -keycloak_admin_username: admin -keycloak_admin_initial_password: "{{ vault_keycloak_admin_password }}" -keycloak_tar_path: keycloak.tar.gz -keycloak_theme_path: artifacts/sunbird - - -## Content Repo configuration -sunbird_api_auth_token: "{{ vault_sunbird_api_auth_token }}" #Authorization key (JWT) to access Sunbird APIs. This will be in the output of deploy-apis.sh script, extracting it out is documented in the deployment wiki. -sunbird_ekstep_api_key: "{{ vault_sunbird_ekstep_api_key }}" #Authorization key (JWT) to access Ekstep APIs. Steps to generate this are documented on https://github.com/project-sunbird/sunbird-commons/wiki/Obtaining-API-token-for-accessing-ekstep-APIs -sunbird_trampoline_secret: "{{ vault_sunbird_trampoline_secret }}" - -# ADVANCED CONFIGURATIONS - -cassandra_listen_address: "{{ cassandra_server_private_ip }}" -cassandra_seeds: "{{ cassandra_server_private_ip }}" -cassandra_broadcast_rpc_address: "{{ cassandra_server_private_ip }}" -cassandra_broadcast_address: "{{ cassandra_server_private_ip }}" -cassandra_listen_interface: '' -cassandra_log_dir: '/var/log/cassandra' -cassandra_root_dir: '/etc/cassandra' -cassandra_version: '3.9' -cassandra_port: 9042 -cassandra_rpc_address: 0.0.0.0 -cassandra_restore_dir: /home/deployer/ -cassandra_backup_azure_container_name: cassandra-backup -cassandra_backup_azure_storage_account_name: "{{ backup_storage_name }}" -cassandra_backup_azure_storage_access_key: "{{backup_storage_key}}" -cassandra_backup_dir: /data/cassandra/backup - -keycloak_url: http://10.113.0.7 - -keycloak_auth_server_url: "https://{{ proxy_server_name }}/auth" -keycloak_realm: sunbird -sunbird_content_player_url: "https://{{ proxy_server_name }}/api/" -sunbird_learner_player_url: "https://{{ proxy_server_name }}/api/" -sunbird_sso_client_id: admin-cli -sunbird_mongo_port: 27017 -sunbird_mongodb_port: 27017 -sunbird_portal_realm: sunbird -sunbird_portal_auth_server_client: portal -sunbird_trampoline_client_id: trampoline -sunbird_appid: sunbird_portal -sunbird_default_tenant: sunbird -sunbird_echo_api_url: "https://{{ proxy_server_name }}/api/echo/" -sunbird_pg_host: "{{ application_postgres_host }}" -sunbird_pg_port: 5432 -sunbird_pg_db: quartz -sunbird_pg_user: quartz -sunbird_pg_password: "{{ application_postgres_password }}" -sunbird_installation: sunbird -sunbird_account_name: sunbirddev -sunbird_account_key: "{{ vault_sunbird_account_key }}" -sunbird_sunbird_quartz_mode: cluster -sunbird_encryption_mode: local -sunbird_cassandra_urls: "{{ cassandra_server_private_ip }}:{{ cassandra_port }}" -sunbird_session_store_type: cassandra -sunbird_keycloak_client_id: 'portal' -sunbird_keycloak_public: true -sunbird_cache_store: "memory" -sunbird_cache_ttl: 1800 -sunbird_portal_title_name: portal -sunbird_web_url: "https://{{ proxy_server_name }}" -sunbird_sso_publickey: "{{vault_sunbird_sso_publickey}}" -sunbird_azure_storage_account: "{{vault_sunbird_azure_storage_account}}" -sunbird_azure_storage_key: "{{vault_sunbird_azure_storage_key}}" -sunbird_container_name: portal -sunbird_cdn_url: https://dev-sunbird-temp.azureedge.net/{{sunbird_container_name}} -mongo_backup_dir: /home/deployer/mongo-backups -sunbird_background_actor_host: actor-service -sunbird_actor_system_name: BackGroundRemoteMiddlewareActorSystem -sunbird_app_url: -sunbird_fcm_account_key: -sunbird_env_logo_url: - - -#player_tenant_dir: -sunbird_dataservice_url: https://{{ proxy_server_name }}/api/ -project: sunbird -application_postgres_database: quartz -application_postgres_user: quartz -keycloak_postgres_database: keycloak -keycloak_postgres_user: keycloak - - -## Cassandra download URI -cassandra_repo: 'deb http://www.apache.org/dist/cassandra/debian 39x main' -cassandra_repo_key: 'https://www.apache.org/dist/cassandra/KEYS' - -#API Manager -kong_postgres_port: 5432 -kong_postgres_user: api_manager_dev -kong_postgres_database: api_manager_dev - -es_curl_host: 10.10.3.7 - -## Logging details -syslog: - host: 172.16.0.5 - port: 51415 - -## PostgreSQL config -postgres_replication_user_name: replication -postgres_replication_user_password: "{{ vault_postgres_replication_user_password }}" - -postgresql_hba_entries: - - { type: local, database: all, user: postgres, auth_method: peer } - - { type: local, database: all, user: all, auth_method: peer } - - { type: host, database: all, user: all, address: '127.0.0.1/32', auth_method: md5 } - - { type: host, database: all, user: all, address: '::1/128', auth_method: md5 } - - { type: host, database: all, user: "{{ postgres_exporter_user }}", address: '{{ swarm_address_space }}', auth_method: md5 } - - { type: host, database: replication, user: "{{ postgres_replication_user_name }}", address: '{{ postgres_address_space }}', auth_method: md5 } - - { type: host, database: all, user: all, address: '{{ swarm_address_space }}', auth_method: md5 } - - { type: host, database: all, user: all, address: '{{ keycloak_address_space }}', auth_method: md5 } - -ansible_vault_password: "{{ vault_ansible_vault_password }}" -docker_hub_password: "{{ vault_docker_hub_password }}" -jenkins_slave_jenkins_username: "{{ vault_jenkins_slave_jenkins_username }}" -jenkins_slave_jenkins_password: "{{ vault_jenkins_slave_jenkins_password }}" -ops_private_key: "{{ vault_ops_private_key }}" -deployer_ssh_key: "{{ vault_deployer_ssh_key }}" -proxy_prometheus_admin_creds: "{{ vault_proxy_prometheus_admin_creds }}" - -# ADDITIONAL CONFIGURATION -backup_storage_name: "sunbirdbackupsdev" -prometheus_storage_retention_time: 72h0m0s -curl_host: dev.open-sunbird.org - -mail_server_host: smtp.sendgrid.net -mail_server_port: 587 -mail_server_username: azure_886153b1defb14e38ecc9c7301625aba@azure.com -mail_server_password: "{{ vault_mail_server_password }}" - -logger_es_host: "{{ groups['dev-log-es'][0] }}" -logger_es_port: 9200 - -kibana_oauth_redirect_url: https://dev.open-sunbird.org/oauth2/callback -monitor_alerts_slack_channel: sunbird-dev-alert -keycloak: True - -api__host: dev.open-sunbird.org - -proxy_replicas: 2 -proxy_reservation_memory: 32M -proxy_limit_memory: 128M -kong_replicas: 3 -kong_reservation_memory: 64M -kong_limit_memory: 256M -echo_service_replicas: 2 -echo_service_reservation_memory: 8M -echo_service_limit_memory: 16M -adminutil_replicas: 2 -adminutil_reservation_memory: 512M -adminutil_limit_memory: 1024M - -actor_replicas: 2 -actor_reservation_memory: 500M -actor_limit_memory: 1024M - -learner_replicas: 2 -learner_reservation_memory: 1500M -learner_limit_memory: 1500M - -player_replicas: 2 -player_reservation_memory: 256M -player_limit_memory: 512M - -content_replicas: 2 -content_reservation_memory: 64M -content_limit_memory: 256M - -keycloak1_replicas: 1 -keycloak1_reservation_memory: 768M -keycloak1_limit_memory: 1024M - -keycloak2_replicas: 1 -keycloak2_reservation_memory: 768M -keycloak2_limit_memory: 1024M - -monitor_es_host: "{{ groups['es'][0] }}" -alertmanager_host: "{{ groups['swarm-agent-for-alertmanager'][0] }}" -prometheus_host: "{{ groups['swarm-agent-for-prometheus'][0] }}" - -swarm_load_balancer: 10.0.0.100 -filebeat_logtsash_host: "{{ swarm_load_balancer }}" - -expected_minimum_logs_per_minute: 30 - -proxy_prometheus: true - -enable_scraping_docker_metrics: true -enable_mongodb_availability_check: false - -postgres_exporter_postgres_port: 5432 -postgres_exporter_user: postgres_exporter -postgres_exporter_password: "{{ vault_postgres_exporter_password }}" -sunbird_learner_service_base_url: https://dev.open-sunbird.org/api -kong_admin_api_url: http://api-manager_kong:8001 - -postgresql_backup_azure_storage_account_name: "{{ backup_storage_name }}" -postgresql_backup_azure_storage_access_key: "{{ backup_storage_key }}" -postgresql_restore_azure_storage_account_name: "{{ backup_storage_name }}" -postgresql_restore_azure_storage_access_key: "{{ backup_storage_key }}" - -grafana_url: https://dev.open-sunbird.org/grafana -grafana_editor_username: editor - -app_alerts_mailing_list: "rayulu@ilimi.in, harishg@ilimi.in, manzarul.haque@tarento.com,{{devops_alerts_mailing_list}}" -devops_alerts_mailing_list: "deepakn@sahajsoft.com, manojv@ilimi.in, shashankt@sahajsoft.com, mathew.pallan@tarento.com, bineesh.k@riflexions.com" -site_alerts_mailing_list: "shailesh@ekstepplus.org, ashwin@tekditechnologies.com, lakhan_m@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" -keycloak_alerts_mailing_list: "ashwin@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" -api_manager_alerts_mailing_list: "ashwin@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" - -jenkins_url: http://10.20.0.4:8080/jenkins - -kibana_oauth_authenticated_email_domains: - - ekstep.org - - sahajsoft.com - - ilimi.in - - tarento.com - -kibana_oauth_authenticated_email_ids: - - shailesh@ekstepplus.org - - vijetha.nayak@riflexions.com - - bineesh.k@riflexions.com - - arvind.yadav@compassitesinc.com - -monitor_alerts_mail_from_email: alerts@open-sunbird.org -monitor_alerts_mail_server_host: "{{ mail_server_host }}" -monitor_alerts_mail_server_port: "{{ mail_server_port }}" -monitor_alerts_mail_server_username: "{{ mail_server_username }}" -monitor_alerts_mail_server_password: "{{ mail_server_password }}" -env_short_name: dev - -# keycloak sms provider -keycloak_build_src: "keycloak_build" -keycloak_ver: "keycloak-3.2.0.Final" -keycloak_sms_provider_build: "keycloak-email-phone-autthenticator-1.0-SNAPSHOT.jar" -keycloak_sms_provider_templates_src: "templates.tar.gz" -keycloak_sms_provider_templates_dest: "/opt/keycloak/themes/sunbird/login" -keycloak_ekstep_sunbird_login_theme_file: "login.tar.gz" -keycloak_ekstep_sunbird_login_theme_dest: "/opt/keycloak/themes/sunbird/login" -keycloak_postgresql: "postgresql-9.4.1212.jar" diff --git a/keycloak/scripts/ansible/inventories/local/hosts b/keycloak/scripts/ansible/inventories/local/hosts deleted file mode 100644 index 74af6e13..00000000 --- a/keycloak/scripts/ansible/inventories/local/hosts +++ /dev/null @@ -1,166 +0,0 @@ -[dev-postgresql-1] -10.10.0.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-postgresql-master:children] -dev-postgresql-1 - -[dev-postgresql-slave:children] - - -[postgresql-master:children] -dev-postgresql-master - -[postgresql-slave:children] -dev-postgresql-slave - -[postgresql-backup:children] -postgresql-master - -[postgresql-restore:children] -postgresql-master - -[dev-keycloak-1] -10.113.0.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-keycloak-2] -10.113.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - - -[dev-log-es-1] -10.10.3.10 ansible_ssh_user=deployer node_name=dev-log-es-1 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-es-1] -10.10.3.7 ansible_ssh_user=deployer es_instance_name=dev-es-1 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-es-2] -10.10.3.8 ansible_ssh_user=deployer es_instance_name=dev-es-2 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-es-3] -10.10.3.6 ansible_ssh_user=deployer es_instance_name=dev-es-3 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-cassandra-1] -10.10.4.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-swarm-bootstrap-manager] -172.16.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-swarm-manager] -172.16.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-keycloak1] -10.113.0.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-keycloak2] -10.113.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[keycloak:children] -dev-keycloak1 -dev-keycloak2 - -[swarm-agent-docker-prune] -localhost ansible_connection=local - -[dev-kong-api] -localhost ansible_connection=local - -[kong-api:children] -dev-kong-api - -[dev-grafana-dashboards-export] -localhost ansible_connection=local - -[grafana-dashboards-export:children] -dev-grafana-dashboards-export - -[dev-grafana-dashboards-import] -localhost ansible_connection=local - -[grafana-dashboards-import:children] -dev-grafana-dashboards-import - -[swarm-bootstrap-manager:children] -dev-swarm-bootstrap-manager - -[swarm-manager:children] -dev-swarm-manager - - -[dev-es:children] -dev-es-1 -dev-es-2 -dev-es-3 - -[dev-log-es:children] -dev-log-es-1 - -[es:children] -dev-es - -[es-backup:children] -dev-es-1 - -[log-es-backup:children] -dev-log-es-1 - -[log-es:children] -dev-log-es - -[cassandra:children] -dev-cassandra-1 - -[dev-keycloak:children] -dev-keycloak-1 -dev-keycloak-2 - -[swarm-agent-for-prometheus] -10.0.0.9 ansible_ssh_user=ops ansible_ssh_private_key_file=/run/secrets/ops-private-key - -[swarm-agent-for-grafana] -10.0.0.12 ansible_ssh_user=ops ansible_ssh_private_key_file=/run/secrets/ops-private-key - -[swarm-agent-for-alertmanager] -10.0.0.9 ansible_ssh_user=ops ansible_ssh_private_key_file=/run/secrets/ops-private-key - -[local] -localhost ansible_connection=local - -[localhost] -localhost ansible_connection=local - -[non-swarm-nodes:children] -postgresql-master -postgresql-slave -postgresql-backup -postgresql-restore -es -cassandra -log-es -keycloak -local -localhost - -[local-task-runners:children] -kong-api -grafana-dashboards-export -grafana-dashboards-import - -[swarm-nodes:children] -swarm-manager -swarm-bootstrap-manager -swarm-agent-for-prometheus -swarm-agent-for-grafana -swarm-agent-for-alertmanager - -[node-exporter:children] -non-swarm-nodes -swarm-manager - -[log-forwarder:children] -non-swarm-nodes -swarm-manager - -[dev:children] -non-swarm-nodes -swarm-nodes -local-task-runners - diff --git a/keycloak/scripts/ansible/inventories/local/secrets.yml b/keycloak/scripts/ansible/inventories/local/secrets.yml deleted file mode 100644 index be20efff..00000000 --- a/keycloak/scripts/ansible/inventories/local/secrets.yml +++ /dev/null @@ -1,806 +0,0 @@ -$ANSIBLE_VAULT;1.1;AES256 -36303132313138313463326365646333383038393233383933383866373566626136386162613065 -6439656630616138356461336236653930663938666164320a346139373336333761666333336139 -37626139313933356164653232666537663232336334363962323430636139373638313636326531 -6132643336643034620a373532363830633066633137316261616365646239326132333639653334 -30613062383462633164646237616566353235646637353765386239666361346662316238386438 -38336239633038643132343064383932663666373361346162306233346362363863343135663431 -33623431633963343961656539303764626166643634623631303163623537663362373038343264 -33333938333333623064666132363863386231393734333066363563643937303035323237636163 -36343937346533633338646132626461303338633036663035666161616631363130623731656631 -30633834393037383065663931303931373366323933366333313538666136626234613163316139 -31383635346632316162303461613336653833633463316561363739393862316633356231666532 -30616234326235386464386435633334613134353964376132306438393332333436333936363239 -36336232336266303037346138396165346131653833333232313233343864303465646661373561 -65343539653961396562656663306266356538633965653761653834666563346232333065663666 -63336130663034356132383932356466656233613631653538396664383038646230613566326466 -64396363326563613630653133363733343132353930656330373161663837656439376531343733 -65653762623366656334333732653463366239623762366339313966386465316565326665663838 -65646563326264623739663633306634316133626438383462333537316132353265623034306136 -35393036643864353036643265383937363363323232326232356235343562386637303565663061 -62383163313436623633613363633638386430636434646539616334623436316662306466653639 -38653264323330383766663038626263343232356538393237343338396665323062343535373034 -61316534343462353335626166643337623762353437333830303430376161356539643138383733 -63663964366264316639353934613761616466613831626465653662633061633131623733313336 -66333233383930343231363863623634316437623462626665303530303835393733626564326339 -61313861633830366466663836613837366665393130343062336430376236646637653430666663 -39646563623437636438336132316537316363333837353133646536303437666166353237333230 -33326636333362346538626362616161306131623238616563663431623439323563363633623936 -33386230633564396465646266336564363963636439313662613765323935666430636439336631 -64363332666165346530323762323963636165343633393939303965653738616364366432623636 -33386136336163303332343438663330303036333332363530383231316239623838376132316235 -30383533643934646361313663366539316562636563326665656365383837313534346133616531 -35346162333237333835336263613563633731386164306139643338306538666463303163623261 -31626634386138633539396162643063396536313632366161613335656365346464373130333663 -39646261613233636631373761653235366430343438663639326334643735323030663139616434 -66383034633837663433386463356463633133303238383962636430396539663036346330663338 -66323832363561333538393331376465636533396663386135623739333865306530613338623766 -63363732353535303836336462636533623135393164313332656363656262656534353266656239 -33353466363131323736343136333433373433346136373866313166306135326337333837333136 -38663737626630613932383735343838663961393263393266366136386532373365393462336163 -64343238303832663937376133656135643834343061353461626439356265643630656437306135 -32356637363433303465356661346263333561386630323962613265393037663239343062653564 -32656639393939336636656338333866646332303935346539333537623266613863643864653063 -38336337633262636630643262636138346161626538313431383132636639626633363663373736 -32353165373363643136353535316334626635333866316461393730613336666133353734313533 -37616438313466373931636166633133393334376636643738353263626439323139653530313837 -30616434626461636437313566653038383061333366373137643265316633316566653735353734 -39313366373864613839313837376662316231306561336439656330663261643163343039343066 -64613432343332363461366630626435336133616232653032643232343862626135643637666332 -36303536333666356235386338656437653236653530313264633435373765336234386635343435 -66636130323963323265373831313739353738313535393461383031616164343332376565663964 -34656137386532633637643730356135363361643539356433613130646165373065666461646631 -66623263346138616632373164396334613538353235373135656164343035303036656462333062 -31626635636232343965656238323330393962656461343534613131376666663261633261356331 -33356134373164653436613537636531626433313130313431616164663962343233326365376138 -36663936636664313537643861303565643166653965666266393266353135343164623162356334 -63613930323133663464396430653039386538393962303339333236366631393831643239656232 -31383138323466366362623032396633346463346566376330623635636463333733623866396266 -32313763666438353231313132373363353737393335653835623330306633343638326637353531 -38613466386637656531363762626135653362666266393939393966636634616230343238653136 -63613236383734663365656339396135656162366533343539633734386664633561376330653866 -39643235646238343435646166636330613334386138333462633564333131306464316137306664 -61376562396530626338636433303939336431626566643261393763316234626265303338613530 -66336432656363313930613336383636393036386232323737333436393436386538626134383964 -61613939353133376230623066336338663535643932396232323066363463643731613534636134 -34656637306338383131666139336439363437646366396333363837303466376330613763353764 -32383839653136343633323430373737373131613163353233353631373063666234323630343331 -30623137623863393665626562356461306336313463393336383330663861366132663630626136 -61323464656137653431616166366366656566656530363138313935376136656461343366313532 -31373966623662333662313331356233613230653762653635643038633332356161323635346364 -34623138333337333734616431663262393866303736383663306265313330303035306365616566 -37363233336661356135313337336235663063386161306564663334343066623161353966333739 -63316361633433346637366637326631326363653938396638636237373330383033313061643566 -30316532643062346631356266653139656539353462333831643763326537616530323539383831 -62613035366534336632393531633462623662666637363165633633336631373535663261636331 -38353436663139663832323061656165383464353232616330366566663432616563303438383937 -66633563663765393564653035386234386238303037396232656263326564353237363165373230 -63643066323964383030333037646634386130313639633161393939636139373130383739636339 -34666464303933613866313734656235643461666466336439343761323432363631386165636364 -65616634666338393531396132306537653136643035323262333464356132396536326366376631 -31396262666363613138663733316661333763363531366463643564373863386636396637343730 -30643861326639636332643834333662313333643466636165663730356438303139326465616239 -39316563623437306633626136343637313432626533373165343931626536623666633765333262 -63396165333835313937343634356633336134643836356235376131386439383037636230373234 -32343063373063333363363531613562623966643834306566353734313336333537343230626563 -62306339373532383938363934656233643333663662666363323134373835356666643863666538 -37356237396361653032623538303937396464343432623237613965306633376330326537643639 -30653233346134343637656333616233666639643931646633316362353866353131306532386163 -35376135336631353166353565366562626535636562623833616339373532386434383431633565 -36343335656265616235666235393661663263616538393465346363656637663765653461653066 -33303338643162393063303336636330656363316239636165383363653661393039363663633362 -39386165303462373865333964623933363930623034653865613565303238376532366637633162 -37313433353332336139633330626130636438663031623131333661343430653033383330646566 -32643861663235396633663930353864636533613036383563653839313532343731346634336466 -31626161386361643562356561643865333962623166376333643066623634653664646231323635 -66333866376632613765306539306636613533633063353233383564653761653237396163396564 -35643566656663363239643632616164393535633635653863653937663331373132613063346238 -62363263396462383862336132643837316430393738323366363035376261353833333137323262 -38333466633034346464393433366131376439396266323331373237393031376466653137643061 -64633535616130353037646334386133653336633739366330613163396237356665366239646236 -35623531336239656137613933373536653530663936323735346238336463663834666537653365 -31656339373264373931663764633235616463366266323939356539343064393064323561666631 -31346533323334633731636366383136613637376431363532633534623033643662363263383965 -32646232303264643034396664663635366262316234613732663736626162623266353334363564 -35326133643166396134333963303934353266333331666138623664396436383064663835643637 -38373866363835623933393734643535643962666331333561663334303433366564303263393037 -30636133303939636635656564613766656363666361326461646136336661373732636633396637 -37623034336261626665613739366630616438396533666436623632663162393933386362313966 -39616138303938303132656439643966643634636638343534333030343833393064613837366336 -62643962313366633434316237316135363765656637636563643965373830633962373861313031 -34343633613938383031363433646133623931376465613034346562666562383763626530636366 -33366565646565623562353466633062356433653562633931333866646339656466623738353839 -35343036306664313539303030363464653536373365396136306463393636376434376532653039 -63636236306461336332643937326461323961373639363061663165356435636466393361323834 -36663232333237653031373332636539613631626234366137373861646135313535656463623337 -31363265383933343634643862623733666237626130303936343736633861616561316239336162 -30346533393662623361656134613831323236316238663930633231663865353133336432343937 -32396535613035376564393761313230656462626433343664633338653065613535313065376538 -31633932663362366536633466616235333337323939356131343135343836383134393566323630 -64636338613762373463636633646436303137323937656531386233656334333434326566373163 -63303138633438626437373465353130346534376433363361356535306536646564313736336237 -63323336623830333931613165366463363337623165653164663731393766356462313839376435 -66346362396234323764646163653561316531623061346238303032333035623333383563396530 -32396230336538333563363236313335643862393162613637373539343634653532613336313663 -30393864363963626134323963643864383739663833306365313434333739353532666130316265 -33316438636262373862396136663061393962633037643532343236376639366136306236316461 -31393362366531333964653763633632343962343239616132616361663665623663303065323366 -61303131666138373337313565363435316238313830343965636430336532316666383939633933 -66346231373438323066326231633336666535646232393933336330643666326534356164336636 -39353438616563383265366330643837356263343466663537356337616166623037303238313061 -66316666623866633035326336653431366665616235363432643139373961663435366331313234 -39663431353161386231353636656331656134396334396439383637303561366537313632646539 -36636336666433363731656136373561393632336235663266306166663134333465366438393762 -66393534663739323263303333353739616336316539623537303839656438356534616262336633 -34656466656230316532303039656639323835613833653739656339666264616363323363666330 -38616464393163653037613030323032656562316535306265326262633962313534643836633233 -61386539373036306634333764363366383566646137393034346565366366396136343032653538 -32323335306438303861613136613937343961666537333161613939653564366439353537363465 -33376361393532313962306435313730303866643462316537373632396362316166396166643437 -39396239393864323661643331643938646335353032363262326165373465643436306631666164 -34306661353536383938626632323966643561313864613630353765313230386239663661396432 -66383761623539376634376661633132613032333464666639633531643963366533613536353863 -64333433396564386139656238316638323966616231336361396238663433636237653766623062 -37656534373031656662333464663937633864393761666663303462353333343661656537383736 -38343339303465343839666132386239323734643461316566333166646637373238613836303738 -30323939366539313339313239383836616537663465626635656234363966383766363263643763 -36353865393461386633366562353161636166313039363834323838643834326464323136666537 -63346564623537323161653437663762356632366439636235656131393863333530373230373936 -65326539356438643337356538303031363038366334383834323139643830323531616632303037 -35363566636564336161663933323137393431396463653130303634353534633063613438623861 -38636164346536373838626264366361373634666131306532326539316233636165313631326631 -63643735633933316237636231323432646439633538366535316165623838376362303962313733 -39313365636634393639346532383135333566613361363530656534393561653565393737623061 -36633035383636343339613964643638646636626335303566646234393130613264616539383539 -38383262383462313361363630326161653731306165663038363338623931323862316466626339 -35356233373461616463636530373962306134636565643466613963396364643835373364343562 -66316630626630306361313837386236633433323438653264316464313763336163623031353166 -39393036633933656666396465663339326663306338356332333738663161323837653431383037 -39333463623538306666653830616630666335313664316238326264376237656537393632636237 -32323063356663616261333561646562356233353237303166303062636332636135633634313131 -35663064373436386166393564343933646630303635666234663061323638373338633662353064 -61363838613836643662386431366362333934373964346432616138336337393034663762376334 -31386135616333663334663130383530393836333037646336393434376233363638326661656662 -34346363343131373564663931316431316261666536396231633436363266366231393464303438 -62373364626339393961656235626163663837353361363036313634653230316366323065333933 -64326334656661393432313737643735373633313263626463616264363463343434663832633135 -37633938306362303262636663633231666634306463656663653535663063623233383362333631 -38353237373361636637616239613334623364623232326662646461373034383030666561613764 -31376533663666376437663363333763663761643533393937363731363636346263396436326366 -62316337336533326266353862633437313338646235316537626335363438643363396235663231 -63333732303536643036613063313962623165633562643534636339346635346563313437646633 -61363535363234623439666365316134396633396139396663303263353934396365363837363361 -36353966366666626236356331303333333332326465656266393165653632336532353930626363 -38303135313837326465373139626138373430393763376635313062386132383738393037613965 -66343838383665313430313564653131373863646130386433626164646131653234616238356236 -61393530616566656162643763363166313665653238323836356539653064646661306635633038 -61663631313031666564333361653337303731656639356362346639303561393265303461623364 -61666637646533613831383863353562336363663263646437376164353063373934346139353237 -35396132353766653836646532616435633162663335393734623336643231306538666235653532 -66373364336261363737396634346530346266303565613262373639393837626630613432316335 -35353438326336316463323135313238643863653663383437306566623634336466663464623364 -61336562303566373732363231366163383538333636353366306631643339396635623839383739 -35303433616436303335633334316162663938306631636362366334303836613035646231633062 -38636530343037356435343039373935343737613635383666613666613336613933306433346536 -33353034303662386164303130633739396630323930646332343461303637623836323138613037 -38323137356335613362666263386538316563323834626631396661343431353162313263636537 -66333663323366333734636262326335616634656366646566353963646563646331363864643235 -35316338356263326566343462353331323565363737393030373136303634303236313266343030 -31626438346266633234633263643831613964313562613065393737363237666537636536616135 -39653761666363303362366439373938313063306364393161656332626138333235306464306439 -64356433303262353636336535376535383639376361383661646330643561383738373535663635 -61383664363262386666613763386533303438366666383035326235303932656336383535323738 -62623636336164323462653939386130303662333037616562326432363537653437376364343630 -39656634656133353639616637656166633537383465323463626636663030303139313062633337 -64626664373038373833656664663630383231373161313538336134623135613737633831383362 -31386439653865313765336133316337386664653939343162373834613737373062653036396534 -64643133396530326335636332376634393734353135373863653237616162353262376139353237 -35643764333365393135386363646438306362646561346665343163383834363931643135366137 -38633931316436623465306533636664346433386230613436656562653635346161646534336665 -62303136383563366134323035333635363337366539643332336237306235643532633634383936 -31316335663833316163316364383564626236343164333538356333323761363736313263323137 -37613933366566383265356561386238656334613631643232343862373833623538636236316536 -33386631343265663032383735643361636332613835333833383130316662646463343139613530 -61326433616163626336343532323839393065656630613534613466633763353061353930653437 -33653232326636653039666533323735373736346532333337363163316631656530613935333864 -38393833336161643136383835373432363939366166626566633064356366663337373933323934 -39313964343035333562303861616166393961353166346638393633663636353930333563633365 -63633663643864383661306236376166643366616165346331323761656666393936363631363031 -31373463363066376661306133346366663239393333376564373133393432353866653462383662 -36313661663862363662386564356363316634363964336537636561653730613436396165356433 -38666532646436633132653964313737343165303938653966336231663138373265343363313935 -33383961623431333161363661356163396438633565663964663162303362363063366465303933 -36333662633930313238613662323063663634643037323739393231656631333632393136306439 -33643439323263666337333865316664336332656235373731643139373732396136626534316330 -36636461616230613632313966663762663533303037373763313562306562373232316332356634 -34333935353333346335616133303235376336326661396266653934373765343663666338306537 -38646230306562313538636136306531343765326439663636373763373764666336636133386466 -61613665316361393631313564356339626161313135613037376332626636313766353731633430 -35346635643239636133383865396634653665333431626333323336636239363063646535363239 -32626331383333376365383533363132366364316639356632656339396263306134376136663534 -63396535343938376337626433333539393134363434393230633566326332303666343434303832 -64313063363966333232383138383539656565343834386534366661626266666334653066656537 -32323337343336333536353263653066643731373766376330613232386564316263336166376461 -38326362306664313336326534623436323336393036323961616262656236626336646331323238 -39336233333832356234363065323762623734353439363538646362626534336133313931353537 -62366431373537343464343235343464326462616466613038313536646466393965636463393163 -30343363363530383361653433643035346335663535376665653737303064353662636531663331 -31663734663266343566643630323738386337656530646334303936636562376238313936353139 -65346438386263646231343031363162336134363532623665396666313933356134666334353365 -39306536353238653761363735383064363533343834646265353834653137343937633966666235 -30623434366439633234643265613530386134393466373365366339363561373132343134656433 -33303565383837633266346139323561323338353634613037626336353763386239383061346663 -39353062396339393234656164343736313862393335616230313664373139663262633561616436 -66386466663130613663666639613062633234376436623931356332323232353064663761663437 -32366631393833306632653130623161646365383565396430656637646361333366643833383461 -32373833393237623836663637373665373761363463316339343332326564333639656235623738 -36663135633463646564376463353532383134303864303332396366316265613464343134396466 -37656531353137356261383731393162643235313332343262336231333165326632356539313864 -38326665376533626162626538666638343434363263306637643333646636346236396664386234 -66316366336366623432356463383362653937623739333136353239346635323437336361643831 -62663937343562323461343166313430666434366332383462666539626566393164386134386236 -66303637323762666564313230333637646662633738633537323364316164653462626433313861 -38346231633164306432323435313466393830653962353466323962306635316265653466396263 -63393939316430356235326565376531633433626663303734306335666438383439306637666166 -30353766643233386463623666643430313961633561363666303630343231346133616461656662 -61323861333862313531303166376663303933613837386666643039393162396332373261363731 -32303634303132346535366630383761656533316335363837366463323565343062623261376264 -32356239313064303632366264343465643362646431656136343136386539303866396439333936 -62666164373839323732363262343131323338623234326430333538646564653937396133653866 -31373964653039326262316662626266376462316238656132333134303437356136613361666362 -65623362323637336664366433356435303332626536363966393764353635663731386433666134 -38333161653533616462386665633861643330623561393334636663396363363833656439666339 -31386237383531373536623036386437306135376637326134663937373838653063616463363236 -33306462343230303762373335626362393334353531313663333761636536613733323435386663 -33313762326465376134343435353263346532393865373366363935376337636632373034386431 -65316133613634616663376231363136383733336139636335323063613538616434373736336364 -34623666653131333862353931646266643737323865623636623038333636663663383863363336 -66363936303938346435373866306234616164313930653866646164636466333661336632663830 -64396337646636613661333933396336626264346238346361393562633364316361356236663435 -66623063376561396138646666623738663539356138306561353664356365343535306531343332 -64393362333636333135333735616366626266313331343634323338333738356437303462383538 -37396463663731663565313066623931613030303633626266623739383063376536646130333865 -31373263353261356361306639633331663632393338346561383933633838643438643730363565 -36323563343639373639656264623761643263646438333333326364366532336363633563393639 -35623436653566653563353161393438353332613537343336353830306139666631373237336130 -64343131373965383333623833633734653039633138646431633739336264643131386538633836 -61366530373732356530323530663232326335653230303366373461623137363033376138383562 -66373931646162613438323263303763616464323338626334313630373832623234343439363264 -34396533616535303931643630636363393433366463663665393536643835383438663961653435 -34653962636333313936636238316237626234386366363634363739613431646239626439636662 -35623731653937643263656235623466396537613663626237353233633865323633653439396332 -64326362343532346239386435633437646230303031653938616363393261346665653034353833 -65326465663032373932323866396564653538336535373634643332633032323435653439396535 -32373135373363656132383863656266383566363036343232623037363666316234643366623639 -34666531653965323363393664363230666536633064393035646163333730376264363966356638 -37376437376461613035636461663336633330306464396566633361623436356333633234366237 -33616635663966333738346264636534633764376363643233623135376536613730363631316235 -34653235373331663432333635386435353034613831373435666633313765343065396662653932 -66643339313164336239373732393231333037326338303933626430366463353831663536393530 -38626262353335656338623335383666303661373430326535643464363937343064306465646432 -65613335643831366164316365666361613165653863343033653730393236663437616361383165 -65616332366261653461376435343333396333653533353662333261313831633338356531393639 -30326562653862393333613666643332643830303634316637643264383165373539306531313632 -61636132646335656333636363343464356632316534333538383131376432383162646430376431 -63316339353232356432386431353438616337376161326563336461613061313337636539323133 -34646161656565623537336463613235656335346663363439616365316661376435363861326135 -31613532653931636365626264326536623839666637373737323831356461316239373562623336 -32633337623830633731623537353064336533666139333364356437663835656331366339653564 -31396633396162316361346338636362363630376162353733633762373461393063336462633464 -35353530616265353636313338623863613936306663643037363665636236363233386535656437 -61626165366333333736333039623138613835346562356631333730646234333134393366643533 -62356637396466396662656361333432666664633037373262313863333539326563643063656564 -66366637326263323638386232386630396634643132623433343035656361386165616664396633 -33613063633463336430313237373965613565633035623361313162373032386161346139613233 -66333665363466343938626665643632366130353461343533363461653036313233326461363265 -34656166646331303836613039346130656439666530376263316162323233306638306664653561 -64353735613863623166393833613962343464326561326238393231346335396633666233646332 -39303736343632613135373465616264633635326537363835666333343061363739336332373330 -66653864393534663330623039626434626365643538363964613634613061363939613837613261 -38336466323636643438373038666536656633386332366661343861323330306632623130626637 -35613334343731653134323361326563616165333833626134366137376236646337633239636333 -30366636666265306533616138646339393362633236633633313861643364633933376664653035 -36346663643762663365343635383739323165633333353138656366373638356539343939633534 -32333837633636363937353762666162626430393236663238373932663039616464613566613361 -36326632666463353066633764323563613333623333356465353163653431323632653135613061 -37363663613738303265613665623565316331356336623830303432646661333065373530393431 -37656566353130643230376432663132613338653730386464376230316362313533306466666130 -39656536353830343465366162373237376561323566323433313538663237666166626532386262 -35653435386238373431353762353239326365656134386433643466643462636232303236366633 -66336562656264666235396162636433353064353537343538613338653935663930623532656165 -33316562633131363862613566386566383835633065343532643731313234363034333165336131 -36626635616433626564356436383233623030356661616365616365616161336132656639303564 -31323466643464353461306462316538663963613636373831623361393433646465626666366631 -38363264313033656231653161633962626234646239373564663333333434336462356362343234 -62353862343734323339653831656536623265626439343632343161383663373532363765613535 -39656662633732343431616265323266663366346634316135356230336263323563643335336662 -64653064633538653133613735303838396366346665346338303337306637313236313139643135 -35313433366332356366363132323363383533336235333632653265303539326266346137333334 -32346131353435633762643834393230633664373535643762623534346364373163373038343636 -30313663333139353862353630623730666530323262663435653636663839363737393061383066 -31633530623665663838366331636263313265323234653630663661316465653564373163663633 -34663063643164336639363132643731336431646134333263636235343835633937626265393561 -32363939623837333438616461356361643132336130396564323665303463613261343863643266 -31303039633038383631363665396335616336343838376539306238346463376535313561653732 -31376338663165346339643236313038393164646463343062353137663366393735336235646339 -62646232323838613534366164346435366662393865363861396662353666363230373737666261 -66323563383930376237666131646339393032656166626632626439333232633164313831313165 -30376238616435653831636236376332356535666265663863643139643764336630376462333337 -32303537326362643439666136623636353534313366613563313432626266373564393030326632 -30396635393933306464613766306336323233636438396132323338383066636632316330633238 -62613366383336313434343339303166336436393766666561393664636164303566373334336338 -31356162303836623961333638646166373435393137376136386239343430353036353734616230 -33626332316433393466393365323932383837303338383136376338663166383133643364653764 -61383534636130613366366639336566663234636461346461316130396661336262623337393534 -66373036306563373662383335623965323739626236613766366236623062313637323964373038 -38383136333133663364323066366261663734306136653832366134353938303739346234343936 -38303366343366666538333661643433376539653666616666333261656631646537343731653034 -36373832623165333363346363353762663935323737323565353336396630653535343339663037 -32623737633230396562613762646663373833366632313663363261613737383565383633653830 -39613263313465643135336131376534393337666433623262633234646431303264656630386333 -32656362346164646462376464656362386233373039663637383233646461383230646336356433 -36323439653564653438323966393566633339326337646434313930383532663861373237613663 -34623363323735323433363466393835616633316164663833373439316461376164616164653865 -39326163623763383633373561333730336532643966393730623962656338333437366132616338 -36363933353238643464373461323130373930373162333761373363393165313635363766663935 -35303066323334313531616361373835653234373134306233333037336235306134366633623864 -36623235313230656339373739626230316338636430623134353233366261353134616633663463 -65373435366230313861633638303437356262333562303464383536633037316134623833626431 -65313062396337343033636264373032363739393836633665623862633931393264646239343039 -63643231373636636636303331393730663634653831663834633931323733623031326236656265 -33396537656165303964633535633065326533376665323236326266383134376138613538393932 -66616565353236313463393136343238353835653761313562363930373630393065313732346332 -39656537376132306134613838343332383736376230646235333266363136623030356433636131 -62623861376431613431373139376335343135626434323733623434353761393630613531306433 -32636637613864353361653733383965626465386562633331633264386633326165346532626533 -32343637643638643037386236316164363539313437363038393533663238616436653238326136 -35363437653063616562623334333736376639623461333463303466343838313731383363623639 -63636536326438333735376137396435363764656432656132326439363137323533346366393564 -61383635643037626134386461336563643434393636396166353633306162383665363831663561 -32383961353066636532386166323639376266623563613134323236616462393739363430616538 -32376132653436343834363661633138376539666239663136313132643830306139616563656265 -33336664613262326463383064623032383139383434343064363338336463626136643765303437 -62663765326434393830653237363564626632363964373234316233383130333964366663346264 -64616437326139613836623465643266323839356536393265326237386131393166616365636538 -30363332386139646563656664356435633736386165643830313766663637666438356536376530 -66333636336666303766396465383066356138376462616664636136663430646466333239333437 -39316137313665333537356432363835303834376639663362613636663931306538316361656664 -33343533326530343832376562646661653364303866343630623866636161613234313636343138 -31376461333834633566303364333566363932373264323432643139333131323339316531643661 -38363039363361636261633136326564353337303339353437643331313534633632646562636132 -31663739376335613961383766353964653535306664373738626464353438653030346339613536 -34393238636665323732633832353863323933663638663433306230626264323336373531383061 -38666666393062333637393634396638353035373765313637323130646666616664313034663638 -34633235373137326165346530303637633837343463383131386432326430363332356635623235 -32663263386335313837663135663032313765636663356432663733643830333464353634616266 -66656563653037326333656238663937363835646139393230383763613736396466326531383937 -35366266396436623131383966653839323835373032356463336561396265623130346433333630 -33346635313264626434666532396536373965346164393934386330373931646264326433616461 -33666464323465666361353036353831653637393436646238613037636334663863323630346331 -64316563626635346235376463333165333938326166323461653935373966353164383664666461 -61383361653964396666663365613938626534626337363933343464383962623564323039363431 -66386564353431323838396365333234376665636533346562643864636566306633663832646232 -66363033363737616564336632626331346136343762316137373037653034313738656638646133 -62386264666661633036623861633131636666353433616462336230383737636164633362363662 -32323930653732663064343234383136633332316534323238383236326330303533386337363832 -32313036613132333563633333356535323531363230366534616263323962326635376261356164 -30633663386432666466396466376437353066313934303639333935653330343434643266613065 -39336662326561656638616230326334376637303431666539333439313636383437353066393532 -63343331663566653665343533333935383937666133353037396438616461343038343666633636 -36353834323435323633303738653262623635313134333364663633343562356364326365613764 -31383362366233323937393065653464396663333830326337616464386434336337333434366533 -32323338363833313565346238626162383763383665626538306564623065363738646138393664 -30623730323038323163636239313433643366353032376234343166656234316230633530373630 -34303137396634313562613562303361306434653833373232393062313461393337646166373964 -63313966303432383830363164373339386139346237313035663966316438343464656236616536 -33336630336532616239316261636438346536303566656332363366336466393531353261653731 -30393665343236663462616562313737386666613736396465656266333533623435646132663466 -32343962663230316636393337613061383330663938613938376433333264393932616331313337 -64616632313263633332363464633166643932333634306337333638616566333431323361653761 -63383137386262633037346562323732663630633939343764313463346432623839346364646361 -34393430386230643863613030326464356532376232666135376436636637626163386162663662 -61393239373662353437623064643835353966643366656435386235343461623734303734373936 -61396630353537623563373736343934663832363138306465323930396532356365363937636539 -36373066383738653465386561343837303035313933636232323763366265353434666536386435 -66383739633437356533386366306130656432356163386365373337656463326638626666323162 -34333137306131386335353064663962336432663730373338313661326266353738326330616239 -33643531656339376663613735646266663065346138313838323061363265666239613663346334 -64323633336632663836626166626163356330343863323939366265366339386236363530353534 -61336633663763303462373463323563346332646534613437323736646639323834373439643430 -32393034646434306163373434623434623836656134383230636236653662306562393335646662 -36316664363334353436633466626137353930653436343163353662633565333338386630393237 -66633732646134383232306466663230333036303939336534613163386562383234616338383166 -39646365383839383065653033613366313739393661656239366661323734353366636266373463 -35303437393061356138393135313832616532356438303434383663353331613030386665386462 -37376566626239363730663464333635353265376635663962336534306262333938333363646163 -64373961313632373365663562393333633539363137303062353834303936393239653937383261 -34323664666234313262326266623465653963396330663638303133626630326466393331363936 -66343730626334393163323561643639363466333966653266623232343063383934666665366630 -36386132346561303831636262393634326561373232366438383532333963316364323031343366 -30383338643035353663646237366431356435346662396436633636343732653132616562643130 -66613263653831363130363436613231626464343234346137623537366331346138633166376334 -37333962363931623033393134386564353265323436353564646634663361353236386332313665 -65656234383831323561643638646139643165643464633836343233326532343362313134623239 -32363762376533393430336133643231366634613934623761333434626437313435616661316231 -36356636656665656562313739393130343162343462336133633561646434613163346130353738 -34303935623936616539636135333761306463393236346436636132383837376333306633636531 -62343166383036353865333737356534353661303330306661323039636131376365383864396163 -62633537663630393665363930646133643464653834616564373530666663386132393235393864 -37653233343936386437336532646664313962333864316438396662326139636161393533666466 -36643034363538306435323464326164616664353066323564323432336261353462373961353237 -63616562373035313561363661366332346130323932393131623538353537633162663362383438 -66633930363733353936613230613438356662633134386664613435666133303136333637616539 -32366164646536363335333365663961643965336332306364363437633762636230393538326265 -30313431623265313634666264366664316361653631306534396265353964393839396331326363 -31636538303362323764313265323462643635323734643435386664316663633335613132363432 -33316561326631313737356231303632653664393863383264633962326637633436393364323864 -63643636636664393331653032376336323039313265633466313965633664346632653237356562 -33393966323937393266336233336566636232616231396465323462353639343230643261393336 -61643134393239386661633833663937653233386235633964366565343232333238363665323063 -39376463393936313932333265373065393333343761363134646565383564616335366630363731 -64333035383031636538313364633438346563323534633462396430353732666361343032626132 -61326339323230393632363934366336663062333832303262623431623961393338386531303763 -38373362643234306538613439306665333130663432373533343739633932383564613036383433 -31656466396436656563303132393033653530393733663531646361643533383639623765373235 -61653635323731396436636531363638646462366565323136333431373063636164666563636665 -38376237623332636234663862363330653138363463323832306330366162656235623737316539 -36393161316134393838323565366333623261396538623737323732653730623265623031333562 -31663964366166633261646163343933666137333738643263333663373365333630326236353263 -66643961313939383736343862303366356161376466323763356162393031353738393065313538 -38623038363065376665313031323636653361333561343536663332616637643131393936346337 -34643639333133366538336539643162303262356239336366316631323431656633653761303266 -66333161633630613533316166633439346137373064363862336664386539316561383464373136 -38303733663164353531663561336137636161333836663963343135326138643363363238376638 -35343233366337653964663635396534373233356235383930316437376363653737386639336636 -31386238323737616139373632663562383734653763333139303239303830363961653961333633 -35336264626634646262663166613331333239623963366133333833656333613837323632313863 -35643733623966613936646636326163363735303733336439353731613062343034626262346661 -35663234663338623361393530626232663561663830636633613431393832373663386238623230 -36653737333563306534653230376239353833653131303035353637323339316235323639366637 -30343335313831376237633932656332306265373530653165653061656261306530653966373132 -64353962626465343639613764333463633365326230336563303231383665393162353034336331 -63333264323264306332323633613163633465376362336466336564303532636465663563663538 -62656632346133653330373737646664386161386264383236336531623931316666343537363466 -64643861643935363433316133633835636166346136363261363735663063343538313766653161 -61613433386165666638633663656235346135353764373132333630353432616433623862306139 -37633066636533326139393033336566666135646132663233303361613833333533666366616437 -39316537353534626330343762623432366239396233333033353238393439323339663339346664 -36386163383466643035643366363639343831613534373466643430623362666638663439373835 -62386662653132643133626463353366366561373338663734363535613838363063366665636637 -34333333316531613931613036383538383333306635646464366463396339313534333638623131 -31663731653535626236623161346561623439356162316537666139343266623138643830363734 -65386136323235616162356439353933353063386661343665663532386532396338353733396663 -33656561653430613832363263306337383334656633376431613135383066333837613165303939 -30636465373735623434323331616539386531386163623265656566623265633238373838633330 -66396639313935623436313733333339623066333838633563643563383233306565376136306632 -31343838346237383362393238373363633237376330316139383638613535643566646464633361 -36343431623165356631383964323561663866656532643439346231393731393838613362666562 -38646237653530623837363165386561663438366663353964333933626136396237616663643566 -36376663363137363835616535623133346136343362373033376562323034656432393064343766 -31666334663263356539346463393232663135313331333435393063333031303063323433663765 -63393734313265306563613630313634333262666334343066343835316461326163646638363961 -36323036386134366232346432393261373631336539653965646431313363613761363433333334 -36303535616135643363333265623236656161373832653835343535373039636563363664656430 -37326631656439363730313831646436333965366232653163336139343763333631396265616562 -38326366396266386663343431306338363033653166663964396631643932396536303536626431 -33396430636130636332346239373536326161396338336536623636363734343832633666323965 -65613735316638663438626237316366643831643764626135366531323835343161316564373764 -65336164656431636632343864376234366139346162663537633465656239643739333265313838 -66363337333966373261336664613666343135663436663632623934363739353932396539353033 -61343161393539386236366562393061336434653535316635373061643832366364643230623436 -64653730303934386537656663366535666131323737323534323531313135316438393838373063 -32383336636333393763643339613939383332646139656564613164353264643236363834373966 -62613532376635643162323834636364363233653437336563393062326137666132343831656434 -34616235366561343766376236376165616630643332363639613866663066326339636164303232 -30376363383431363233363738306230303735663933323530363664376136306236346362323332 -31306365653731373135316439323366666639663765653630613330383635333139383336333634 -34363933636532306433646264323031396364376432323537376236643933333566363135613336 -36386462616363313336623233666564653361306563386663623431643536646637366431623261 -65653338376238613761383532376233393631383133396635633033353933336138383064636538 -33366336396564653134663835343964316261336665303664346166633235383533306234626434 -66633137393336336465313833653430333937623635336230323664396334396538366265653861 -37366464396166616461326435656537383162363966306166303765633739636332336533633063 -39326566666433333939646662336534633064303765316338616239626635336566346137663464 -61666564636332336134363331306337373630653962613962646630356538316233623938633266 -34383737373765653934373233626437643839376334636665303738373035366230666162626163 -63383464623534343464396163626665633462333134663561616533373038373932623536363461 -64613736613433643866396166303132633361313837653639646330663034663630363038363664 -63623061323362383338303536303061346635316532366535303835616231333836653330666661 -30313839373161393735313536383734333262666261633862613363393137346137363437363232 -63653538636633353966306436663835656638356332623237393434353235343064333037656235 -36346162636631343139653634346563356635613665656661316163383962353237343534633339 -38386462323162653039393735393661326665386638323934613439353830663632306332656137 -61363233383535356536333761666564643464316436306235613331356134613834666561303161 -34333830333139333733663632303838653037306135633533363865346432343734303837633061 -64616134393636383331613164393465386630353461623764396534326462623866663066353530 -61643736633430616232633933363364303533336338636230643039386530353233316266656436 -66643433316338353262333661356563633266346331393965643561663864653663663533383665 -37323363343861343737633134666530646237313364323165393732393737646465343163666630 -64643536336433303134333238393861323463663436356433353635326134323439366438353134 -65643065396366363964343236663635313866373265663033326363353034323561666336363762 -64626532393537326539636266323162666662383333663363326232333139363536393537333734 -30333032626162613533613165353165356437376230616335643564623034356131666439613262 -64653533386265303866396135616538633661613036623864313165336632643333626264363639 -66643864376236373266613761323038326664373533363931643264623065633835346331623261 -38313664663062663331633338363036613761366130313464666539393933316564303662666661 -66646232353262616636643034343530313835666163373433633833613837633565386164656235 -66343032316136356232623739613135643165653366623162346234353630306365653438376332 -62316536393831383733303735643436653735396236646430643232346535396533643635356332 -39623031393336313635656535653535613933376232323135376165356662353239333638366633 -30646362663362646439643932303030313738386535363262306438333039376133313935326339 -64363663313934353265326638306262373662373636383135303334386136636166386266613535 -64323235383435363761656234393034646531353836626135303863636637613333383137346235 -37613636363438373830623039623236353736373365363038333637656265383135656164353731 -62323935346535343535333863616363383766333937636464376331306239636563343938303534 -39336337646137363135383134393163306637623964646339663366646130623539303735303833 -36396135316432356534356365316235323437353331346464663739343561353536623031643338 -32613131366235633434373034613766626463623530613032663839336366383335623763656666 -64613634383364643232316166653333356566356232646662666234363635643538653364316565 -63626531376566313933636635653231636438653033346563613964616437366339353131373961 -38656535616332656462626361363364613034623633636138343231643062653936316637333838 -32303131623034343233373336306635663038343234626561376264303635383338663734356237 -62393634633565653331363462346664663434353461623965323838666231666335313031323864 -65353364623330613131366539306564303061383134316362623665666636613936306135386363 -32636536356235323266643961643534653331663361636665353031323464376639356130363765 -63343262316661393931343336363437373336356163663835636366653364323537346532643661 -34666531313064353537666533303837663237313635633934653036353966323765646435626336 -61653338326161333035353631663239366335353239303737616137313364306265326134663037 -31636465623039616361646332303962663937633039666337393762393532313166323633633539 -33666236336133326630323766626533373035316330303262643264633839363337316161383439 -33613165363964356130663963393961626438383531613163663830613835333038336339366465 -36653461306166653633353738393666396261353538393834393637326636616439343131636536 -35653234633566653563383738653538363635316239633736386563393865623264316266373863 -34623235626132336165373134336438653032633534623639663864383438326437386238613062 -39643330633430336435643361643664336330303466333539306361386362366265623734633830 -62663565626366396533643130363662373830623164633536313665656230373830343036633237 -62343332616364653930383766396336386165383133373431623665653038643931313536643732 -34353831323038653963623533336465356337653130333264396231613235303961323230636534 -38623935653833366264316535663133623632363130646136643730373338613230336532343633 -35376463303936346562306161616231623236653164326261323164623735303834363266316537 -36353161613864633131666663646266663463306562646331656563346435386164363132366637 -35316132616661353637303265303137643863366537626533313264656166383461633066336437 -37323732653533643165393931616465626230626663643933313737396537316165326230653463 -61653166396165623464643438626238646630303865313330646234343635623365646665333437 -35333333346338303733306639393533346166653565333362316536356235616162333234633737 -36613030646365666363373063373564656337663837663039643333363365326161326537626335 -65393136306161396166346239323337393232323235373535643765323932353563313631643863 -31613465333439376665363664643433653539666533323531636437356330656361616637376231 -66353139373864636534333966613263613039653832343464313466633235393631323161336330 -66366266616365386538633130333034396138396162663733393836656137336337613062393837 -66323661666137333335393939626232663334333035623434356663336135643837363433306535 -31633564363130336639666538343038323834646536663332306336383864306165373033393563 -33623135333561666265666439353666343437393833613637393634663330656562653631343035 -32336666393131363334323637303939663133613261353965393934633933613534303438333538 -65353930303864646337383237396133346136336136353131323461323262343730323334343035 -62653766366136303338343964643961373532636630353333343032376631353165633438356239 -36323365663366653630323364646465373861643637316538396433333463633934636162643562 -39366532666434313439383864656166323233353763383935333964313438333630636364363366 -39383261623864363633323666663033366564363664356231663032653639623362663061656632 -33373562663932346534393631376663666231303238303232363532663536663630636363366639 -62326631613034366266633834383966613632656664323965393631323665623831343437356363 -32313666633164386232643538663238323932336638396136386238313663313433343031353934 -36353238636539326337303161663135616433633764666462393662313662633466303335633866 -35313637336232353236616139306130326263313336326664313934626561313633346530353134 -35303765366233653635633034633764613861316533633437623261383633373261356135313731 -66316565666134356263393761303533623862613138333134383566326134656435346537353037 -33666635373233323430346565353937396237376232303561356237353632313835326535376631 -30636566386239643036353133393165363939626235323366393431363363303164353261303939 -34633135646132323234383766346263613934393434366535373634376139366233366134366433 -38363738396539393434663361346130383331646565306362343266323131303538323933313430 -64316134653634323962353136353661376466656566383630653963353831363038326535323165 -64383962343563306566613837653432363366313433646631303537316339623162363563373332 -65616239316135333464643730373061616162653833346131633033313633303539636262613763 -65633561623432316435373061633335616530353963313164313535366163623861613464623237 -32343663323636643933663539393538313765623939643331396166333836653730656236663536 -65303961396161386261386630363833633634613431656565326331333136323437326137356263 -34316362376238626333393136346437626535643639393937633532336461333237353765633966 -30666339656661336638376435373561346134383638363566373661333437646362386262646538 -61383232633337336438303761376666336338393133383034343139376264306330333135323030 -61376235663738636435643966306331366433316530396666353365646366316539323038613439 -35656434623163323661376130383061393038633532386563393465643834626630346132323461 -35633966623064623336376665343437613031616237613066336331326339646535363761346163 -37303533336561366133653633366263383132326438326632646661636333383436626535376264 -34363830646664653133363539666534366666653138346235623338363365373263663439396563 -36386331626665653662643164363566656239633564636633396562393037326663356266356339 -38653239616531376664643165633634396533643732613038313361356535616461373235623961 -36376132643932393130663061343366383436666437336366363562373639373465303537313166 -37346265653166306231313635653962363761303733626133633862356161316134326166346362 -32646633363964353937353730623938353061346364373235306132326532616634366330643631 -37353337306261343462373332343133323136363432616165356631356566656134313432363639 -31623066396466383465303262343265623235313261636163376238343861333132356339383663 -36383232383239656635386566666663323762323062636138656265353736323638393933616235 -63346165663930333065653066366532343332366262323662346565333332343532313563393438 -32626231343537313632303137376364626163666462326266646337303262303530323237613365 -38666231646237626238653038363135356531383132366635653163326537633630643063393661 -32323930366436336432633864646565633236616162303439343731306139386463396231313136 -61636434336364303230373432636233343131376163363138666538663763343330646330646465 -66393263313661396266623862393037396330666533643738623966336431633935373863306566 -63356430333232636339376662363463653631323162646666393262363930613166643334313537 -62313463393961336663363338353436366632386461313135653364643937616435363162636235 -39643231333363383531666131313439333331366264656362333439663264396636333263306363 -33363434353331656666363966396135323065363564393835646663643631346530353565326332 -34656431333936663163643238353565326537643839643336653535323432613536633737346332 -66346634613663366630336533633239613238306537376166326231363439333462643534343035 -63643666313765333465333164313332633664383163636238363966363039363662313831353733 -64373435666136303337653333353066643731363433656536666630313464643465313239623462 -39323930343461323037343064653666653738396631613030393034333032666231633936343732 -38396530313734303135303063613765663766303662373562663566303431633937643938313430 -38633061313337383438326134346665303561386431623334616166633036383063323137633239 -35373561353163666262306630353061613861353633616535636236653831373231386337386136 -62303631313538613330353635656562626362663032383236633233343431653237633034316264 -61353839623937366339353865343935313062623965386433633932356466346661393639663135 -65653938363661356562666663326234376330626161663161376135363565663535373562383231 -61333733333365663130313264396130316336656332343934353564653365353863366661666362 -34376161613464653461613830373061323330646130376631363235353935323835643461333065 -36386264653132316364646230313334353639656134396163393136316332613434313536376338 -65383839363432363835653131363963313965346231653137383937623464303439663533636539 -38623430653339353731393764616636376537666366653763346337623535393961313232376434 -36636236303262363737336433653362386633303135336465653764326662646338613537353931 -34336363393737313462646564663761383366316663303530643332326135333962616264643830 -32353162346239636665356339353436333232396635613138303065366534323261623736373633 -38623331663238336661333938383661323939363537356562323533373330336335343063613133 -63373162643738346566303732303531303530316230623432366532633234366262646234303837 -61373733353535343037326164373865313633656238373938396264663537656566643136633535 -65353634333765386562316138633531616437396163366630303931346434336230626138643234 -31666637373464633565326131666234663633376639393662373630383630393336356333366162 -65323630373230313439336565633465363361333661346262313037396131363535633637633530 -38396632393061623534333935366235356136643264363439383731633730306637623437316333 -39383936653031326532656661303361306232393134663231336263313939333233393832666134 -32363931323034366333643066383765386361666266623237623932666532633564323832666264 -39623364626331643063333930666166393533656263653436336265353433303761333861626566 -36633362333331663865366334353730636132643038346661333561363835393031356638393134 -38366565346430383065343532643331303831323566393138653135383338663439393662306563 -34353737376439633837353033626332346632396331643432306339366235616332316634353162 -61323162656666353666623333633238663933646132363338353365336632363937636532666264 -61323838323333353564373635633164383031663434326638653130346334303236326363343435 -35306664333233303965353166346131343136313966366232326535376435346534616431623337 -32353065323638336665613630306232666462613033633032633130633566396266396532393261 -36383831373733353633633963636161646130633763633034356137383038656461343139623430 -31653066386536333633323263666237316461626534623465636536393664643936366434646438 -36333933646263346534316539666132636664383365653939636630333435626532313366356630 -30663035356164376262373036633132636533373065326163313266333262666265616666326132 -36616530316530666639396330373935326438353733386235386664363465343232613236336130 -38333264323462386662393764333364386564303331356534373863343534356433383337353135 -33353961363034363865323331646532333838303135616464616337363935336236333964643632 -63643630343731323331393539613733363033303832323362343761313963366561306464346432 -63313332653037353365323631313230383132333736306338353239346162363931653163313932 -62613333396131323732646161303036623033333763383731306133656237343039313034353030 -34373538376162656266333231336365356562353766386261323566643962623133336465646337 -61373535643133373434633165383538333339346635383735643061343262643535633435396338 -62616234646534396339313636646464386366653235633861373730643361363938376631653563 -39613431343964393933373034363365653239643230363338623234666534343332303236373231 -34313833346263613832326562376563326461333861366139363638306432316438643164623234 -35383338376264306434363739383733313838663964333261333939383364343538396333313136 -63396536613135646235343966303634636636326236356634343930386631633663343134663739 -32313164323539343737663263636365663463313063623139363363383965656333353931623632 -37346161616233396534636563646436363033353839666635343532663965653663653061323934 -30663561353263393634376361373066386530323765343161646364303835666662306562393233 -31393235643536623433646136393732306538646330306163623835313135613762363933643037 -35303666336237373565323262376461393436326665636261323639386262366634336661313565 -39306331396364613939636164626532656438373862303838623438303064623739383639323637 -37386131663465343137383832363737303934633432353438343035623938326435663763656163 -32636337303366333865316131643135363833333562386562633365303266623861306266626330 -64373531346263316364353231383230393737346463303939336163386634313032313733633530 -66616534613237653436643363323237396631393339646534393533316334336364626662663038 -36386438653165383161626230393532656463663238643566303166656238393638343664643163 -62306634633364663166333761386434386635323034306531353562386164633137306462313339 -63333166643136383335346130383436376361373765636438663735393830306631333539343439 -63346464336564313434313538646438393865376562613733393739343239313864666635643832 -34616136613161643933343361633037613266333933363339363130363566623739636532386263 -64383331616161663561613830376430366663303931653534666539663165643061343339383138 -64336261333731393063316162313832633765653665633839613330343062316330623831353331 -62646333373166303538366439663535356661373632636539653333646239663630316138653161 -39376534373862336264393634303339313166383632613564616633396463653731623433323637 -63653433393531376639363037313963366231623161343239643538616534353437653137623738 -39323563633038386462323862636261383031663935353934323563663764343532323338393063 -61323165336530656366316533333432356331316534663131333239373432383830656561393836 -65383263356631323337363963346634633537353131386537303635623834653661393538343366 -65303466373132666536396261636361316365653561633731613539393630323063633761393538 -30356262653562666562643662383430346635326433316138663734303838383635616565326537 -36326330306630313430383538366165643337306262663166306462366139643438323932616635 -64303533373066376263356533376163376339316564316163313335343835663238316337306461 -35393765626338373032306663333337616130326439306164353132666331646635343039653732 -32653662353761656664366335353033643436376231373439323335646562373837306236323635 -39666134306365393762633766313538383635393864353835363366313562343537353163396337 -35376638303361323463313366386162626533323135313934343730396134336365613938643139 -66363435353838666464653833376636333961636235303433656463636132396266326339653566 -31383865323339323962333733323062323264626239653665346232346539363539353539333230 -65653137383831323539356163623465313964653964663234636433396631333165643134383435 -31353132346434393635653833313236393831396664386566613032386534343537306563636631 -36353861663530313534643962366537336139633436323136636530623165303865666435383065 -31653665353833366134386132363162396330353465373462333263393537653839323563373838 -35613166313537353565323766323864656361303165653737356264633634656235666331653634 -63636138656530656264333462613962633434656134353662373165666530623363623834633632 -62313434626131313362333430643432336564613130633366643330346533366633353237666233 -33353137383236383362653361623732356330333833316631343137666164396538323034323165 -66633838326665346531306534613237643938643866303034363137303664366665343634303237 -63646534626338326632303264313737636236393237643935396134656661326435363133653566 -64643562343235326432303532646665363431393063626664626335303438633639323635363766 -32343662343664313139333565326365333630323332646262316535613262353236363537633961 -37306137326139353337396466643932623539326331323736393038373261656665393732353134 -66303065666137336563333164396464653038303530326662613635383563623766353365393162 -31646635303632626233303131303237313438633462376262666463326430323031323165623933 -62613965656661343563383066343530333564626438326262323265326363656530643362326434 -39663337626137333533346434313465393432653266313835343663393936396162356533313034 -34313932363632623363363763376338303131656161326637666436333237633061313537623639 -65333637666432646231343538633865343239613434343839616563656261633562373066643364 -31633166643263393636346539303037666165343131656363633465653566323461623234386130 -62633164333830303633353464613637333031633630386163333531396534376530663330616234 -34356237313430646565346663636138363635623635346561353961316531363038663961343536 -61386532363064396663636236303938393166666439386638633933383633383561663763393062 -61646465326532336236303833353361353638653363376338316163653061616137613864626635 -61636135623139333434336537356663653137336464346565633161666132363562613732313166 -34663964633437393932613534336665366361656535333530613262653564623433393437353835 -32343831323932353163336364343230333962393165666262313736633234643661313837303965 -61623061316462316636366166656634353462343063343064616136643537386562336362373532 -64653631333634616566383637326161663935646266306563313339313339383138633139613136 -66623939666631343466383935613766646631393962633963336263383635383034333761366133 -63333234313731393837616635343634663161393634656165353535323765663331623266343937 -39303562383936323163633165666437383065336631333264646662333464303631386137306531 -66386339663739303230303531616439666137633961623666383935623230353334356432366338 -62633965613539373732653439313334643533383033323837613165653262396462343937626133 -65646432336630613736636233336136633562386233313631306231303132383632386533303734 -64306466323533656632313133633361316163386338303336646130653734343562323362653861 -31383261373432346266386235666261383733346464396163396466333331353634633062343738 -31396438643738303530383131666134366662646164343866383138346465653362663137376262 -35313838663334646235643861636335393038633431643565363632623966633463386532323939 -65393135323930303362373134313266356436323838326665346166346633333936376131313430 -30323361383865343530383536333164313530626363373335353166653066393831383134306464 -62653538373130316266396261356639666436343562383639353839633336613666616366666431 -63346161636134346433623439313635653831353531353536383439383037353534613465626532 -34373538633838646530663764666532643865623334366366323131343032643266376436663231 -37616363363339363734373165353864303365343633636466623734373736633963303839636632 -62663139616137393334346661353438623236326561626639383635343636656131396164343466 -38616233353038316139303739333461666337393631383834613938653166613766623034653839 -64666265383539303163373539616631323733356134663839643162303964633337656564346265 -62396532323139323166383135373637633639316432373738313666386230336133353737626331 -32373532333437343262636135623632636335653632623735306263393562613866653561316131 -65663133396161613131653738643039316533333739636437323966643936346336366365633963 -66333538643737383238343866623235626434346637633164646138336566636535613961666132 -38383932653861613036303562666531383039363031636336663063333662653733323130633966 -39373262363632343438343239666433366534363530333262326666663434373533646635356533 -61613935326664383634623530343636626135336637633837343138313861343462633438326362 -66353938383432326238316131663933326136633731326465346633353962613064323663353134 -32336436646162643934313138643037643333663835646464643863626134663963616230326535 -66323434323536616639633963393537623239613664633130343738663663336538343037386435 -61666332306161663334383736636638386237643230343433313830353734363238326334663266 -63353333666537626139306335323964633635303638356265396265386636613539393561653730 -33323265633035643364636365623566643739323634656461613063643639306539323634343261 -66326333666136306164643166336235313134373035346665653133623239373763653938626365 -32643162313662623935396363633236386561386531376365616662646332376235663334303561 -34653861303630623266333035613631643738353936623636393839343539323334386431396437 -38643338323963363964363332343731643365313835383961313637333038643738653366353663 -30343062303632663562303134326463333636313066343233333132353266313766343734373138 -61396561396635346539333164383964653539326465613362663836636333613462333731346437 -37656162636331363536636433313534613038383130616164623866653436323836323232393862 -66343266633231653734643630303437396134396631366336626663346662313861356362323866 -31646563323066353961366134336339356638363239363138386662376234663764353761396361 -62316434323564373338383464323265303866303561336133376239343636626665663561613366 -61656463643564336437343136646635386533663062623066323664326561643938663330313064 -36323361383230613263653735336361393532303664653332613663613830393864643830666633 -62633737303332623039613838323063343932386136343966663437313163623938656663366236 -36356364323936363864313237353861613962613862396365386339663562623365656132666463 -30666535333930386236323939343563633362333636393334343231663734663965333434336331 -35663138363264323438376138363630643062356631343437303662313864663030613534386334 -62326462316331626230313261633533373964633766643631313736383964393864343961636439 -65633064313938346562376132326362396337353435323362626665383331336631653033333132 -33313832663934326435313162393865623331346132646433646564356131663536356166376132 -61316138373134646236356261316535326135393131306533313861636436663036656530363265 -38393136303263313238356161303830326435336666383133373430653631623063366336326666 -36306161363337303532653637323264356665326130333832303533393463393531323737643362 -62303530646538646566616164336334323239313135353237303263386162363238653964633936 -35393264306635363933646537303462346234656631613261356666653439643164663232373061 -64313132656630353432643231376664376164306163373234326635613339343833633365373331 -66376134383062373461306537386530386431323261663261663939303866343832656433633937 -36616563383133346231376237363431386338363762646534653362393937363564303566356161 -36363331383932383736356561626234383662356461393939643832633365333230626461343735 -39393939316235343764376666356363616335633937346262633735656539343431373736346163 -39646634326463373738323133643232316433373831306637336437353033613836343431633063 -63386565393630616532313038386434633066343764313963316262323236323336316536313362 -34396262303539303837623335313934633130663730326364623935323835663061393134363637 -64313065326239336166313735343962653930656332626364396536396461653537393662386435 -30333638316334373235623337666266376439336163396533373231623535373761666535633933 -63616230383835386463616133306633336262646365396631653230303062653962343530353066 -64326538636234623530313539333834346239626263396365353766363639626537313966663836 -63656437303863346266356561613562663134306465623135626361643736616663646330353231 -34356464393535653163396264366164353435623031646562383263636132363533 From 216e1b9e384216b2784159dd9be0783f3138bca7 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Thu, 21 Dec 2017 00:00:41 +0530 Subject: [PATCH 05/41] Issue #24 chore:Sunbird auth package build --- .../scripts/ansible/roles/keycloak/defaults/main.yml | 7 ++++--- .../scripts/ansible/roles/keycloak/tasks/build.yml | 10 +++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/keycloak/scripts/ansible/roles/keycloak/defaults/main.yml b/keycloak/scripts/ansible/roles/keycloak/defaults/main.yml index 8cee07e5..a8c54452 100644 --- a/keycloak/scripts/ansible/roles/keycloak/defaults/main.yml +++ b/keycloak/scripts/ansible/roles/keycloak/defaults/main.yml @@ -1,9 +1,10 @@ --- sunbird_auth_version: 1.0v -#keycloak_pkg_src: https://downloads.jboss.org/keycloak/3.2.0.Final/keycloak-3.2.0.Final.tar.gz -keycloak_pkg_src: http://192.168.1.151/keycloak-3.2.0.Final.tar.gz +keycloak_pkg_src: https://downloads.jboss.org/keycloak/3.2.0.Final/keycloak-3.2.0.Final.tar.gz +#keycloak_pkg_src: http://192.168.1.151/keycloak-3.2.0.Final.tar.gz postgresql_driver_src: https://jdbc.postgresql.org/download/postgresql-9.4.1212.jar - +keycloak_pkg_file: "keycloak-3.2.0.Final.tar.gz" +keycloak_sms_provider_build: "keycloak-email-phone-autthenticator-1.0-SNAPSHOT.jar" keycloak_subsystem: ' auth diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml index 08a4b578..4e9746b7 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml @@ -7,8 +7,8 @@ - name: get the keycloak tarball get_url: url={{keycloak_pkg_src}} dest=sunbird_auth_{{sunbird_auth_version}}/ force=no -- name: Extract keycloak-3.2.0.Final.tar.gz - shell: cd sunbird_auth_{{sunbird_auth_version}} && tar -xvf keycloak-3.2.0.Final.tar.gz --strip 1 +- name: Extract {{keycloak_pkg_file}} + shell: cd sunbird_auth_{{sunbird_auth_version}} && tar -xvf {{keycloak_pkg_file}} --strip 1 - name: Create sunbird auth directory file: @@ -23,7 +23,7 @@ shell: cd ../../sms-provider && mvn package - name: Copy SMS OTP jar file to providers dir - copy: src="../../sms-provider/target/keycloak-email-phone-autthenticator-1.0-SNAPSHOT.jar" dest="sunbird_auth_{{sunbird_auth_version}}/providers/" + copy: src="../../sms-provider/target/{{keycloak_sms_provider_build}}" dest="sunbird_auth_{{sunbird_auth_version}}/providers/" - name: Create sunbird auth directory file: @@ -60,9 +60,9 @@ - name: remove the Keycloak zip become: yes - file: path="sunbird_auth_{{sunbird_auth_version}}/keycloak-3.2.0.Final.tar.gz" state=absent + file: path="sunbird_auth_{{sunbird_auth_version}}/{{keycloak_pkg_file}}" state=absent - archive: path: sunbird_auth_{{sunbird_auth_version}} - dest: "/home/ttpllt23/Desktop/sunbird_auth_{{sunbird_auth_version}}" + dest: "sunbird_auth_{{sunbird_auth_version}}.zip" format: zip From 6036aec7ec5d7ff9f55aa0ccb305f2e3bf934b23 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Thu, 21 Dec 2017 12:20:29 +0530 Subject: [PATCH 06/41] Issue #24 chore:Sunbird auth package build --- .../local/group_vars/localhost.yml | 291 +++++++ .../scripts/ansible/inventories/local/hosts | 26 + .../ansible/inventories/local/secrets.yml | 806 ++++++++++++++++++ 3 files changed, 1123 insertions(+) create mode 100644 keycloak/scripts/ansible/inventories/local/group_vars/localhost.yml create mode 100644 keycloak/scripts/ansible/inventories/local/hosts create mode 100644 keycloak/scripts/ansible/inventories/local/secrets.yml diff --git a/keycloak/scripts/ansible/inventories/local/group_vars/localhost.yml b/keycloak/scripts/ansible/inventories/local/group_vars/localhost.yml new file mode 100644 index 00000000..9c5173b7 --- /dev/null +++ b/keycloak/scripts/ansible/inventories/local/group_vars/localhost.yml @@ -0,0 +1,291 @@ +# ENVIRONMENT CONFIGURATION +env: local #Name of the environment, e.g. dev, staging or production. +proxy_server_name: dev.open-sunbird.org #Domain on which the portal will be accessed. e.g. staging.{implementation-name}.org +proxy_site_key: "{{ vault_proxy_site_key }}" #SSL certificate's site.key file contents. More details in this wiki: https://github.com/project-sunbird/sunbird-commons/wiki/Updating-SSL-certificates-in-Sunbird-Proxy-service +proxy_site_crt: "{{ vault_proxy_site_crt }}" #SSL certificate's site.crt file contents. More details in this wiki: https://github.com/project-sunbird/sunbird-commons/wiki/Updating-SSL-certificates-in-Sunbird-Proxy-service +ansible_connection: "local" + +# DB CONFIGURATION + +## Below passwords are used by DB install scripts when creating databases. Please use strong passwords. +application_postgres_password: "{{vault_application_postgres_password}}" #Password for Application database. +keycloak_postgres_password: "{{vault_keycloak_postgres_password}}" #Password for Keycloak (Authentication service) database. +kong_postgres_password: "{{ vault_kong_postgres_password }}" #Password for Kong (API Manager) database. + +## Postgres configuration +swarm_address_space: 10.0.0.0/16 #Application server address space (e.g. 10.3.0.0/24), also the agentpublicSubnet if using Azure scripts provided +keycloak_address_space: 10.113.0.0/24 +postgres_address_space: 10.10.0.0/24 + +## Cassandra configuration +cassandra_server_private_ip: 10.10.4.4 #Private IP of cassandra server +keystore_password: "{{vault_keystore_password}}" #Password to use for encrypting cassandra keystore. Use a strong password. +truststore_password: "{{vault_truststore_password}}" #Password to use for encrypting cassandra truststore. Use a strong password. + +# APPLICATION CONFIGURATION + +kong_host: api-manager_kong + +## DB address +application_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server +keycloak_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server +kong_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server +sunbird_mongo_ip: 10.10.2.5 #Private IP of Mongo DB server +sunbird_cassandra_host: 10.10.4.4 #Private IP of Cassandra server +sunbird_es_host: 10.10.3.7,10.10.3.8,10.10.3.6 #Private IP of Elastic Search server. If ES cluster has multiple nodes then add all nodes by separating them with comma. e.g. 10.2.0.1,10.2.0.2,10.2.0.3 + +## Application server configurations +sunbird_ekstep_api_base_url: https://qa.ekstep.in/api #API base URL of the Ekstep environment. Use `https://qa.ekstep.in/api` for non-prod deployments, and use `https://api.ekstep.in/` for prod deployment. +sunbird_ekstep_proxy_base_url: https://qa.ekstep.in #Base URL of the Ekstep environment. Use `https://qa.ekstep.in/` for non-prod deployments, and `https://community.ekstep.in/` for prod deployment. +sunbird_env: qa #Ekstep environment to connect to. Use `qa` for non-prod deployments, and `prod` for prod deployment. +sunbird_mail_server_host: "{{ mail_server_host }}" #SMTP server IP. Could be ignored if not mails are to be sent. +sunbird_mail_server_port: "{{ mail_server_port }}" #SMTP port. Could be ignored if not mails are to be sent. +sunbird_mail_server_username: "{{ mail_server_username }}" #SMTP username. Could be ignored if not mails are to be sent. +sunbird_mail_server_password: "{{ mail_server_password }}" #SMTP server pasword. Could be ignored if not mails are to be sent. +sunbird_mail_server_from_email: support-dev@open-sunbird.org #Email ID that should be as from address in mails + +## Keycloak (auth server) login details +sunbird_sso_username: "{{ vault_sunbird_sso_username }}" +sunbird_sso_password: "{{ vault_sunbird_sso_password }}" +keycloak_admin_username: admin +keycloak_admin_initial_password: "{{ vault_keycloak_admin_password }}" +keycloak_tar_path: keycloak.tar.gz +keycloak_theme_path: artifacts/sunbird + + +## Content Repo configuration +sunbird_api_auth_token: "{{ vault_sunbird_api_auth_token }}" #Authorization key (JWT) to access Sunbird APIs. This will be in the output of deploy-apis.sh script, extracting it out is documented in the deployment wiki. +sunbird_ekstep_api_key: "{{ vault_sunbird_ekstep_api_key }}" #Authorization key (JWT) to access Ekstep APIs. Steps to generate this are documented on https://github.com/project-sunbird/sunbird-commons/wiki/Obtaining-API-token-for-accessing-ekstep-APIs +sunbird_trampoline_secret: "{{ vault_sunbird_trampoline_secret }}" + +# ADVANCED CONFIGURATIONS + +cassandra_listen_address: "{{ cassandra_server_private_ip }}" +cassandra_seeds: "{{ cassandra_server_private_ip }}" +cassandra_broadcast_rpc_address: "{{ cassandra_server_private_ip }}" +cassandra_broadcast_address: "{{ cassandra_server_private_ip }}" +cassandra_listen_interface: '' +cassandra_log_dir: '/var/log/cassandra' +cassandra_root_dir: '/etc/cassandra' +cassandra_version: '3.9' +cassandra_port: 9042 +cassandra_rpc_address: 0.0.0.0 +cassandra_restore_dir: /home/deployer/ +cassandra_backup_azure_container_name: cassandra-backup +cassandra_backup_azure_storage_account_name: "{{ backup_storage_name }}" +cassandra_backup_azure_storage_access_key: "{{backup_storage_key}}" +cassandra_backup_dir: /data/cassandra/backup + +keycloak_url: http://10.113.0.7 + +keycloak_auth_server_url: "https://{{ proxy_server_name }}/auth" +keycloak_realm: sunbird +sunbird_content_player_url: "https://{{ proxy_server_name }}/api/" +sunbird_learner_player_url: "https://{{ proxy_server_name }}/api/" +sunbird_sso_client_id: admin-cli +sunbird_mongo_port: 27017 +sunbird_mongodb_port: 27017 +sunbird_portal_realm: sunbird +sunbird_portal_auth_server_client: portal +sunbird_trampoline_client_id: trampoline +sunbird_appid: sunbird_portal +sunbird_default_tenant: sunbird +sunbird_echo_api_url: "https://{{ proxy_server_name }}/api/echo/" +sunbird_pg_host: "{{ application_postgres_host }}" +sunbird_pg_port: 5432 +sunbird_pg_db: quartz +sunbird_pg_user: quartz +sunbird_pg_password: "{{ application_postgres_password }}" +sunbird_installation: sunbird +sunbird_account_name: sunbirddev +sunbird_account_key: "{{ vault_sunbird_account_key }}" +sunbird_sunbird_quartz_mode: cluster +sunbird_encryption_mode: local +sunbird_cassandra_urls: "{{ cassandra_server_private_ip }}:{{ cassandra_port }}" +sunbird_session_store_type: cassandra +sunbird_keycloak_client_id: 'portal' +sunbird_keycloak_public: true +sunbird_cache_store: "memory" +sunbird_cache_ttl: 1800 +sunbird_portal_title_name: portal +sunbird_web_url: "https://{{ proxy_server_name }}" +sunbird_sso_publickey: "{{vault_sunbird_sso_publickey}}" +sunbird_azure_storage_account: "{{vault_sunbird_azure_storage_account}}" +sunbird_azure_storage_key: "{{vault_sunbird_azure_storage_key}}" +sunbird_container_name: portal +sunbird_cdn_url: https://dev-sunbird-temp.azureedge.net/{{sunbird_container_name}} +mongo_backup_dir: /home/deployer/mongo-backups +sunbird_background_actor_host: actor-service +sunbird_actor_system_name: BackGroundRemoteMiddlewareActorSystem +sunbird_app_url: +sunbird_fcm_account_key: +sunbird_env_logo_url: + + +#player_tenant_dir: +sunbird_dataservice_url: https://{{ proxy_server_name }}/api/ +project: sunbird +application_postgres_database: quartz +application_postgres_user: quartz +keycloak_postgres_database: keycloak +keycloak_postgres_user: keycloak + + +## Cassandra download URI +cassandra_repo: 'deb http://www.apache.org/dist/cassandra/debian 39x main' +cassandra_repo_key: 'https://www.apache.org/dist/cassandra/KEYS' + +#API Manager +kong_postgres_port: 5432 +kong_postgres_user: api_manager_dev +kong_postgres_database: api_manager_dev + +es_curl_host: 10.10.3.7 + +## Logging details +syslog: + host: 172.16.0.5 + port: 51415 + +## PostgreSQL config +postgres_replication_user_name: replication +postgres_replication_user_password: "{{ vault_postgres_replication_user_password }}" + +postgresql_hba_entries: + - { type: local, database: all, user: postgres, auth_method: peer } + - { type: local, database: all, user: all, auth_method: peer } + - { type: host, database: all, user: all, address: '127.0.0.1/32', auth_method: md5 } + - { type: host, database: all, user: all, address: '::1/128', auth_method: md5 } + - { type: host, database: all, user: "{{ postgres_exporter_user }}", address: '{{ swarm_address_space }}', auth_method: md5 } + - { type: host, database: replication, user: "{{ postgres_replication_user_name }}", address: '{{ postgres_address_space }}', auth_method: md5 } + - { type: host, database: all, user: all, address: '{{ swarm_address_space }}', auth_method: md5 } + - { type: host, database: all, user: all, address: '{{ keycloak_address_space }}', auth_method: md5 } + +ansible_vault_password: "{{ vault_ansible_vault_password }}" +docker_hub_password: "{{ vault_docker_hub_password }}" +jenkins_slave_jenkins_username: "{{ vault_jenkins_slave_jenkins_username }}" +jenkins_slave_jenkins_password: "{{ vault_jenkins_slave_jenkins_password }}" +ops_private_key: "{{ vault_ops_private_key }}" +deployer_ssh_key: "{{ vault_deployer_ssh_key }}" +proxy_prometheus_admin_creds: "{{ vault_proxy_prometheus_admin_creds }}" + +# ADDITIONAL CONFIGURATION +backup_storage_name: "sunbirdbackupsdev" +prometheus_storage_retention_time: 72h0m0s +curl_host: dev.open-sunbird.org + +mail_server_host: smtp.sendgrid.net +mail_server_port: 587 +mail_server_username: azure_886153b1defb14e38ecc9c7301625aba@azure.com +mail_server_password: "{{ vault_mail_server_password }}" + +logger_es_host: "{{ groups['dev-log-es'][0] }}" +logger_es_port: 9200 + +kibana_oauth_redirect_url: https://dev.open-sunbird.org/oauth2/callback +monitor_alerts_slack_channel: sunbird-dev-alert +keycloak: True + +api__host: dev.open-sunbird.org + +proxy_replicas: 2 +proxy_reservation_memory: 32M +proxy_limit_memory: 128M +kong_replicas: 3 +kong_reservation_memory: 64M +kong_limit_memory: 256M +echo_service_replicas: 2 +echo_service_reservation_memory: 8M +echo_service_limit_memory: 16M +adminutil_replicas: 2 +adminutil_reservation_memory: 512M +adminutil_limit_memory: 1024M + +actor_replicas: 2 +actor_reservation_memory: 500M +actor_limit_memory: 1024M + +learner_replicas: 2 +learner_reservation_memory: 1500M +learner_limit_memory: 1500M + +player_replicas: 2 +player_reservation_memory: 256M +player_limit_memory: 512M + +content_replicas: 2 +content_reservation_memory: 64M +content_limit_memory: 256M + +keycloak1_replicas: 1 +keycloak1_reservation_memory: 768M +keycloak1_limit_memory: 1024M + +keycloak2_replicas: 1 +keycloak2_reservation_memory: 768M +keycloak2_limit_memory: 1024M + +monitor_es_host: "{{ groups['es'][0] }}" +alertmanager_host: "{{ groups['swarm-agent-for-alertmanager'][0] }}" +prometheus_host: "{{ groups['swarm-agent-for-prometheus'][0] }}" + +swarm_load_balancer: 10.0.0.100 +filebeat_logtsash_host: "{{ swarm_load_balancer }}" + +expected_minimum_logs_per_minute: 30 + +proxy_prometheus: true + +enable_scraping_docker_metrics: true +enable_mongodb_availability_check: false + +postgres_exporter_postgres_port: 5432 +postgres_exporter_user: postgres_exporter +postgres_exporter_password: "{{ vault_postgres_exporter_password }}" +sunbird_learner_service_base_url: https://dev.open-sunbird.org/api +kong_admin_api_url: http://api-manager_kong:8001 + +postgresql_backup_azure_storage_account_name: "{{ backup_storage_name }}" +postgresql_backup_azure_storage_access_key: "{{ backup_storage_key }}" +postgresql_restore_azure_storage_account_name: "{{ backup_storage_name }}" +postgresql_restore_azure_storage_access_key: "{{ backup_storage_key }}" + +grafana_url: https://dev.open-sunbird.org/grafana +grafana_editor_username: editor + +app_alerts_mailing_list: "rayulu@ilimi.in, harishg@ilimi.in, manzarul.haque@tarento.com,{{devops_alerts_mailing_list}}" +devops_alerts_mailing_list: "deepakn@sahajsoft.com, manojv@ilimi.in, shashankt@sahajsoft.com, mathew.pallan@tarento.com, bineesh.k@riflexions.com" +site_alerts_mailing_list: "shailesh@ekstepplus.org, ashwin@tekditechnologies.com, lakhan_m@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" +keycloak_alerts_mailing_list: "ashwin@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" +api_manager_alerts_mailing_list: "ashwin@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" + +jenkins_url: http://10.20.0.4:8080/jenkins + +kibana_oauth_authenticated_email_domains: + - ekstep.org + - sahajsoft.com + - ilimi.in + - tarento.com + +kibana_oauth_authenticated_email_ids: + - shailesh@ekstepplus.org + - vijetha.nayak@riflexions.com + - bineesh.k@riflexions.com + - arvind.yadav@compassitesinc.com + +monitor_alerts_mail_from_email: alerts@open-sunbird.org +monitor_alerts_mail_server_host: "{{ mail_server_host }}" +monitor_alerts_mail_server_port: "{{ mail_server_port }}" +monitor_alerts_mail_server_username: "{{ mail_server_username }}" +monitor_alerts_mail_server_password: "{{ mail_server_password }}" +env_short_name: dev + +# keycloak sms provider +keycloak_build_src: "keycloak_build" +keycloak_ver: "keycloak-3.2.0.Final" +keycloak_sms_provider_build: "keycloak-email-phone-autthenticator-1.0-SNAPSHOT.jar" +keycloak_sms_provider_templates_src: "templates.tar.gz" +keycloak_sms_provider_templates_dest: "/opt/keycloak/themes/sunbird/login" +keycloak_ekstep_sunbird_login_theme_file: "login.tar.gz" +keycloak_ekstep_sunbird_login_theme_dest: "/opt/keycloak/themes/sunbird/login" +keycloak_postgresql: "postgresql-9.4.1212.jar" diff --git a/keycloak/scripts/ansible/inventories/local/hosts b/keycloak/scripts/ansible/inventories/local/hosts new file mode 100644 index 00000000..3634f2c7 --- /dev/null +++ b/keycloak/scripts/ansible/inventories/local/hosts @@ -0,0 +1,26 @@ +[dev-postgresql-1] +10.10.0.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-postgresql-master:children] +dev-postgresql-1 + +[dev-postgresql-slave:children] + +[postgresql-master:children] +dev-postgresql-master + +[postgresql-slave:children] +dev-postgresql-slave + +[postgresql-backup:children] +postgresql-master + +[postgresql-restore:children] +postgresql-master + +[local] +localhost ansible_connection=local + +[localhost] +localhost ansible_connection=local + diff --git a/keycloak/scripts/ansible/inventories/local/secrets.yml b/keycloak/scripts/ansible/inventories/local/secrets.yml new file mode 100644 index 00000000..be20efff --- /dev/null +++ b/keycloak/scripts/ansible/inventories/local/secrets.yml @@ -0,0 +1,806 @@ +$ANSIBLE_VAULT;1.1;AES256 +36303132313138313463326365646333383038393233383933383866373566626136386162613065 +6439656630616138356461336236653930663938666164320a346139373336333761666333336139 +37626139313933356164653232666537663232336334363962323430636139373638313636326531 +6132643336643034620a373532363830633066633137316261616365646239326132333639653334 +30613062383462633164646237616566353235646637353765386239666361346662316238386438 +38336239633038643132343064383932663666373361346162306233346362363863343135663431 +33623431633963343961656539303764626166643634623631303163623537663362373038343264 +33333938333333623064666132363863386231393734333066363563643937303035323237636163 +36343937346533633338646132626461303338633036663035666161616631363130623731656631 +30633834393037383065663931303931373366323933366333313538666136626234613163316139 +31383635346632316162303461613336653833633463316561363739393862316633356231666532 +30616234326235386464386435633334613134353964376132306438393332333436333936363239 +36336232336266303037346138396165346131653833333232313233343864303465646661373561 +65343539653961396562656663306266356538633965653761653834666563346232333065663666 +63336130663034356132383932356466656233613631653538396664383038646230613566326466 +64396363326563613630653133363733343132353930656330373161663837656439376531343733 +65653762623366656334333732653463366239623762366339313966386465316565326665663838 +65646563326264623739663633306634316133626438383462333537316132353265623034306136 +35393036643864353036643265383937363363323232326232356235343562386637303565663061 +62383163313436623633613363633638386430636434646539616334623436316662306466653639 +38653264323330383766663038626263343232356538393237343338396665323062343535373034 +61316534343462353335626166643337623762353437333830303430376161356539643138383733 +63663964366264316639353934613761616466613831626465653662633061633131623733313336 +66333233383930343231363863623634316437623462626665303530303835393733626564326339 +61313861633830366466663836613837366665393130343062336430376236646637653430666663 +39646563623437636438336132316537316363333837353133646536303437666166353237333230 +33326636333362346538626362616161306131623238616563663431623439323563363633623936 +33386230633564396465646266336564363963636439313662613765323935666430636439336631 +64363332666165346530323762323963636165343633393939303965653738616364366432623636 +33386136336163303332343438663330303036333332363530383231316239623838376132316235 +30383533643934646361313663366539316562636563326665656365383837313534346133616531 +35346162333237333835336263613563633731386164306139643338306538666463303163623261 +31626634386138633539396162643063396536313632366161613335656365346464373130333663 +39646261613233636631373761653235366430343438663639326334643735323030663139616434 +66383034633837663433386463356463633133303238383962636430396539663036346330663338 +66323832363561333538393331376465636533396663386135623739333865306530613338623766 +63363732353535303836336462636533623135393164313332656363656262656534353266656239 +33353466363131323736343136333433373433346136373866313166306135326337333837333136 +38663737626630613932383735343838663961393263393266366136386532373365393462336163 +64343238303832663937376133656135643834343061353461626439356265643630656437306135 +32356637363433303465356661346263333561386630323962613265393037663239343062653564 +32656639393939336636656338333866646332303935346539333537623266613863643864653063 +38336337633262636630643262636138346161626538313431383132636639626633363663373736 +32353165373363643136353535316334626635333866316461393730613336666133353734313533 +37616438313466373931636166633133393334376636643738353263626439323139653530313837 +30616434626461636437313566653038383061333366373137643265316633316566653735353734 +39313366373864613839313837376662316231306561336439656330663261643163343039343066 +64613432343332363461366630626435336133616232653032643232343862626135643637666332 +36303536333666356235386338656437653236653530313264633435373765336234386635343435 +66636130323963323265373831313739353738313535393461383031616164343332376565663964 +34656137386532633637643730356135363361643539356433613130646165373065666461646631 +66623263346138616632373164396334613538353235373135656164343035303036656462333062 +31626635636232343965656238323330393962656461343534613131376666663261633261356331 +33356134373164653436613537636531626433313130313431616164663962343233326365376138 +36663936636664313537643861303565643166653965666266393266353135343164623162356334 +63613930323133663464396430653039386538393962303339333236366631393831643239656232 +31383138323466366362623032396633346463346566376330623635636463333733623866396266 +32313763666438353231313132373363353737393335653835623330306633343638326637353531 +38613466386637656531363762626135653362666266393939393966636634616230343238653136 +63613236383734663365656339396135656162366533343539633734386664633561376330653866 +39643235646238343435646166636330613334386138333462633564333131306464316137306664 +61376562396530626338636433303939336431626566643261393763316234626265303338613530 +66336432656363313930613336383636393036386232323737333436393436386538626134383964 +61613939353133376230623066336338663535643932396232323066363463643731613534636134 +34656637306338383131666139336439363437646366396333363837303466376330613763353764 +32383839653136343633323430373737373131613163353233353631373063666234323630343331 +30623137623863393665626562356461306336313463393336383330663861366132663630626136 +61323464656137653431616166366366656566656530363138313935376136656461343366313532 +31373966623662333662313331356233613230653762653635643038633332356161323635346364 +34623138333337333734616431663262393866303736383663306265313330303035306365616566 +37363233336661356135313337336235663063386161306564663334343066623161353966333739 +63316361633433346637366637326631326363653938396638636237373330383033313061643566 +30316532643062346631356266653139656539353462333831643763326537616530323539383831 +62613035366534336632393531633462623662666637363165633633336631373535663261636331 +38353436663139663832323061656165383464353232616330366566663432616563303438383937 +66633563663765393564653035386234386238303037396232656263326564353237363165373230 +63643066323964383030333037646634386130313639633161393939636139373130383739636339 +34666464303933613866313734656235643461666466336439343761323432363631386165636364 +65616634666338393531396132306537653136643035323262333464356132396536326366376631 +31396262666363613138663733316661333763363531366463643564373863386636396637343730 +30643861326639636332643834333662313333643466636165663730356438303139326465616239 +39316563623437306633626136343637313432626533373165343931626536623666633765333262 +63396165333835313937343634356633336134643836356235376131386439383037636230373234 +32343063373063333363363531613562623966643834306566353734313336333537343230626563 +62306339373532383938363934656233643333663662666363323134373835356666643863666538 +37356237396361653032623538303937396464343432623237613965306633376330326537643639 +30653233346134343637656333616233666639643931646633316362353866353131306532386163 +35376135336631353166353565366562626535636562623833616339373532386434383431633565 +36343335656265616235666235393661663263616538393465346363656637663765653461653066 +33303338643162393063303336636330656363316239636165383363653661393039363663633362 +39386165303462373865333964623933363930623034653865613565303238376532366637633162 +37313433353332336139633330626130636438663031623131333661343430653033383330646566 +32643861663235396633663930353864636533613036383563653839313532343731346634336466 +31626161386361643562356561643865333962623166376333643066623634653664646231323635 +66333866376632613765306539306636613533633063353233383564653761653237396163396564 +35643566656663363239643632616164393535633635653863653937663331373132613063346238 +62363263396462383862336132643837316430393738323366363035376261353833333137323262 +38333466633034346464393433366131376439396266323331373237393031376466653137643061 +64633535616130353037646334386133653336633739366330613163396237356665366239646236 +35623531336239656137613933373536653530663936323735346238336463663834666537653365 +31656339373264373931663764633235616463366266323939356539343064393064323561666631 +31346533323334633731636366383136613637376431363532633534623033643662363263383965 +32646232303264643034396664663635366262316234613732663736626162623266353334363564 +35326133643166396134333963303934353266333331666138623664396436383064663835643637 +38373866363835623933393734643535643962666331333561663334303433366564303263393037 +30636133303939636635656564613766656363666361326461646136336661373732636633396637 +37623034336261626665613739366630616438396533666436623632663162393933386362313966 +39616138303938303132656439643966643634636638343534333030343833393064613837366336 +62643962313366633434316237316135363765656637636563643965373830633962373861313031 +34343633613938383031363433646133623931376465613034346562666562383763626530636366 +33366565646565623562353466633062356433653562633931333866646339656466623738353839 +35343036306664313539303030363464653536373365396136306463393636376434376532653039 +63636236306461336332643937326461323961373639363061663165356435636466393361323834 +36663232333237653031373332636539613631626234366137373861646135313535656463623337 +31363265383933343634643862623733666237626130303936343736633861616561316239336162 +30346533393662623361656134613831323236316238663930633231663865353133336432343937 +32396535613035376564393761313230656462626433343664633338653065613535313065376538 +31633932663362366536633466616235333337323939356131343135343836383134393566323630 +64636338613762373463636633646436303137323937656531386233656334333434326566373163 +63303138633438626437373465353130346534376433363361356535306536646564313736336237 +63323336623830333931613165366463363337623165653164663731393766356462313839376435 +66346362396234323764646163653561316531623061346238303032333035623333383563396530 +32396230336538333563363236313335643862393162613637373539343634653532613336313663 +30393864363963626134323963643864383739663833306365313434333739353532666130316265 +33316438636262373862396136663061393962633037643532343236376639366136306236316461 +31393362366531333964653763633632343962343239616132616361663665623663303065323366 +61303131666138373337313565363435316238313830343965636430336532316666383939633933 +66346231373438323066326231633336666535646232393933336330643666326534356164336636 +39353438616563383265366330643837356263343466663537356337616166623037303238313061 +66316666623866633035326336653431366665616235363432643139373961663435366331313234 +39663431353161386231353636656331656134396334396439383637303561366537313632646539 +36636336666433363731656136373561393632336235663266306166663134333465366438393762 +66393534663739323263303333353739616336316539623537303839656438356534616262336633 +34656466656230316532303039656639323835613833653739656339666264616363323363666330 +38616464393163653037613030323032656562316535306265326262633962313534643836633233 +61386539373036306634333764363366383566646137393034346565366366396136343032653538 +32323335306438303861613136613937343961666537333161613939653564366439353537363465 +33376361393532313962306435313730303866643462316537373632396362316166396166643437 +39396239393864323661643331643938646335353032363262326165373465643436306631666164 +34306661353536383938626632323966643561313864613630353765313230386239663661396432 +66383761623539376634376661633132613032333464666639633531643963366533613536353863 +64333433396564386139656238316638323966616231336361396238663433636237653766623062 +37656534373031656662333464663937633864393761666663303462353333343661656537383736 +38343339303465343839666132386239323734643461316566333166646637373238613836303738 +30323939366539313339313239383836616537663465626635656234363966383766363263643763 +36353865393461386633366562353161636166313039363834323838643834326464323136666537 +63346564623537323161653437663762356632366439636235656131393863333530373230373936 +65326539356438643337356538303031363038366334383834323139643830323531616632303037 +35363566636564336161663933323137393431396463653130303634353534633063613438623861 +38636164346536373838626264366361373634666131306532326539316233636165313631326631 +63643735633933316237636231323432646439633538366535316165623838376362303962313733 +39313365636634393639346532383135333566613361363530656534393561653565393737623061 +36633035383636343339613964643638646636626335303566646234393130613264616539383539 +38383262383462313361363630326161653731306165663038363338623931323862316466626339 +35356233373461616463636530373962306134636565643466613963396364643835373364343562 +66316630626630306361313837386236633433323438653264316464313763336163623031353166 +39393036633933656666396465663339326663306338356332333738663161323837653431383037 +39333463623538306666653830616630666335313664316238326264376237656537393632636237 +32323063356663616261333561646562356233353237303166303062636332636135633634313131 +35663064373436386166393564343933646630303635666234663061323638373338633662353064 +61363838613836643662386431366362333934373964346432616138336337393034663762376334 +31386135616333663334663130383530393836333037646336393434376233363638326661656662 +34346363343131373564663931316431316261666536396231633436363266366231393464303438 +62373364626339393961656235626163663837353361363036313634653230316366323065333933 +64326334656661393432313737643735373633313263626463616264363463343434663832633135 +37633938306362303262636663633231666634306463656663653535663063623233383362333631 +38353237373361636637616239613334623364623232326662646461373034383030666561613764 +31376533663666376437663363333763663761643533393937363731363636346263396436326366 +62316337336533326266353862633437313338646235316537626335363438643363396235663231 +63333732303536643036613063313962623165633562643534636339346635346563313437646633 +61363535363234623439666365316134396633396139396663303263353934396365363837363361 +36353966366666626236356331303333333332326465656266393165653632336532353930626363 +38303135313837326465373139626138373430393763376635313062386132383738393037613965 +66343838383665313430313564653131373863646130386433626164646131653234616238356236 +61393530616566656162643763363166313665653238323836356539653064646661306635633038 +61663631313031666564333361653337303731656639356362346639303561393265303461623364 +61666637646533613831383863353562336363663263646437376164353063373934346139353237 +35396132353766653836646532616435633162663335393734623336643231306538666235653532 +66373364336261363737396634346530346266303565613262373639393837626630613432316335 +35353438326336316463323135313238643863653663383437306566623634336466663464623364 +61336562303566373732363231366163383538333636353366306631643339396635623839383739 +35303433616436303335633334316162663938306631636362366334303836613035646231633062 +38636530343037356435343039373935343737613635383666613666613336613933306433346536 +33353034303662386164303130633739396630323930646332343461303637623836323138613037 +38323137356335613362666263386538316563323834626631396661343431353162313263636537 +66333663323366333734636262326335616634656366646566353963646563646331363864643235 +35316338356263326566343462353331323565363737393030373136303634303236313266343030 +31626438346266633234633263643831613964313562613065393737363237666537636536616135 +39653761666363303362366439373938313063306364393161656332626138333235306464306439 +64356433303262353636336535376535383639376361383661646330643561383738373535663635 +61383664363262386666613763386533303438366666383035326235303932656336383535323738 +62623636336164323462653939386130303662333037616562326432363537653437376364343630 +39656634656133353639616637656166633537383465323463626636663030303139313062633337 +64626664373038373833656664663630383231373161313538336134623135613737633831383362 +31386439653865313765336133316337386664653939343162373834613737373062653036396534 +64643133396530326335636332376634393734353135373863653237616162353262376139353237 +35643764333365393135386363646438306362646561346665343163383834363931643135366137 +38633931316436623465306533636664346433386230613436656562653635346161646534336665 +62303136383563366134323035333635363337366539643332336237306235643532633634383936 +31316335663833316163316364383564626236343164333538356333323761363736313263323137 +37613933366566383265356561386238656334613631643232343862373833623538636236316536 +33386631343265663032383735643361636332613835333833383130316662646463343139613530 +61326433616163626336343532323839393065656630613534613466633763353061353930653437 +33653232326636653039666533323735373736346532333337363163316631656530613935333864 +38393833336161643136383835373432363939366166626566633064356366663337373933323934 +39313964343035333562303861616166393961353166346638393633663636353930333563633365 +63633663643864383661306236376166643366616165346331323761656666393936363631363031 +31373463363066376661306133346366663239393333376564373133393432353866653462383662 +36313661663862363662386564356363316634363964336537636561653730613436396165356433 +38666532646436633132653964313737343165303938653966336231663138373265343363313935 +33383961623431333161363661356163396438633565663964663162303362363063366465303933 +36333662633930313238613662323063663634643037323739393231656631333632393136306439 +33643439323263666337333865316664336332656235373731643139373732396136626534316330 +36636461616230613632313966663762663533303037373763313562306562373232316332356634 +34333935353333346335616133303235376336326661396266653934373765343663666338306537 +38646230306562313538636136306531343765326439663636373763373764666336636133386466 +61613665316361393631313564356339626161313135613037376332626636313766353731633430 +35346635643239636133383865396634653665333431626333323336636239363063646535363239 +32626331383333376365383533363132366364316639356632656339396263306134376136663534 +63396535343938376337626433333539393134363434393230633566326332303666343434303832 +64313063363966333232383138383539656565343834386534366661626266666334653066656537 +32323337343336333536353263653066643731373766376330613232386564316263336166376461 +38326362306664313336326534623436323336393036323961616262656236626336646331323238 +39336233333832356234363065323762623734353439363538646362626534336133313931353537 +62366431373537343464343235343464326462616466613038313536646466393965636463393163 +30343363363530383361653433643035346335663535376665653737303064353662636531663331 +31663734663266343566643630323738386337656530646334303936636562376238313936353139 +65346438386263646231343031363162336134363532623665396666313933356134666334353365 +39306536353238653761363735383064363533343834646265353834653137343937633966666235 +30623434366439633234643265613530386134393466373365366339363561373132343134656433 +33303565383837633266346139323561323338353634613037626336353763386239383061346663 +39353062396339393234656164343736313862393335616230313664373139663262633561616436 +66386466663130613663666639613062633234376436623931356332323232353064663761663437 +32366631393833306632653130623161646365383565396430656637646361333366643833383461 +32373833393237623836663637373665373761363463316339343332326564333639656235623738 +36663135633463646564376463353532383134303864303332396366316265613464343134396466 +37656531353137356261383731393162643235313332343262336231333165326632356539313864 +38326665376533626162626538666638343434363263306637643333646636346236396664386234 +66316366336366623432356463383362653937623739333136353239346635323437336361643831 +62663937343562323461343166313430666434366332383462666539626566393164386134386236 +66303637323762666564313230333637646662633738633537323364316164653462626433313861 +38346231633164306432323435313466393830653962353466323962306635316265653466396263 +63393939316430356235326565376531633433626663303734306335666438383439306637666166 +30353766643233386463623666643430313961633561363666303630343231346133616461656662 +61323861333862313531303166376663303933613837386666643039393162396332373261363731 +32303634303132346535366630383761656533316335363837366463323565343062623261376264 +32356239313064303632366264343465643362646431656136343136386539303866396439333936 +62666164373839323732363262343131323338623234326430333538646564653937396133653866 +31373964653039326262316662626266376462316238656132333134303437356136613361666362 +65623362323637336664366433356435303332626536363966393764353635663731386433666134 +38333161653533616462386665633861643330623561393334636663396363363833656439666339 +31386237383531373536623036386437306135376637326134663937373838653063616463363236 +33306462343230303762373335626362393334353531313663333761636536613733323435386663 +33313762326465376134343435353263346532393865373366363935376337636632373034386431 +65316133613634616663376231363136383733336139636335323063613538616434373736336364 +34623666653131333862353931646266643737323865623636623038333636663663383863363336 +66363936303938346435373866306234616164313930653866646164636466333661336632663830 +64396337646636613661333933396336626264346238346361393562633364316361356236663435 +66623063376561396138646666623738663539356138306561353664356365343535306531343332 +64393362333636333135333735616366626266313331343634323338333738356437303462383538 +37396463663731663565313066623931613030303633626266623739383063376536646130333865 +31373263353261356361306639633331663632393338346561383933633838643438643730363565 +36323563343639373639656264623761643263646438333333326364366532336363633563393639 +35623436653566653563353161393438353332613537343336353830306139666631373237336130 +64343131373965383333623833633734653039633138646431633739336264643131386538633836 +61366530373732356530323530663232326335653230303366373461623137363033376138383562 +66373931646162613438323263303763616464323338626334313630373832623234343439363264 +34396533616535303931643630636363393433366463663665393536643835383438663961653435 +34653962636333313936636238316237626234386366363634363739613431646239626439636662 +35623731653937643263656235623466396537613663626237353233633865323633653439396332 +64326362343532346239386435633437646230303031653938616363393261346665653034353833 +65326465663032373932323866396564653538336535373634643332633032323435653439396535 +32373135373363656132383863656266383566363036343232623037363666316234643366623639 +34666531653965323363393664363230666536633064393035646163333730376264363966356638 +37376437376461613035636461663336633330306464396566633361623436356333633234366237 +33616635663966333738346264636534633764376363643233623135376536613730363631316235 +34653235373331663432333635386435353034613831373435666633313765343065396662653932 +66643339313164336239373732393231333037326338303933626430366463353831663536393530 +38626262353335656338623335383666303661373430326535643464363937343064306465646432 +65613335643831366164316365666361613165653863343033653730393236663437616361383165 +65616332366261653461376435343333396333653533353662333261313831633338356531393639 +30326562653862393333613666643332643830303634316637643264383165373539306531313632 +61636132646335656333636363343464356632316534333538383131376432383162646430376431 +63316339353232356432386431353438616337376161326563336461613061313337636539323133 +34646161656565623537336463613235656335346663363439616365316661376435363861326135 +31613532653931636365626264326536623839666637373737323831356461316239373562623336 +32633337623830633731623537353064336533666139333364356437663835656331366339653564 +31396633396162316361346338636362363630376162353733633762373461393063336462633464 +35353530616265353636313338623863613936306663643037363665636236363233386535656437 +61626165366333333736333039623138613835346562356631333730646234333134393366643533 +62356637396466396662656361333432666664633037373262313863333539326563643063656564 +66366637326263323638386232386630396634643132623433343035656361386165616664396633 +33613063633463336430313237373965613565633035623361313162373032386161346139613233 +66333665363466343938626665643632366130353461343533363461653036313233326461363265 +34656166646331303836613039346130656439666530376263316162323233306638306664653561 +64353735613863623166393833613962343464326561326238393231346335396633666233646332 +39303736343632613135373465616264633635326537363835666333343061363739336332373330 +66653864393534663330623039626434626365643538363964613634613061363939613837613261 +38336466323636643438373038666536656633386332366661343861323330306632623130626637 +35613334343731653134323361326563616165333833626134366137376236646337633239636333 +30366636666265306533616138646339393362633236633633313861643364633933376664653035 +36346663643762663365343635383739323165633333353138656366373638356539343939633534 +32333837633636363937353762666162626430393236663238373932663039616464613566613361 +36326632666463353066633764323563613333623333356465353163653431323632653135613061 +37363663613738303265613665623565316331356336623830303432646661333065373530393431 +37656566353130643230376432663132613338653730386464376230316362313533306466666130 +39656536353830343465366162373237376561323566323433313538663237666166626532386262 +35653435386238373431353762353239326365656134386433643466643462636232303236366633 +66336562656264666235396162636433353064353537343538613338653935663930623532656165 +33316562633131363862613566386566383835633065343532643731313234363034333165336131 +36626635616433626564356436383233623030356661616365616365616161336132656639303564 +31323466643464353461306462316538663963613636373831623361393433646465626666366631 +38363264313033656231653161633962626234646239373564663333333434336462356362343234 +62353862343734323339653831656536623265626439343632343161383663373532363765613535 +39656662633732343431616265323266663366346634316135356230336263323563643335336662 +64653064633538653133613735303838396366346665346338303337306637313236313139643135 +35313433366332356366363132323363383533336235333632653265303539326266346137333334 +32346131353435633762643834393230633664373535643762623534346364373163373038343636 +30313663333139353862353630623730666530323262663435653636663839363737393061383066 +31633530623665663838366331636263313265323234653630663661316465653564373163663633 +34663063643164336639363132643731336431646134333263636235343835633937626265393561 +32363939623837333438616461356361643132336130396564323665303463613261343863643266 +31303039633038383631363665396335616336343838376539306238346463376535313561653732 +31376338663165346339643236313038393164646463343062353137663366393735336235646339 +62646232323838613534366164346435366662393865363861396662353666363230373737666261 +66323563383930376237666131646339393032656166626632626439333232633164313831313165 +30376238616435653831636236376332356535666265663863643139643764336630376462333337 +32303537326362643439666136623636353534313366613563313432626266373564393030326632 +30396635393933306464613766306336323233636438396132323338383066636632316330633238 +62613366383336313434343339303166336436393766666561393664636164303566373334336338 +31356162303836623961333638646166373435393137376136386239343430353036353734616230 +33626332316433393466393365323932383837303338383136376338663166383133643364653764 +61383534636130613366366639336566663234636461346461316130396661336262623337393534 +66373036306563373662383335623965323739626236613766366236623062313637323964373038 +38383136333133663364323066366261663734306136653832366134353938303739346234343936 +38303366343366666538333661643433376539653666616666333261656631646537343731653034 +36373832623165333363346363353762663935323737323565353336396630653535343339663037 +32623737633230396562613762646663373833366632313663363261613737383565383633653830 +39613263313465643135336131376534393337666433623262633234646431303264656630386333 +32656362346164646462376464656362386233373039663637383233646461383230646336356433 +36323439653564653438323966393566633339326337646434313930383532663861373237613663 +34623363323735323433363466393835616633316164663833373439316461376164616164653865 +39326163623763383633373561333730336532643966393730623962656338333437366132616338 +36363933353238643464373461323130373930373162333761373363393165313635363766663935 +35303066323334313531616361373835653234373134306233333037336235306134366633623864 +36623235313230656339373739626230316338636430623134353233366261353134616633663463 +65373435366230313861633638303437356262333562303464383536633037316134623833626431 +65313062396337343033636264373032363739393836633665623862633931393264646239343039 +63643231373636636636303331393730663634653831663834633931323733623031326236656265 +33396537656165303964633535633065326533376665323236326266383134376138613538393932 +66616565353236313463393136343238353835653761313562363930373630393065313732346332 +39656537376132306134613838343332383736376230646235333266363136623030356433636131 +62623861376431613431373139376335343135626434323733623434353761393630613531306433 +32636637613864353361653733383965626465386562633331633264386633326165346532626533 +32343637643638643037386236316164363539313437363038393533663238616436653238326136 +35363437653063616562623334333736376639623461333463303466343838313731383363623639 +63636536326438333735376137396435363764656432656132326439363137323533346366393564 +61383635643037626134386461336563643434393636396166353633306162383665363831663561 +32383961353066636532386166323639376266623563613134323236616462393739363430616538 +32376132653436343834363661633138376539666239663136313132643830306139616563656265 +33336664613262326463383064623032383139383434343064363338336463626136643765303437 +62663765326434393830653237363564626632363964373234316233383130333964366663346264 +64616437326139613836623465643266323839356536393265326237386131393166616365636538 +30363332386139646563656664356435633736386165643830313766663637666438356536376530 +66333636336666303766396465383066356138376462616664636136663430646466333239333437 +39316137313665333537356432363835303834376639663362613636663931306538316361656664 +33343533326530343832376562646661653364303866343630623866636161613234313636343138 +31376461333834633566303364333566363932373264323432643139333131323339316531643661 +38363039363361636261633136326564353337303339353437643331313534633632646562636132 +31663739376335613961383766353964653535306664373738626464353438653030346339613536 +34393238636665323732633832353863323933663638663433306230626264323336373531383061 +38666666393062333637393634396638353035373765313637323130646666616664313034663638 +34633235373137326165346530303637633837343463383131386432326430363332356635623235 +32663263386335313837663135663032313765636663356432663733643830333464353634616266 +66656563653037326333656238663937363835646139393230383763613736396466326531383937 +35366266396436623131383966653839323835373032356463336561396265623130346433333630 +33346635313264626434666532396536373965346164393934386330373931646264326433616461 +33666464323465666361353036353831653637393436646238613037636334663863323630346331 +64316563626635346235376463333165333938326166323461653935373966353164383664666461 +61383361653964396666663365613938626534626337363933343464383962623564323039363431 +66386564353431323838396365333234376665636533346562643864636566306633663832646232 +66363033363737616564336632626331346136343762316137373037653034313738656638646133 +62386264666661633036623861633131636666353433616462336230383737636164633362363662 +32323930653732663064343234383136633332316534323238383236326330303533386337363832 +32313036613132333563633333356535323531363230366534616263323962326635376261356164 +30633663386432666466396466376437353066313934303639333935653330343434643266613065 +39336662326561656638616230326334376637303431666539333439313636383437353066393532 +63343331663566653665343533333935383937666133353037396438616461343038343666633636 +36353834323435323633303738653262623635313134333364663633343562356364326365613764 +31383362366233323937393065653464396663333830326337616464386434336337333434366533 +32323338363833313565346238626162383763383665626538306564623065363738646138393664 +30623730323038323163636239313433643366353032376234343166656234316230633530373630 +34303137396634313562613562303361306434653833373232393062313461393337646166373964 +63313966303432383830363164373339386139346237313035663966316438343464656236616536 +33336630336532616239316261636438346536303566656332363366336466393531353261653731 +30393665343236663462616562313737386666613736396465656266333533623435646132663466 +32343962663230316636393337613061383330663938613938376433333264393932616331313337 +64616632313263633332363464633166643932333634306337333638616566333431323361653761 +63383137386262633037346562323732663630633939343764313463346432623839346364646361 +34393430386230643863613030326464356532376232666135376436636637626163386162663662 +61393239373662353437623064643835353966643366656435386235343461623734303734373936 +61396630353537623563373736343934663832363138306465323930396532356365363937636539 +36373066383738653465386561343837303035313933636232323763366265353434666536386435 +66383739633437356533386366306130656432356163386365373337656463326638626666323162 +34333137306131386335353064663962336432663730373338313661326266353738326330616239 +33643531656339376663613735646266663065346138313838323061363265666239613663346334 +64323633336632663836626166626163356330343863323939366265366339386236363530353534 +61336633663763303462373463323563346332646534613437323736646639323834373439643430 +32393034646434306163373434623434623836656134383230636236653662306562393335646662 +36316664363334353436633466626137353930653436343163353662633565333338386630393237 +66633732646134383232306466663230333036303939336534613163386562383234616338383166 +39646365383839383065653033613366313739393661656239366661323734353366636266373463 +35303437393061356138393135313832616532356438303434383663353331613030386665386462 +37376566626239363730663464333635353265376635663962336534306262333938333363646163 +64373961313632373365663562393333633539363137303062353834303936393239653937383261 +34323664666234313262326266623465653963396330663638303133626630326466393331363936 +66343730626334393163323561643639363466333966653266623232343063383934666665366630 +36386132346561303831636262393634326561373232366438383532333963316364323031343366 +30383338643035353663646237366431356435346662396436633636343732653132616562643130 +66613263653831363130363436613231626464343234346137623537366331346138633166376334 +37333962363931623033393134386564353265323436353564646634663361353236386332313665 +65656234383831323561643638646139643165643464633836343233326532343362313134623239 +32363762376533393430336133643231366634613934623761333434626437313435616661316231 +36356636656665656562313739393130343162343462336133633561646434613163346130353738 +34303935623936616539636135333761306463393236346436636132383837376333306633636531 +62343166383036353865333737356534353661303330306661323039636131376365383864396163 +62633537663630393665363930646133643464653834616564373530666663386132393235393864 +37653233343936386437336532646664313962333864316438396662326139636161393533666466 +36643034363538306435323464326164616664353066323564323432336261353462373961353237 +63616562373035313561363661366332346130323932393131623538353537633162663362383438 +66633930363733353936613230613438356662633134386664613435666133303136333637616539 +32366164646536363335333365663961643965336332306364363437633762636230393538326265 +30313431623265313634666264366664316361653631306534396265353964393839396331326363 +31636538303362323764313265323462643635323734643435386664316663633335613132363432 +33316561326631313737356231303632653664393863383264633962326637633436393364323864 +63643636636664393331653032376336323039313265633466313965633664346632653237356562 +33393966323937393266336233336566636232616231396465323462353639343230643261393336 +61643134393239386661633833663937653233386235633964366565343232333238363665323063 +39376463393936313932333265373065393333343761363134646565383564616335366630363731 +64333035383031636538313364633438346563323534633462396430353732666361343032626132 +61326339323230393632363934366336663062333832303262623431623961393338386531303763 +38373362643234306538613439306665333130663432373533343739633932383564613036383433 +31656466396436656563303132393033653530393733663531646361643533383639623765373235 +61653635323731396436636531363638646462366565323136333431373063636164666563636665 +38376237623332636234663862363330653138363463323832306330366162656235623737316539 +36393161316134393838323565366333623261396538623737323732653730623265623031333562 +31663964366166633261646163343933666137333738643263333663373365333630326236353263 +66643961313939383736343862303366356161376466323763356162393031353738393065313538 +38623038363065376665313031323636653361333561343536663332616637643131393936346337 +34643639333133366538336539643162303262356239336366316631323431656633653761303266 +66333161633630613533316166633439346137373064363862336664386539316561383464373136 +38303733663164353531663561336137636161333836663963343135326138643363363238376638 +35343233366337653964663635396534373233356235383930316437376363653737386639336636 +31386238323737616139373632663562383734653763333139303239303830363961653961333633 +35336264626634646262663166613331333239623963366133333833656333613837323632313863 +35643733623966613936646636326163363735303733336439353731613062343034626262346661 +35663234663338623361393530626232663561663830636633613431393832373663386238623230 +36653737333563306534653230376239353833653131303035353637323339316235323639366637 +30343335313831376237633932656332306265373530653165653061656261306530653966373132 +64353962626465343639613764333463633365326230336563303231383665393162353034336331 +63333264323264306332323633613163633465376362336466336564303532636465663563663538 +62656632346133653330373737646664386161386264383236336531623931316666343537363466 +64643861643935363433316133633835636166346136363261363735663063343538313766653161 +61613433386165666638633663656235346135353764373132333630353432616433623862306139 +37633066636533326139393033336566666135646132663233303361613833333533666366616437 +39316537353534626330343762623432366239396233333033353238393439323339663339346664 +36386163383466643035643366363639343831613534373466643430623362666638663439373835 +62386662653132643133626463353366366561373338663734363535613838363063366665636637 +34333333316531613931613036383538383333306635646464366463396339313534333638623131 +31663731653535626236623161346561623439356162316537666139343266623138643830363734 +65386136323235616162356439353933353063386661343665663532386532396338353733396663 +33656561653430613832363263306337383334656633376431613135383066333837613165303939 +30636465373735623434323331616539386531386163623265656566623265633238373838633330 +66396639313935623436313733333339623066333838633563643563383233306565376136306632 +31343838346237383362393238373363633237376330316139383638613535643566646464633361 +36343431623165356631383964323561663866656532643439346231393731393838613362666562 +38646237653530623837363165386561663438366663353964333933626136396237616663643566 +36376663363137363835616535623133346136343362373033376562323034656432393064343766 +31666334663263356539346463393232663135313331333435393063333031303063323433663765 +63393734313265306563613630313634333262666334343066343835316461326163646638363961 +36323036386134366232346432393261373631336539653965646431313363613761363433333334 +36303535616135643363333265623236656161373832653835343535373039636563363664656430 +37326631656439363730313831646436333965366232653163336139343763333631396265616562 +38326366396266386663343431306338363033653166663964396631643932396536303536626431 +33396430636130636332346239373536326161396338336536623636363734343832633666323965 +65613735316638663438626237316366643831643764626135366531323835343161316564373764 +65336164656431636632343864376234366139346162663537633465656239643739333265313838 +66363337333966373261336664613666343135663436663632623934363739353932396539353033 +61343161393539386236366562393061336434653535316635373061643832366364643230623436 +64653730303934386537656663366535666131323737323534323531313135316438393838373063 +32383336636333393763643339613939383332646139656564613164353264643236363834373966 +62613532376635643162323834636364363233653437336563393062326137666132343831656434 +34616235366561343766376236376165616630643332363639613866663066326339636164303232 +30376363383431363233363738306230303735663933323530363664376136306236346362323332 +31306365653731373135316439323366666639663765653630613330383635333139383336333634 +34363933636532306433646264323031396364376432323537376236643933333566363135613336 +36386462616363313336623233666564653361306563386663623431643536646637366431623261 +65653338376238613761383532376233393631383133396635633033353933336138383064636538 +33366336396564653134663835343964316261336665303664346166633235383533306234626434 +66633137393336336465313833653430333937623635336230323664396334396538366265653861 +37366464396166616461326435656537383162363966306166303765633739636332336533633063 +39326566666433333939646662336534633064303765316338616239626635336566346137663464 +61666564636332336134363331306337373630653962613962646630356538316233623938633266 +34383737373765653934373233626437643839376334636665303738373035366230666162626163 +63383464623534343464396163626665633462333134663561616533373038373932623536363461 +64613736613433643866396166303132633361313837653639646330663034663630363038363664 +63623061323362383338303536303061346635316532366535303835616231333836653330666661 +30313839373161393735313536383734333262666261633862613363393137346137363437363232 +63653538636633353966306436663835656638356332623237393434353235343064333037656235 +36346162636631343139653634346563356635613665656661316163383962353237343534633339 +38386462323162653039393735393661326665386638323934613439353830663632306332656137 +61363233383535356536333761666564643464316436306235613331356134613834666561303161 +34333830333139333733663632303838653037306135633533363865346432343734303837633061 +64616134393636383331613164393465386630353461623764396534326462623866663066353530 +61643736633430616232633933363364303533336338636230643039386530353233316266656436 +66643433316338353262333661356563633266346331393965643561663864653663663533383665 +37323363343861343737633134666530646237313364323165393732393737646465343163666630 +64643536336433303134333238393861323463663436356433353635326134323439366438353134 +65643065396366363964343236663635313866373265663033326363353034323561666336363762 +64626532393537326539636266323162666662383333663363326232333139363536393537333734 +30333032626162613533613165353165356437376230616335643564623034356131666439613262 +64653533386265303866396135616538633661613036623864313165336632643333626264363639 +66643864376236373266613761323038326664373533363931643264623065633835346331623261 +38313664663062663331633338363036613761366130313464666539393933316564303662666661 +66646232353262616636643034343530313835666163373433633833613837633565386164656235 +66343032316136356232623739613135643165653366623162346234353630306365653438376332 +62316536393831383733303735643436653735396236646430643232346535396533643635356332 +39623031393336313635656535653535613933376232323135376165356662353239333638366633 +30646362663362646439643932303030313738386535363262306438333039376133313935326339 +64363663313934353265326638306262373662373636383135303334386136636166386266613535 +64323235383435363761656234393034646531353836626135303863636637613333383137346235 +37613636363438373830623039623236353736373365363038333637656265383135656164353731 +62323935346535343535333863616363383766333937636464376331306239636563343938303534 +39336337646137363135383134393163306637623964646339663366646130623539303735303833 +36396135316432356534356365316235323437353331346464663739343561353536623031643338 +32613131366235633434373034613766626463623530613032663839336366383335623763656666 +64613634383364643232316166653333356566356232646662666234363635643538653364316565 +63626531376566313933636635653231636438653033346563613964616437366339353131373961 +38656535616332656462626361363364613034623633636138343231643062653936316637333838 +32303131623034343233373336306635663038343234626561376264303635383338663734356237 +62393634633565653331363462346664663434353461623965323838666231666335313031323864 +65353364623330613131366539306564303061383134316362623665666636613936306135386363 +32636536356235323266643961643534653331663361636665353031323464376639356130363765 +63343262316661393931343336363437373336356163663835636366653364323537346532643661 +34666531313064353537666533303837663237313635633934653036353966323765646435626336 +61653338326161333035353631663239366335353239303737616137313364306265326134663037 +31636465623039616361646332303962663937633039666337393762393532313166323633633539 +33666236336133326630323766626533373035316330303262643264633839363337316161383439 +33613165363964356130663963393961626438383531613163663830613835333038336339366465 +36653461306166653633353738393666396261353538393834393637326636616439343131636536 +35653234633566653563383738653538363635316239633736386563393865623264316266373863 +34623235626132336165373134336438653032633534623639663864383438326437386238613062 +39643330633430336435643361643664336330303466333539306361386362366265623734633830 +62663565626366396533643130363662373830623164633536313665656230373830343036633237 +62343332616364653930383766396336386165383133373431623665653038643931313536643732 +34353831323038653963623533336465356337653130333264396231613235303961323230636534 +38623935653833366264316535663133623632363130646136643730373338613230336532343633 +35376463303936346562306161616231623236653164326261323164623735303834363266316537 +36353161613864633131666663646266663463306562646331656563346435386164363132366637 +35316132616661353637303265303137643863366537626533313264656166383461633066336437 +37323732653533643165393931616465626230626663643933313737396537316165326230653463 +61653166396165623464643438626238646630303865313330646234343635623365646665333437 +35333333346338303733306639393533346166653565333362316536356235616162333234633737 +36613030646365666363373063373564656337663837663039643333363365326161326537626335 +65393136306161396166346239323337393232323235373535643765323932353563313631643863 +31613465333439376665363664643433653539666533323531636437356330656361616637376231 +66353139373864636534333966613263613039653832343464313466633235393631323161336330 +66366266616365386538633130333034396138396162663733393836656137336337613062393837 +66323661666137333335393939626232663334333035623434356663336135643837363433306535 +31633564363130336639666538343038323834646536663332306336383864306165373033393563 +33623135333561666265666439353666343437393833613637393634663330656562653631343035 +32336666393131363334323637303939663133613261353965393934633933613534303438333538 +65353930303864646337383237396133346136336136353131323461323262343730323334343035 +62653766366136303338343964643961373532636630353333343032376631353165633438356239 +36323365663366653630323364646465373861643637316538396433333463633934636162643562 +39366532666434313439383864656166323233353763383935333964313438333630636364363366 +39383261623864363633323666663033366564363664356231663032653639623362663061656632 +33373562663932346534393631376663666231303238303232363532663536663630636363366639 +62326631613034366266633834383966613632656664323965393631323665623831343437356363 +32313666633164386232643538663238323932336638396136386238313663313433343031353934 +36353238636539326337303161663135616433633764666462393662313662633466303335633866 +35313637336232353236616139306130326263313336326664313934626561313633346530353134 +35303765366233653635633034633764613861316533633437623261383633373261356135313731 +66316565666134356263393761303533623862613138333134383566326134656435346537353037 +33666635373233323430346565353937396237376232303561356237353632313835326535376631 +30636566386239643036353133393165363939626235323366393431363363303164353261303939 +34633135646132323234383766346263613934393434366535373634376139366233366134366433 +38363738396539393434663361346130383331646565306362343266323131303538323933313430 +64316134653634323962353136353661376466656566383630653963353831363038326535323165 +64383962343563306566613837653432363366313433646631303537316339623162363563373332 +65616239316135333464643730373061616162653833346131633033313633303539636262613763 +65633561623432316435373061633335616530353963313164313535366163623861613464623237 +32343663323636643933663539393538313765623939643331396166333836653730656236663536 +65303961396161386261386630363833633634613431656565326331333136323437326137356263 +34316362376238626333393136346437626535643639393937633532336461333237353765633966 +30666339656661336638376435373561346134383638363566373661333437646362386262646538 +61383232633337336438303761376666336338393133383034343139376264306330333135323030 +61376235663738636435643966306331366433316530396666353365646366316539323038613439 +35656434623163323661376130383061393038633532386563393465643834626630346132323461 +35633966623064623336376665343437613031616237613066336331326339646535363761346163 +37303533336561366133653633366263383132326438326632646661636333383436626535376264 +34363830646664653133363539666534366666653138346235623338363365373263663439396563 +36386331626665653662643164363566656239633564636633396562393037326663356266356339 +38653239616531376664643165633634396533643732613038313361356535616461373235623961 +36376132643932393130663061343366383436666437336366363562373639373465303537313166 +37346265653166306231313635653962363761303733626133633862356161316134326166346362 +32646633363964353937353730623938353061346364373235306132326532616634366330643631 +37353337306261343462373332343133323136363432616165356631356566656134313432363639 +31623066396466383465303262343265623235313261636163376238343861333132356339383663 +36383232383239656635386566666663323762323062636138656265353736323638393933616235 +63346165663930333065653066366532343332366262323662346565333332343532313563393438 +32626231343537313632303137376364626163666462326266646337303262303530323237613365 +38666231646237626238653038363135356531383132366635653163326537633630643063393661 +32323930366436336432633864646565633236616162303439343731306139386463396231313136 +61636434336364303230373432636233343131376163363138666538663763343330646330646465 +66393263313661396266623862393037396330666533643738623966336431633935373863306566 +63356430333232636339376662363463653631323162646666393262363930613166643334313537 +62313463393961336663363338353436366632386461313135653364643937616435363162636235 +39643231333363383531666131313439333331366264656362333439663264396636333263306363 +33363434353331656666363966396135323065363564393835646663643631346530353565326332 +34656431333936663163643238353565326537643839643336653535323432613536633737346332 +66346634613663366630336533633239613238306537376166326231363439333462643534343035 +63643666313765333465333164313332633664383163636238363966363039363662313831353733 +64373435666136303337653333353066643731363433656536666630313464643465313239623462 +39323930343461323037343064653666653738396631613030393034333032666231633936343732 +38396530313734303135303063613765663766303662373562663566303431633937643938313430 +38633061313337383438326134346665303561386431623334616166633036383063323137633239 +35373561353163666262306630353061613861353633616535636236653831373231386337386136 +62303631313538613330353635656562626362663032383236633233343431653237633034316264 +61353839623937366339353865343935313062623965386433633932356466346661393639663135 +65653938363661356562666663326234376330626161663161376135363565663535373562383231 +61333733333365663130313264396130316336656332343934353564653365353863366661666362 +34376161613464653461613830373061323330646130376631363235353935323835643461333065 +36386264653132316364646230313334353639656134396163393136316332613434313536376338 +65383839363432363835653131363963313965346231653137383937623464303439663533636539 +38623430653339353731393764616636376537666366653763346337623535393961313232376434 +36636236303262363737336433653362386633303135336465653764326662646338613537353931 +34336363393737313462646564663761383366316663303530643332326135333962616264643830 +32353162346239636665356339353436333232396635613138303065366534323261623736373633 +38623331663238336661333938383661323939363537356562323533373330336335343063613133 +63373162643738346566303732303531303530316230623432366532633234366262646234303837 +61373733353535343037326164373865313633656238373938396264663537656566643136633535 +65353634333765386562316138633531616437396163366630303931346434336230626138643234 +31666637373464633565326131666234663633376639393662373630383630393336356333366162 +65323630373230313439336565633465363361333661346262313037396131363535633637633530 +38396632393061623534333935366235356136643264363439383731633730306637623437316333 +39383936653031326532656661303361306232393134663231336263313939333233393832666134 +32363931323034366333643066383765386361666266623237623932666532633564323832666264 +39623364626331643063333930666166393533656263653436336265353433303761333861626566 +36633362333331663865366334353730636132643038346661333561363835393031356638393134 +38366565346430383065343532643331303831323566393138653135383338663439393662306563 +34353737376439633837353033626332346632396331643432306339366235616332316634353162 +61323162656666353666623333633238663933646132363338353365336632363937636532666264 +61323838323333353564373635633164383031663434326638653130346334303236326363343435 +35306664333233303965353166346131343136313966366232326535376435346534616431623337 +32353065323638336665613630306232666462613033633032633130633566396266396532393261 +36383831373733353633633963636161646130633763633034356137383038656461343139623430 +31653066386536333633323263666237316461626534623465636536393664643936366434646438 +36333933646263346534316539666132636664383365653939636630333435626532313366356630 +30663035356164376262373036633132636533373065326163313266333262666265616666326132 +36616530316530666639396330373935326438353733386235386664363465343232613236336130 +38333264323462386662393764333364386564303331356534373863343534356433383337353135 +33353961363034363865323331646532333838303135616464616337363935336236333964643632 +63643630343731323331393539613733363033303832323362343761313963366561306464346432 +63313332653037353365323631313230383132333736306338353239346162363931653163313932 +62613333396131323732646161303036623033333763383731306133656237343039313034353030 +34373538376162656266333231336365356562353766386261323566643962623133336465646337 +61373535643133373434633165383538333339346635383735643061343262643535633435396338 +62616234646534396339313636646464386366653235633861373730643361363938376631653563 +39613431343964393933373034363365653239643230363338623234666534343332303236373231 +34313833346263613832326562376563326461333861366139363638306432316438643164623234 +35383338376264306434363739383733313838663964333261333939383364343538396333313136 +63396536613135646235343966303634636636326236356634343930386631633663343134663739 +32313164323539343737663263636365663463313063623139363363383965656333353931623632 +37346161616233396534636563646436363033353839666635343532663965653663653061323934 +30663561353263393634376361373066386530323765343161646364303835666662306562393233 +31393235643536623433646136393732306538646330306163623835313135613762363933643037 +35303666336237373565323262376461393436326665636261323639386262366634336661313565 +39306331396364613939636164626532656438373862303838623438303064623739383639323637 +37386131663465343137383832363737303934633432353438343035623938326435663763656163 +32636337303366333865316131643135363833333562386562633365303266623861306266626330 +64373531346263316364353231383230393737346463303939336163386634313032313733633530 +66616534613237653436643363323237396631393339646534393533316334336364626662663038 +36386438653165383161626230393532656463663238643566303166656238393638343664643163 +62306634633364663166333761386434386635323034306531353562386164633137306462313339 +63333166643136383335346130383436376361373765636438663735393830306631333539343439 +63346464336564313434313538646438393865376562613733393739343239313864666635643832 +34616136613161643933343361633037613266333933363339363130363566623739636532386263 +64383331616161663561613830376430366663303931653534666539663165643061343339383138 +64336261333731393063316162313832633765653665633839613330343062316330623831353331 +62646333373166303538366439663535356661373632636539653333646239663630316138653161 +39376534373862336264393634303339313166383632613564616633396463653731623433323637 +63653433393531376639363037313963366231623161343239643538616534353437653137623738 +39323563633038386462323862636261383031663935353934323563663764343532323338393063 +61323165336530656366316533333432356331316534663131333239373432383830656561393836 +65383263356631323337363963346634633537353131386537303635623834653661393538343366 +65303466373132666536396261636361316365653561633731613539393630323063633761393538 +30356262653562666562643662383430346635326433316138663734303838383635616565326537 +36326330306630313430383538366165643337306262663166306462366139643438323932616635 +64303533373066376263356533376163376339316564316163313335343835663238316337306461 +35393765626338373032306663333337616130326439306164353132666331646635343039653732 +32653662353761656664366335353033643436376231373439323335646562373837306236323635 +39666134306365393762633766313538383635393864353835363366313562343537353163396337 +35376638303361323463313366386162626533323135313934343730396134336365613938643139 +66363435353838666464653833376636333961636235303433656463636132396266326339653566 +31383865323339323962333733323062323264626239653665346232346539363539353539333230 +65653137383831323539356163623465313964653964663234636433396631333165643134383435 +31353132346434393635653833313236393831396664386566613032386534343537306563636631 +36353861663530313534643962366537336139633436323136636530623165303865666435383065 +31653665353833366134386132363162396330353465373462333263393537653839323563373838 +35613166313537353565323766323864656361303165653737356264633634656235666331653634 +63636138656530656264333462613962633434656134353662373165666530623363623834633632 +62313434626131313362333430643432336564613130633366643330346533366633353237666233 +33353137383236383362653361623732356330333833316631343137666164396538323034323165 +66633838326665346531306534613237643938643866303034363137303664366665343634303237 +63646534626338326632303264313737636236393237643935396134656661326435363133653566 +64643562343235326432303532646665363431393063626664626335303438633639323635363766 +32343662343664313139333565326365333630323332646262316535613262353236363537633961 +37306137326139353337396466643932623539326331323736393038373261656665393732353134 +66303065666137336563333164396464653038303530326662613635383563623766353365393162 +31646635303632626233303131303237313438633462376262666463326430323031323165623933 +62613965656661343563383066343530333564626438326262323265326363656530643362326434 +39663337626137333533346434313465393432653266313835343663393936396162356533313034 +34313932363632623363363763376338303131656161326637666436333237633061313537623639 +65333637666432646231343538633865343239613434343839616563656261633562373066643364 +31633166643263393636346539303037666165343131656363633465653566323461623234386130 +62633164333830303633353464613637333031633630386163333531396534376530663330616234 +34356237313430646565346663636138363635623635346561353961316531363038663961343536 +61386532363064396663636236303938393166666439386638633933383633383561663763393062 +61646465326532336236303833353361353638653363376338316163653061616137613864626635 +61636135623139333434336537356663653137336464346565633161666132363562613732313166 +34663964633437393932613534336665366361656535333530613262653564623433393437353835 +32343831323932353163336364343230333962393165666262313736633234643661313837303965 +61623061316462316636366166656634353462343063343064616136643537386562336362373532 +64653631333634616566383637326161663935646266306563313339313339383138633139613136 +66623939666631343466383935613766646631393962633963336263383635383034333761366133 +63333234313731393837616635343634663161393634656165353535323765663331623266343937 +39303562383936323163633165666437383065336631333264646662333464303631386137306531 +66386339663739303230303531616439666137633961623666383935623230353334356432366338 +62633965613539373732653439313334643533383033323837613165653262396462343937626133 +65646432336630613736636233336136633562386233313631306231303132383632386533303734 +64306466323533656632313133633361316163386338303336646130653734343562323362653861 +31383261373432346266386235666261383733346464396163396466333331353634633062343738 +31396438643738303530383131666134366662646164343866383138346465653362663137376262 +35313838663334646235643861636335393038633431643565363632623966633463386532323939 +65393135323930303362373134313266356436323838326665346166346633333936376131313430 +30323361383865343530383536333164313530626363373335353166653066393831383134306464 +62653538373130316266396261356639666436343562383639353839633336613666616366666431 +63346161636134346433623439313635653831353531353536383439383037353534613465626532 +34373538633838646530663764666532643865623334366366323131343032643266376436663231 +37616363363339363734373165353864303365343633636466623734373736633963303839636632 +62663139616137393334346661353438623236326561626639383635343636656131396164343466 +38616233353038316139303739333461666337393631383834613938653166613766623034653839 +64666265383539303163373539616631323733356134663839643162303964633337656564346265 +62396532323139323166383135373637633639316432373738313666386230336133353737626331 +32373532333437343262636135623632636335653632623735306263393562613866653561316131 +65663133396161613131653738643039316533333739636437323966643936346336366365633963 +66333538643737383238343866623235626434346637633164646138336566636535613961666132 +38383932653861613036303562666531383039363031636336663063333662653733323130633966 +39373262363632343438343239666433366534363530333262326666663434373533646635356533 +61613935326664383634623530343636626135336637633837343138313861343462633438326362 +66353938383432326238316131663933326136633731326465346633353962613064323663353134 +32336436646162643934313138643037643333663835646464643863626134663963616230326535 +66323434323536616639633963393537623239613664633130343738663663336538343037386435 +61666332306161663334383736636638386237643230343433313830353734363238326334663266 +63353333666537626139306335323964633635303638356265396265386636613539393561653730 +33323265633035643364636365623566643739323634656461613063643639306539323634343261 +66326333666136306164643166336235313134373035346665653133623239373763653938626365 +32643162313662623935396363633236386561386531376365616662646332376235663334303561 +34653861303630623266333035613631643738353936623636393839343539323334386431396437 +38643338323963363964363332343731643365313835383961313637333038643738653366353663 +30343062303632663562303134326463333636313066343233333132353266313766343734373138 +61396561396635346539333164383964653539326465613362663836636333613462333731346437 +37656162636331363536636433313534613038383130616164623866653436323836323232393862 +66343266633231653734643630303437396134396631366336626663346662313861356362323866 +31646563323066353961366134336339356638363239363138386662376234663764353761396361 +62316434323564373338383464323265303866303561336133376239343636626665663561613366 +61656463643564336437343136646635386533663062623066323664326561643938663330313064 +36323361383230613263653735336361393532303664653332613663613830393864643830666633 +62633737303332623039613838323063343932386136343966663437313163623938656663366236 +36356364323936363864313237353861613962613862396365386339663562623365656132666463 +30666535333930386236323939343563633362333636393334343231663734663965333434336331 +35663138363264323438376138363630643062356631343437303662313864663030613534386334 +62326462316331626230313261633533373964633766643631313736383964393864343961636439 +65633064313938346562376132326362396337353435323362626665383331336631653033333132 +33313832663934326435313162393865623331346132646433646564356131663536356166376132 +61316138373134646236356261316535326135393131306533313861636436663036656530363265 +38393136303263313238356161303830326435336666383133373430653631623063366336326666 +36306161363337303532653637323264356665326130333832303533393463393531323737643362 +62303530646538646566616164336334323239313135353237303263386162363238653964633936 +35393264306635363933646537303462346234656631613261356666653439643164663232373061 +64313132656630353432643231376664376164306163373234326635613339343833633365373331 +66376134383062373461306537386530386431323261663261663939303866343832656433633937 +36616563383133346231376237363431386338363762646534653362393937363564303566356161 +36363331383932383736356561626234383662356461393939643832633365333230626461343735 +39393939316235343764376666356363616335633937346262633735656539343431373736346163 +39646634326463373738323133643232316433373831306637336437353033613836343431633063 +63386565393630616532313038386434633066343764313963316262323236323336316536313362 +34396262303539303837623335313934633130663730326364623935323835663061393134363637 +64313065326239336166313735343962653930656332626364396536396461653537393662386435 +30333638316334373235623337666266376439336163396533373231623535373761666535633933 +63616230383835386463616133306633336262646365396631653230303062653962343530353066 +64326538636234623530313539333834346239626263396365353766363639626537313966663836 +63656437303863346266356561613562663134306465623135626361643736616663646330353231 +34356464393535653163396264366164353435623031646562383263636132363533 From 4017895671577a5926c3f635dde6a98d2c8b652b Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Thu, 21 Dec 2017 18:43:01 +0530 Subject: [PATCH 07/41] Issue #24 chore:Sunbird auth package build --- .../scripts/ansible/inventories/local/hosts | 140 ++++++++++++++++++ .../ansible/roles/keycloak/tasks/deploy.yml | 50 +++++++ .../ansible/roles/keycloak/tasks/main.yml | 3 + 3 files changed, 193 insertions(+) create mode 100644 keycloak/scripts/ansible/roles/keycloak/tasks/deploy.yml diff --git a/keycloak/scripts/ansible/inventories/local/hosts b/keycloak/scripts/ansible/inventories/local/hosts index 3634f2c7..74af6e13 100644 --- a/keycloak/scripts/ansible/inventories/local/hosts +++ b/keycloak/scripts/ansible/inventories/local/hosts @@ -6,6 +6,7 @@ dev-postgresql-1 [dev-postgresql-slave:children] + [postgresql-master:children] dev-postgresql-master @@ -18,9 +19,148 @@ postgresql-master [postgresql-restore:children] postgresql-master +[dev-keycloak-1] +10.113.0.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-keycloak-2] +10.113.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + + +[dev-log-es-1] +10.10.3.10 ansible_ssh_user=deployer node_name=dev-log-es-1 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-es-1] +10.10.3.7 ansible_ssh_user=deployer es_instance_name=dev-es-1 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-es-2] +10.10.3.8 ansible_ssh_user=deployer es_instance_name=dev-es-2 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-es-3] +10.10.3.6 ansible_ssh_user=deployer es_instance_name=dev-es-3 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-cassandra-1] +10.10.4.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-swarm-bootstrap-manager] +172.16.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-swarm-manager] +172.16.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-keycloak1] +10.113.0.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[dev-keycloak2] +10.113.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" + +[keycloak:children] +dev-keycloak1 +dev-keycloak2 + +[swarm-agent-docker-prune] +localhost ansible_connection=local + +[dev-kong-api] +localhost ansible_connection=local + +[kong-api:children] +dev-kong-api + +[dev-grafana-dashboards-export] +localhost ansible_connection=local + +[grafana-dashboards-export:children] +dev-grafana-dashboards-export + +[dev-grafana-dashboards-import] +localhost ansible_connection=local + +[grafana-dashboards-import:children] +dev-grafana-dashboards-import + +[swarm-bootstrap-manager:children] +dev-swarm-bootstrap-manager + +[swarm-manager:children] +dev-swarm-manager + + +[dev-es:children] +dev-es-1 +dev-es-2 +dev-es-3 + +[dev-log-es:children] +dev-log-es-1 + +[es:children] +dev-es + +[es-backup:children] +dev-es-1 + +[log-es-backup:children] +dev-log-es-1 + +[log-es:children] +dev-log-es + +[cassandra:children] +dev-cassandra-1 + +[dev-keycloak:children] +dev-keycloak-1 +dev-keycloak-2 + +[swarm-agent-for-prometheus] +10.0.0.9 ansible_ssh_user=ops ansible_ssh_private_key_file=/run/secrets/ops-private-key + +[swarm-agent-for-grafana] +10.0.0.12 ansible_ssh_user=ops ansible_ssh_private_key_file=/run/secrets/ops-private-key + +[swarm-agent-for-alertmanager] +10.0.0.9 ansible_ssh_user=ops ansible_ssh_private_key_file=/run/secrets/ops-private-key + [local] localhost ansible_connection=local [localhost] localhost ansible_connection=local +[non-swarm-nodes:children] +postgresql-master +postgresql-slave +postgresql-backup +postgresql-restore +es +cassandra +log-es +keycloak +local +localhost + +[local-task-runners:children] +kong-api +grafana-dashboards-export +grafana-dashboards-import + +[swarm-nodes:children] +swarm-manager +swarm-bootstrap-manager +swarm-agent-for-prometheus +swarm-agent-for-grafana +swarm-agent-for-alertmanager + +[node-exporter:children] +non-swarm-nodes +swarm-manager + +[log-forwarder:children] +non-swarm-nodes +swarm-manager + +[dev:children] +non-swarm-nodes +swarm-nodes +local-task-runners + diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/deploy.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy.yml new file mode 100644 index 00000000..e0a187ec --- /dev/null +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy.yml @@ -0,0 +1,50 @@ +- name: status service + become: yes + command: /etc/init.d/keycloak status + register: keycloak + poll: 5 + async: 10 + +- name: stop service + become: yes + command: /etc/init.d/keycloak stop && Pkill keycloak + when: "keycloak.stdout.find('running') != -1" + poll: 5 + async: 10 + ignore_errors: yes + +- name: remove keycloak + become: yes + file: path="{{keycloak_home}}" state=absent + +- name: change build script permissions + become: yes + file: path=/opt owner={{wildfly_user}} group={{wildfly_group}} mode=0755 recurse=yes + +- name: Paste keycloak package on server + copy: src="sunbird_auth_{{sunbird_auth_version}}.zip" dest="/opt/" force=no owner={{wildfly_user}} group={{wildfly_group}} + +- name: extarct the folder + unarchive: src="/opt/sunbird_auth_{{sunbird_auth_version}}.zip" dest=/opt/ copy=no owner={{wildfly_user}} group={{wildfly_group}} + +- name: move the folder name + command: mv sunbird_auth_{{sunbird_auth_version}} keycloak + args: + chdir: /opt + +- name: remove the sunbird_auth_{{sunbird_auth_version}} + become: yes + file: path=/opt/sunbird_auth_{{sunbird_auth_version}} state=absent + +- name: Create management user + command: "{{ wildfly_dir }}/bin/add-user-keycloak.sh -r master -u {{ keycloak_management_user }} -p {{ keycloak_management_password }}" + become_user: "{{ wildfly_user }}" + when: keycloak_management_user is defined and + keycloak_management_password is defined + ignore_errors: yes + +- name: start service + become: yes + command: /etc/init.d/keycloak start + poll: 5 + async: 5 diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/main.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/main.yml index 5a0d0c00..51e08a8e 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/main.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/main.yml @@ -2,3 +2,6 @@ tags: - build +- include: deploy.yml + tags: + - deploy From 4c843a8697778029dded260cb106e229816b2b90 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Thu, 21 Dec 2017 18:47:08 +0530 Subject: [PATCH 08/41] Issue #24 chore:Sunbird auth package build --- .../pipelines/keycloak-build/Jenkinsfile.dev | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev b/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev index acbdcbce..e39e8753 100644 --- a/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev +++ b/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev @@ -2,21 +2,27 @@ node('build-slave') { - currentBuild.result = "SUCCESS" + currentBuild.result = "SUCCESS" - try { + try { - stage('Build'){ - sh('cd sunbird-auth/keycloak/scripts/ansible && ansible-playbook -i inventories/dev keycloak.yml --tags build --vault-password-file /run/secrets/vault-pass') - } + stage('checkout') + { + sh('rm -rf sunbird-auth') + sh('git clone https://github.com/ahghatol/sunbird-auth.git') + } - stage('Archive'){ - // archiveArtifacts 'keycloak_build/login.tar.gz' - // archiveArtifacts 'keycloak_build.tar.gz' - } - } - catch (err) { - currentBuild.result = "FAILURE" - throw err - } + stage('Build'){ + sh('ls') + sh('cd sunbird-auth/keycloak/scripts/ansible && ansible-playbook -i inventories/dev keycloak.yml --tags build --vault-password-file /home/ops/vault -vvv') + } + + stage('Archive'){ + archiveArtifacts 'sunbird-auth/keycloak/scripts/ansible/sunbird_auth_1.0v.zip' + } + } + catch (err) { + currentBuild.result = "FAILURE" + throw err + } } From f773bf90cffc220608bc7b0411b927d953ccc7ca Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Fri, 22 Dec 2017 10:59:19 +0530 Subject: [PATCH 09/41] Issue #24 chore:Sunbird auth package build --- .../pipelines/keycloak-deploy/Jenkinsfile.dev | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 keycloak/scripts/pipelines/keycloak-deploy/Jenkinsfile.dev diff --git a/keycloak/scripts/pipelines/keycloak-deploy/Jenkinsfile.dev b/keycloak/scripts/pipelines/keycloak-deploy/Jenkinsfile.dev new file mode 100644 index 00000000..c21fd6a8 --- /dev/null +++ b/keycloak/scripts/pipelines/keycloak-deploy/Jenkinsfile.dev @@ -0,0 +1,35 @@ +#!groovy + +node('general-dev') { + + currentBuild.result = "SUCCESS" + + try { + + stage('checkout') + { + sh('rm -rf sunbird-auth') + sh('git clone https://github.com/ahghatol/sunbird-auth.git') + } + + stage('Build'){ + + step ([$class: 'CopyArtifact', + projectName: 'Dev/Keycloak_Deploy', + filter: 'keycloak_build.tar.gz', + target: 'sunbird-auth/keycloak/scripts/ansible' ] + ); + + sh('ls') + sh('cd sunbird-auth/keycloak/scripts/ansible && ansible-playbook -i inventories/dev keycloak.yml --tags deploy --vault-password-file /run/secrets/vault-pass -vvv') + } + + stage('Archive'){ + archiveArtifacts 'sunbird-auth/keycloak/scripts/ansible/sunbird_auth_1.0v.zip' + } + } + catch (err) { + currentBuild.result = "FAILURE" + throw err + } +} From 622938ef4485c1826d6348d62de80c3e4f79e79f Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Mon, 25 Dec 2017 12:31:29 +0530 Subject: [PATCH 10/41] Issue #24 chore:Sunbird auth package build --- .../scripts/ansible/roles/keycloak/tasks/build.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml index 4e9746b7..71855dbe 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml @@ -10,19 +10,19 @@ - name: Extract {{keycloak_pkg_file}} shell: cd sunbird_auth_{{sunbird_auth_version}} && tar -xvf {{keycloak_pkg_file}} --strip 1 -- name: Create sunbird auth directory +- name: Create directory for postgresql driver file: path: sunbird_auth_{{sunbird_auth_version}}/modules/system/layers/keycloak/org/postgresql/main state: directory mode: 0755 -- name: get the postgresql driver +- name: Get the postgresql driver get_url: url={{postgresql_driver_src}} dest="sunbird_auth_{{sunbird_auth_version}}/modules/system/layers/keycloak/org/postgresql/main/" force=no -- name: Build provider package +- name: Build SMS provider package shell: cd ../../sms-provider && mvn package -- name: Copy SMS OTP jar file to providers dir +- name: Copy SMS OTP jar file to providers directory copy: src="../../sms-provider/target/{{keycloak_sms_provider_build}}" dest="sunbird_auth_{{sunbird_auth_version}}/providers/" - name: Create sunbird auth directory @@ -34,7 +34,7 @@ - name: Copy Custom Validation theme html to sunbird login theme copy: src="../../sms-provider/templates/" dest="sunbird_auth_{{sunbird_auth_version}}/themes/sunbird/login/" force="yes" -- name: XML file +- name: Keycloak configuration XML file template: src: "roles/keycloak/templates/standalone-ha.xml" dest: "sunbird_auth_{{sunbird_auth_version}}/standalone/configuration/standalone-ha.xml" @@ -58,7 +58,7 @@ dest: "sunbird_auth_{{sunbird_auth_version}}/bin/sms-provider/Msg91Creds.json" mode: 0750 -- name: remove the Keycloak zip +- name: Remove the Keycloak zip become: yes file: path="sunbird_auth_{{sunbird_auth_version}}/{{keycloak_pkg_file}}" state=absent From 8a7447df79bb0686d1be865269f7fa3c08afd829 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Mon, 25 Dec 2017 19:45:54 +0530 Subject: [PATCH 11/41] Issue #24 chore:Sunbird auth package build --- keycloak/scripts/ansible/keycloak.yml | 2 +- keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev | 2 +- keycloak/scripts/pipelines/keycloak-deploy/Jenkinsfile.dev | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/keycloak/scripts/ansible/keycloak.yml b/keycloak/scripts/ansible/keycloak.yml index fff6fbb3..bedfec20 100644 --- a/keycloak/scripts/ansible/keycloak.yml +++ b/keycloak/scripts/ansible/keycloak.yml @@ -1,5 +1,5 @@ --- -- hosts: localhost +- hosts: all become: true vars_files: - ['{{inventory_dir}}/secrets.yml'] diff --git a/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev b/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev index e39e8753..841be598 100644 --- a/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev +++ b/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev @@ -14,7 +14,7 @@ node('build-slave') { stage('Build'){ sh('ls') - sh('cd sunbird-auth/keycloak/scripts/ansible && ansible-playbook -i inventories/dev keycloak.yml --tags build --vault-password-file /home/ops/vault -vvv') + sh('cd sunbird-auth/keycloak/scripts/ansible && ansible-playbook -i inventories/dev keycloak.yml --limit localhost --tags build --vault-password-file /home/ops/vault -vvv') } stage('Archive'){ diff --git a/keycloak/scripts/pipelines/keycloak-deploy/Jenkinsfile.dev b/keycloak/scripts/pipelines/keycloak-deploy/Jenkinsfile.dev index c21fd6a8..198be879 100644 --- a/keycloak/scripts/pipelines/keycloak-deploy/Jenkinsfile.dev +++ b/keycloak/scripts/pipelines/keycloak-deploy/Jenkinsfile.dev @@ -20,8 +20,7 @@ node('general-dev') { target: 'sunbird-auth/keycloak/scripts/ansible' ] ); - sh('ls') - sh('cd sunbird-auth/keycloak/scripts/ansible && ansible-playbook -i inventories/dev keycloak.yml --tags deploy --vault-password-file /run/secrets/vault-pass -vvv') + sh('cd sunbird-auth/keycloak/scripts/ansible && ansible-playbook -i inventories/dev keycloak.yml --limit keycloak --tags deploy --vault-password-file /run/secrets/vault-pass -vvv') } stage('Archive'){ From 581774d332052a61abb93d5972b842e77eb74326 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Tue, 26 Dec 2017 00:10:53 +0530 Subject: [PATCH 12/41] Issue #24 chore:Sunbird auth package build --- keycloak/scripts/pipelines/keycloak-deploy/Jenkinsfile.dev | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keycloak/scripts/pipelines/keycloak-deploy/Jenkinsfile.dev b/keycloak/scripts/pipelines/keycloak-deploy/Jenkinsfile.dev index 198be879..34ea4088 100644 --- a/keycloak/scripts/pipelines/keycloak-deploy/Jenkinsfile.dev +++ b/keycloak/scripts/pipelines/keycloak-deploy/Jenkinsfile.dev @@ -15,8 +15,8 @@ node('general-dev') { stage('Build'){ step ([$class: 'CopyArtifact', - projectName: 'Dev/Keycloak_Deploy', - filter: 'keycloak_build.tar.gz', + projectName: 'New_Build/Sunbird_Auth_Build', + filter: 'sunbird_auth_1.0v.zip', target: 'sunbird-auth/keycloak/scripts/ansible' ] ); From 9a0481c9f00b29ce8d536271e2121e82f03df4d8 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Tue, 26 Dec 2017 00:27:42 +0530 Subject: [PATCH 13/41] Issue #24 chore:Sunbird auth package build --- keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev b/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev index 841be598..5b002c3b 100644 --- a/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev +++ b/keycloak/scripts/pipelines/keycloak-build/Jenkinsfile.dev @@ -18,7 +18,8 @@ node('build-slave') { } stage('Archive'){ - archiveArtifacts 'sunbird-auth/keycloak/scripts/ansible/sunbird_auth_1.0v.zip' + sh('cp sunbird-auth/keycloak/scripts/ansible/sunbird_auth_1.0v.zip .') + archiveArtifacts 'sunbird_auth_1.0v.zip' } } catch (err) { From 3d879d7e1eef329eb25cf4510c0d9568b4416930 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Tue, 26 Dec 2017 18:56:34 +0530 Subject: [PATCH 14/41] Issue #24 chore:Sunbird auth package build --- .../roles/keycloak/tasks/deploy-conf.yml | 25 +++++++++++++++++++ .../ansible/roles/keycloak/tasks/main.yml | 4 +++ 2 files changed, 29 insertions(+) create mode 100644 keycloak/scripts/ansible/roles/keycloak/tasks/deploy-conf.yml diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-conf.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-conf.yml new file mode 100644 index 00000000..996cec5d --- /dev/null +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-conf.yml @@ -0,0 +1,25 @@ +- name: Keycloak configuration XML file + template: + src:"roles/keycloak/templates/templates/standalone-ha.xml" + dest:"{{keycloak_home}}/standalone/configuration/standalone-ha.xml" + mode:0750 + +- name: Postgresql Configuration- module.xml + template: + src:"roles/keycloak/templates/templates/module.xml.j2" + dest:"{{keycloak_home}}/modules/system/layers/keycloak/org/postgresql/main/module.xml" + mode:0750 + +- name: Create directory for sms provider configuration + file: + path:"{{keycloak_home}}/bin/sms-provider" + state:directory + mode:0755 + +- name: SMS provider configuration file + template: + src:"roles/keycloak/templates/templates/Msg91Creds.json.j2" + dest:"{{keycloak_home}}/bin/sms-provider/Msg91Creds.json" + owner:"{{wildfly_user}}" + group:"{{wildfly_group}}" + mode:0755 diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/main.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/main.yml index 51e08a8e..4e8c2b59 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/main.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/main.yml @@ -5,3 +5,7 @@ - include: deploy.yml tags: - deploy + +- include: deploy-conf.yml + tags: + - deploy-conf From f157c1ceec7a173056d95f5985a49cf1726515b3 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Tue, 26 Dec 2017 19:04:42 +0530 Subject: [PATCH 15/41] Issue #24 chore:Sunbird auth package build --- .../roles/keycloak/tasks/deploy-conf.yml | 2 +- .../keycloak-deploy/JenkinsfileDeployConf.dev | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 keycloak/scripts/pipelines/keycloak-deploy/JenkinsfileDeployConf.dev diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-conf.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-conf.yml index 996cec5d..f629e720 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-conf.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-conf.yml @@ -10,7 +10,7 @@ dest:"{{keycloak_home}}/modules/system/layers/keycloak/org/postgresql/main/module.xml" mode:0750 -- name: Create directory for sms provider configuration +- name: Create a directory for SMS provider configuration file: path:"{{keycloak_home}}/bin/sms-provider" state:directory diff --git a/keycloak/scripts/pipelines/keycloak-deploy/JenkinsfileDeployConf.dev b/keycloak/scripts/pipelines/keycloak-deploy/JenkinsfileDeployConf.dev new file mode 100644 index 00000000..14c9a207 --- /dev/null +++ b/keycloak/scripts/pipelines/keycloak-deploy/JenkinsfileDeployConf.dev @@ -0,0 +1,23 @@ +#!groovy + +node('general-dev') { + + currentBuild.result = "SUCCESS" + + try { + + stage('checkout') + { + sh('rm -rf sunbird-auth') + sh('git clone https://github.com/ahghatol/sunbird-auth.git') + } + + stage('Build'){ + sh('cd sunbird-auth/keycloak/scripts/ansible && ansible-playbook -i inventories/dev keycloak.yml --limit keycloak --tags deploy-conf --vault-password-file /run/secrets/vault-pass -vvv') + } + } + catch (err) { + currentBuild.result = "FAILURE" + throw err + } +} From be6fd62fe29dd063094d941dafccd10455daba7c Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Tue, 26 Dec 2017 19:34:52 +0530 Subject: [PATCH 16/41] Issue #24 chore:Sunbird auth package build --- keycloak/scripts/ansible/roles/keycloak/tasks/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml index 71855dbe..4d22d7e9 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml @@ -27,7 +27,7 @@ - name: Create sunbird auth directory file: - path: sunbird_auth_{{sunbird_auth_version}}/themes/sunbird/login/ + path: sunbird_auth_{{sunbird_auth_version}}/themes/sunbird/login state: directory mode: 0755 From 8f7929e539e49562ff4ca2acc1f0a5ed4afe7d31 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Tue, 26 Dec 2017 19:56:18 +0530 Subject: [PATCH 17/41] Issue #24 chore:Sunbird auth package build --- .../sunbird/login-reset-password.ftl | 49 +++ .../sunbird/login-update-password.ftl | 51 +++ .../ansible/artifacts/sunbird/login.ftl | 72 ++++ .../sunbird/messages/messages_en.properties | 258 +++++++++++++ .../artifacts/sunbird/resources/css/login.css | 141 +++++++ .../sunbird/resources/css/semantic.min.css | 364 ++++++++++++++++++ .../sunbird/resources/css/styles.css | 199 ++++++++++ .../sunbird/resources/img/bkgrnd.png | Bin 0 -> 68091 bytes .../artifacts/sunbird/resources/img/logo.png | Bin 0 -> 68091 bytes .../artifacts/sunbird/theme.properties | 21 + .../ansible/roles/keycloak/tasks/build.yml | 21 +- 11 files changed, 1173 insertions(+), 3 deletions(-) create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/login-reset-password.ftl create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/login-update-password.ftl create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/login.ftl create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/messages/messages_en.properties create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/resources/css/login.css create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/resources/css/semantic.min.css create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/resources/css/styles.css create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/resources/img/bkgrnd.png create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/resources/img/logo.png create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/theme.properties diff --git a/keycloak/scripts/ansible/artifacts/sunbird/login-reset-password.ftl b/keycloak/scripts/ansible/artifacts/sunbird/login-reset-password.ftl new file mode 100644 index 00000000..70e141c7 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/login-reset-password.ftl @@ -0,0 +1,49 @@ +<#import "template.ftl" as layout> +<@layout.registrationLayout displayInfo=true; section> + <#if section = "title"> + ${msg("emailForgotTitle")} + <#elseif section = "header"> + ${msg("emailForgotTitle")} + <#elseif section = "form"> + + <#elseif section = "info" > + + + \ No newline at end of file diff --git a/keycloak/scripts/ansible/artifacts/sunbird/login-update-password.ftl b/keycloak/scripts/ansible/artifacts/sunbird/login-update-password.ftl new file mode 100644 index 00000000..a44d949c --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/login-update-password.ftl @@ -0,0 +1,51 @@ +<#import "template.ftl" as layout> +<@layout.registrationLayout displayInfo=true; section> + <#if section = "title"> + ${msg("updatePasswordTitle")} + <#elseif section = "header"> + ${msg("updatePasswordTitle")} + <#elseif section = "form"> + + + diff --git a/keycloak/scripts/ansible/artifacts/sunbird/login.ftl b/keycloak/scripts/ansible/artifacts/sunbird/login.ftl new file mode 100644 index 00000000..7ef2ec3b --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/login.ftl @@ -0,0 +1,72 @@ +<#import "template.ftl" as layout> +<@layout.registrationLayout displayInfo=social.displayInfo; section> + <#if section = "title"> + ${msg("loginTitle",(realm.displayName!''))} + <#elseif section = "header"> + ${msg("loginTitleHtml",(realm.displayNameHtml!''))} + <#elseif section = "form"> + <#if realm.password> + + + <#elseif section = "info" > + <#if realm.password && realm.registrationAllowed && !usernameEditDisabled??> +
+ ${msg("noAccount")} ${msg("doRegister")} +
+ + + <#if realm.password && social.providers??> +
+ +
+ + + \ No newline at end of file diff --git a/keycloak/scripts/ansible/artifacts/sunbird/messages/messages_en.properties b/keycloak/scripts/ansible/artifacts/sunbird/messages/messages_en.properties new file mode 100644 index 00000000..ea9fa528 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/messages/messages_en.properties @@ -0,0 +1,258 @@ +doLogIn=Login +doRegister=Register +doCancel=Cancel +doSubmit=Submit +doYes=Yes +doNo=No +doContinue=Continue +doAccept=Accept +doDecline=Decline +doForgotPassword=Forgot Password? +doClickHere=Click here +doImpersonate=Impersonate +kerberosNotConfigured=Kerberos Not Configured +kerberosNotConfiguredTitle=Kerberos Not Configured +bypassKerberosDetail=Either you are not logged in via Kerberos or your browser is not set up for Kerberos login. Please click continue to login in through other means +kerberosNotSetUp=Kerberos is not set up. You cannot login. +registerWithTitle=Register with {0} +registerWithTitleHtml={0} +loginTitle=Log in to {0} +loginTitleHtml={0} +impersonateTitle={0} Impersonate User +impersonateTitleHtml={0} Impersonate User +realmChoice=Realm +unknownUser=Unknown user +loginTotpTitle=Mobile Authenticator Setup +loginProfileTitle=Update Account Information +loginTimeout=You took too long to login. Login process starting from beginning. +oauthGrantTitle=Grant Access +oauthGrantTitleHtml={0} +errorTitle=We''re sorry... +errorTitleHtml=We''re sorry ... +emailVerifyTitle=Email verification +emailForgotTitle=Forgot Your Password? +updatePasswordTitle=Update Password +codeSuccessTitle=Success code +codeErrorTitle=Error code\: {0} + +termsTitle=Terms and Conditions +termsTitleHtml=Terms and Conditions +termsText=

Terms and conditions to be defined

+ +recaptchaFailed=Invalid Recaptcha +recaptchaNotConfigured=Recaptcha is required, but not configured +consentDenied=Consent denied. + +noAccount=New user? +username=Username +usernameOrEmail=Username or email +firstName=First name +givenName=Given name +fullName=Full name +lastName=Last name +familyName=Family name +email=Email +password=Password +passwordConfirm=Confirm Password +passwordNew=New Password +passwordNewConfirm=New Password confirmation +rememberMe=Remember me +authenticatorCode=One-time code +address=Address +street=Street +locality=City or Locality +region=State, Province, or Region +postal_code=Zip or Postal code +country=Country +emailVerified=Email verified +gssDelegationCredential=GSS Delegation Credential + +loginTotpStep1=Install FreeOTP or Google Authenticator on your mobile. Both applications are available in Google Play and Apple App Store. +loginTotpStep2=Open the application and scan the barcode or enter the key +loginTotpStep3=Enter the one-time code provided by the application and click Submit to finish the setup +loginTotpOneTime=One-time code + +oauthGrantRequest=Do you grant these access privileges? +inResource=in + +emailVerifyInstruction1=An email with instructions to verify your email address has been sent to you. +emailVerifyInstruction2=Haven''t received a verification code in your email? +emailVerifyInstruction3=to re-send the email. + +emailLinkIdpTitle=Link {0} +emailLinkIdp1=An email with instructions to link {0} account {1} with your {2} account has been sent to you. +emailLinkIdp2=Haven''t received a verification code in your email? +emailLinkIdp3=to re-send the email. +emailLinkIdp4=If you already verified the email in different browser +emailLinkIdp5=to continue. + +backToLogin=« Back to Login + +emailInstruction=Enter your username or email address and we will send you instructions on how to create a new password. + +copyCodeInstruction=Please copy this code and paste it into your application: + +pageExpiredTitle=Page has expired +pageExpiredMsg1=To restart the login process +pageExpiredMsg2=To continue the login process + +personalInfo=Personal Info: +role_admin=Admin +role_realm-admin=Realm Admin +role_create-realm=Create realm +role_create-client=Create client +role_view-realm=View realm +role_view-users=View users +role_view-applications=View applications +role_view-clients=View clients +role_view-events=View events +role_view-identity-providers=View identity providers +role_manage-realm=Manage realm +role_manage-users=Manage users +role_manage-applications=Manage applications +role_manage-identity-providers=Manage identity providers +role_manage-clients=Manage clients +role_manage-events=Manage events +role_view-profile=View profile +role_manage-account=Manage account +role_manage-account-links=Manage account links +role_read-token=Read token +role_offline-access=Offline access +client_account=Account +client_security-admin-console=Security Admin Console +client_admin-cli=Admin CLI +client_realm-management=Realm Management +client_broker=Broker + +invalidUserMessage=Invalid username or password. +invalidEmailMessage=Invalid email address. +accountDisabledMessage=Account is disabled, contact admin. +accountTemporarilyDisabledMessage=Account is temporarily disabled, contact admin or try again later. +expiredCodeMessage=Login timeout. Please login again. +expiredActionMessage=Action expired. Please continue with login now. +expiredActionTokenNoSessionMessage=Action expired. +expiredActionTokenSessionExistsMessage=Action expired. Please start again. + +missingFirstNameMessage=Please specify first name. +missingLastNameMessage=Please specify last name. +missingEmailMessage=Please specify email. +missingUsernameMessage=Please specify username. +missingPasswordMessage=Please specify password. +missingTotpMessage=Please specify authenticator code. +notMatchPasswordMessage=Passwords don''t match. + +invalidPasswordExistingMessage=Invalid existing password. +invalidPasswordConfirmMessage=Password confirmation doesn''t match. +invalidTotpMessage=Invalid authenticator code. + +usernameExistsMessage=Username already exists. +emailExistsMessage=Email already exists. + +federatedIdentityExistsMessage=User with {0} {1} already exists. Please login to account management to link the account. + +confirmLinkIdpTitle=Account already exists +federatedIdentityConfirmLinkMessage=User with {0} {1} already exists. How do you want to continue? +federatedIdentityConfirmReauthenticateMessage=Authenticate as {0} to link your account with {1} +confirmLinkIdpReviewProfile=Review profile +confirmLinkIdpContinue=Add to existing account + +configureTotpMessage=You need to set up Mobile Authenticator to activate your account. +updateProfileMessage=You need to update your user profile to activate your account. +updatePasswordMessage=You need to change your password to activate your account. +verifyEmailMessage=You need to verify your email address to activate your account. +linkIdpMessage=You need to verify your email address to link your account with {0}. + +emailSentMessage=You should receive an email shortly with further instructions. +emailSendErrorMessage=Failed to send email, please try again later. + +accountUpdatedMessage=Your account has been updated. +accountPasswordUpdatedMessage=Your password has been updated. + +noAccessMessage=No access + +invalidPasswordMinLengthMessage=Invalid password: minimum length {0}. +invalidPasswordMinDigitsMessage=Invalid password: must contain at least {0} numerical digits. +invalidPasswordMinLowerCaseCharsMessage=Invalid password: must contain at least {0} lower case characters. +invalidPasswordMinUpperCaseCharsMessage=Invalid password: must contain at least {0} upper case characters. +invalidPasswordMinSpecialCharsMessage=Invalid password: must contain at least {0} special characters. +invalidPasswordNotUsernameMessage=Invalid password: must not be equal to the username. +invalidPasswordRegexPatternMessage=Invalid password: fails to match regex pattern(s). +invalidPasswordHistoryMessage=Invalid password: must not be equal to any of last {0} passwords. +invalidPasswordGenericMessage=Invalid password: new password doesn''t match password policies. + +failedToProcessResponseMessage=Failed to process response +httpsRequiredMessage=HTTPS required +realmNotEnabledMessage=Realm not enabled +invalidRequestMessage=Invalid Request +failedLogout=Logout failed +unknownLoginRequesterMessage=Unknown login requester +loginRequesterNotEnabledMessage=Login requester not enabled +bearerOnlyMessage=Bearer-only applications are not allowed to initiate browser login +standardFlowDisabledMessage=Client is not allowed to initiate browser login with given response_type. Standard flow is disabled for the client. +implicitFlowDisabledMessage=Client is not allowed to initiate browser login with given response_type. Implicit flow is disabled for the client. +invalidRedirectUriMessage=Invalid redirect uri +unsupportedNameIdFormatMessage=Unsupported NameIDFormat +invalidRequesterMessage=Invalid requester +registrationNotAllowedMessage=Registration not allowed +resetCredentialNotAllowedMessage=Reset Credential not allowed + +permissionNotApprovedMessage=Permission not approved. +noRelayStateInResponseMessage=No relay state in response from identity provider. +insufficientPermissionMessage=Insufficient permissions to link identities. +couldNotProceedWithAuthenticationRequestMessage=Could not proceed with authentication request to identity provider. +couldNotObtainTokenMessage=Could not obtain token from identity provider. +unexpectedErrorRetrievingTokenMessage=Unexpected error when retrieving token from identity provider. +unexpectedErrorHandlingResponseMessage=Unexpected error when handling response from identity provider. +identityProviderAuthenticationFailedMessage=Authentication failed. Could not authenticate with identity provider. +identityProviderDifferentUserMessage=Authenticated as {0}, but expected to be authenticated as {1} +couldNotSendAuthenticationRequestMessage=Could not send authentication request to identity provider. +unexpectedErrorHandlingRequestMessage=Unexpected error when handling authentication request to identity provider. +invalidAccessCodeMessage=Invalid access code. +sessionNotActiveMessage=Session not active. +invalidCodeMessage=An error occurred, please login again through your application. +identityProviderUnexpectedErrorMessage=Unexpected error when authenticating with identity provider +identityProviderNotFoundMessage=Could not find an identity provider with the identifier. +identityProviderLinkSuccess=You successfully verified your email. Please go back to your original browser and continue there with the login. +staleCodeMessage=This page is no longer valid, please go back to your application and login again +realmSupportsNoCredentialsMessage=Realm does not support any credential type. +identityProviderNotUniqueMessage=Realm supports multiple identity providers. Could not determine which identity provider should be used to authenticate with. +emailVerifiedMessage=Your email address has been verified. +staleEmailVerificationLink=The link you clicked is a old stale link and is no longer valid. Maybe you have already verified your email? +identityProviderAlreadyLinkedMessage=Federated identity returned by {0} is already linked to another user. +confirmAccountLinking=Confirm linking the account {0} of identity provider {1} with your account. +confirmEmailAddressVerification=Confirm validity of e-mail address {0}. +confirmExecutionOfActions=Perform the following action(s) + +locale_ca=Catal\u00E0 +locale_de=Deutsch +locale_en=English +locale_es=Espa\u00F1ol +locale_fr=Fran\u00e7ais +locale_it=Italian +locale_ja=\u65E5\u672C\u8A9E +locale_nl=Nederlands +locale_no=Norsk +locale_pt_BR=Portugu\u00EAs (Brasil) +locale_pt-BR=Portugu\u00EAs (Brasil) +locale_ru=\u0420\u0443\u0441\u0441\u043A\u0438\u0439 +locale_lt=Lietuvi\u0173 +locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 +locale_sv=Svenska + +backToApplication=« Back to Application +missingParameterMessage=Missing parameters\: {0} +clientNotFoundMessage=Client not found. +clientDisabledMessage=Client disabled. +invalidParameterMessage=Invalid parameter\: {0} +alreadyLoggedIn=You are already logged in. +differentUserAuthenticated=You are already authenticated as different user ''{0}'' in this session. Please logout first. +brokerLinkingSessionExpired=Requested broker account linking, but current session is no longer valid. +proceedWithAction=» Click here to proceed + +requiredAction.CONFIGURE_TOTP=Configure OTP +requiredAction.terms_and_conditions=Terms and Conditions +requiredAction.UPDATE_PASSWORD=Update Password +requiredAction.UPDATE_PROFILE=Update Profile +requiredAction.VERIFY_EMAIL=Verify Email + +p3pPolicy=CP="This is not a P3P policy!" diff --git a/keycloak/scripts/ansible/artifacts/sunbird/resources/css/login.css b/keycloak/scripts/ansible/artifacts/sunbird/resources/css/login.css new file mode 100644 index 00000000..04e3f9b6 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/resources/css/login.css @@ -0,0 +1,141 @@ +body { + background-color: #FFFFFF; +} + +div#kc-content-wrapper { + text-align: center; +} + +div#kc-locale { + display: none; +} + +div#kc-header { + display: none; +} + +.page-login { + margin-top: 2em; +} + +.ui.form.pre-signin input { + border: 0!important; + border-bottom: 1px solid #979797!important; + border-radius: 0!important; + padding: 1em 0!important; +} + +.ui.form.pre-signin .field>label { + color: #979797 !important; + font-size: 1rem !important; + font-weight: bold !important; +} + +.forgot-passwordText { + height: 17px; + color: #007AFF; + font-size: 1.1em; + font-weight: 700; + line-height: 17px; + padding-top: 0.6em; +} + +@media screen and (max-width: 900px) and (min-width: 300px) { + + .forgot-passwordText { + height: 17px; + color: #007AFF; + font-size: 1em; + font-weight: 700; + line-height: 17px; + padding-top: 0em; + } +} + +.no-account-sign-up { + text-align: center; + padding: 2em 0em 0em 0em; + color: #007AFF; + font-size: 1.1em; + font-weight: 700; + line-height: 17px; +} + +@media screen and (max-width: 900px) and (min-width: 300px) { + .no-account-sign-up { + text-align: center; + padding: 2em 0em 0em 0em; + color: #007AFF; + font-size: 0.9em; + font-weight: 600; + line-height: 17px; + } + +} + +@media screen and (max-width: 900px) and (min-width: 300px) { + .signInLogo { + width:60% !important; + margin-bottom: 2em !important; + } +} + +.margin-top3em { + margin-top:3em !important; +} + +.margin-top2em { + margin-top:2em !important; +} + +.signin-contentPadding { + padding: 2em !important; + border: none !important; +} + +@media screen and (max-width: 900px) and (min-width: 300px) { + .signin-contentPadding { + padding: 1em !important; + } +} + +@media screen and (max-width: 900px) and (min-width: 300px) { + .ui.button.buttonResizeClass { + font-size: 0.9rem !important; + } +} + +@media screen and (max-width: 900px) and (min-width: 300px) { + .ui.form.pre-signin .field { + clear: both; + margin: 0 0 2em !important; + } + +} + +@media screen and (max-width: 900px) and (min-width: 300px) { + .signInButtonAlign{ + margin-bottom:2em !important; + } +} + +@media screen and (max-width: 900px) and (min-width: 300px) { + .signInGridAlign { + padding: 10px 0px 0px 0px !important; + } +} + +@media screen and (max-width: 900px) and (min-width: 300px) { + .page-login .ui.container { + margin-left: 0em!important; + margin-right: 0em!important; + } +} + +@media screen and (max-width: 900px) and (min-width: 300px) { + .signInGridAlign .ui.card { + border: none; + border-radius: 0rem !important; + box-shadow: unset !important; + } +} \ No newline at end of file diff --git a/keycloak/scripts/ansible/artifacts/sunbird/resources/css/semantic.min.css b/keycloak/scripts/ansible/artifacts/sunbird/resources/css/semantic.min.css new file mode 100644 index 00000000..8b2670a0 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/resources/css/semantic.min.css @@ -0,0 +1,364 @@ + /* + * # Semantic UI - 2.2.10 + * https://github.com/Semantic-Org/Semantic-UI + * http://www.semantic-ui.com/ + * + * Copyright 2014 Contributors + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +@import url(https://fonts.googleapis.com/css?family=Roboto:400,700,400italic,700italic&subset=latin);@import url(https://fonts.googleapis.com/css?family=Roboto);@import url(https://fonts.googleapis.com/css?family=Roboto:400,700);/*! + * # Semantic UI 2.2.10 - Reset + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */*,:after,:before{box-sizing:inherit}html{box-sizing:border-box}input[type=email],input[type=password],input[type=search],input[type=text]{-webkit-appearance:none;-moz-appearance:none}/*! normalize.css v3.0.1 | MIT License | git.io/normalize *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! + * # Semantic UI 2.2.10 - Site + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */body,html{height:100%}html{font-size:14px}body{margin:0;padding:0;overflow-x:hidden;min-width:320px;background:#f9f9f9;font-family:HelveticaNeueLTStd-Lt,Helvetica,Arial,sans-serif;font-size:13px;line-height:1.33;color:#212121;font-smoothing:antialiased}h1,h2,h3,h4,h5{font-family:HelveticaNeueLTStd-Lt,Helvetica,Arial,sans-serif;line-height:1.33em;margin:calc(2rem - .165em) 0 1rem;font-weight:400;padding:0}h1{min-height:1rem;font-size:2.25rem}h2{font-size:2rem}h3{font-size:1.75rem}h4{font-size:1.5rem}h5{font-size:1.25rem}h1:first-child,h2:first-child,h3:first-child,h4:first-child,h5:first-child{margin-top:0}h1:last-child,h2:last-child,h3:last-child,h4:last-child,h5:last-child{margin-bottom:0}p{margin:0 0 1.53em;line-height:1.7em}p:first-child{margin-top:0}p:last-child{margin-bottom:0}a{color:#009fda;text-decoration:none}a:hover{color:#00b2f3;text-decoration:none}::-webkit-selection{background-color:#009fda;color:#fff}::-moz-selection{background-color:#009fda;color:#fff}::selection{background-color:#009fda;color:#fff}input::-webkit-selection,textarea::-webkit-selection{background-color:rgba(100,100,100,.4);color:#212121}input::-moz-selection,textarea::-moz-selection{background-color:rgba(100,100,100,.4);color:#212121}input::selection,textarea::selection{background-color:rgba(100,100,100,.4);color:#212121}/*! + * # Semantic UI 2.2.10 - Button + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.button{cursor:pointer;display:inline-block;min-height:1em;outline:0;border:none;vertical-align:baseline;background:#e0e1e2 none;color:rgba(0,0,0,.6);font-family:HelveticaNeueLTStd-Lt,Helvetica,Arial,sans-serif;margin:0 .25em 0 0;padding:.78571429em 1.5em .78571429em;text-transform:none;text-shadow:none;font-weight:700;line-height:1em;font-style:normal;text-align:center;text-decoration:none;border-radius:.28571429rem;box-shadow:0 0 0 1px transparent inset,0 0 0 0 rgba(34,36,38,.15) inset;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:opacity .1s ease,background-color .1s ease,color .1s ease,box-shadow .1s ease,background .1s ease;transition:opacity .1s ease,background-color .1s ease,color .1s ease,box-shadow .1s ease,background .1s ease;will-change:'';-webkit-tap-highlight-color:transparent}.ui.button:hover{background-color:#cacbcd;background-image:none;box-shadow:0 0 0 1px transparent inset,0 0 0 0 rgba(34,36,38,.15) inset;color:rgba(0,0,0,.8)}.ui.button:hover .icon{opacity:.85}.ui.button:focus{background-color:#cacbcd;color:rgba(0,0,0,.8);background-image:''!important;box-shadow:''!important}.ui.button:focus .icon{opacity:.85}.ui.active.button:active,.ui.button:active{background-color:#babbbc;background-image:'';color:rgba(0,0,0,.9);box-shadow:0 0 0 1px transparent inset,none}.ui.active.button{background-color:#c0c1c2;background-image:none;box-shadow:0 0 0 1px transparent inset;color:rgba(0,0,0,.95)}.ui.active.button:hover{background-color:#c0c1c2;background-image:none;color:rgba(0,0,0,.95)}.ui.active.button:active{background-color:#c0c1c2;background-image:none}.ui.loading.loading.loading.loading.loading.loading.button{position:relative;cursor:default;text-shadow:none!important;color:transparent!important;opacity:1;pointer-events:auto;-webkit-transition:all 0s linear,opacity .1s ease;transition:all 0s linear,opacity .1s ease}.ui.loading.button:before{position:absolute;content:'';top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;border-radius:500rem;border:.2em solid rgba(0,0,0,.15)}.ui.loading.button:after{position:absolute;content:'';top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;-webkit-animation:button-spin .6s linear;animation:button-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border-color:#fff transparent transparent;border-style:solid;border-width:.2em;box-shadow:0 0 0 1px transparent}.ui.labeled.icon.loading.button .icon{background-color:transparent;box-shadow:none}@-webkit-keyframes button-spin{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes button-spin{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.ui.basic.loading.button:not(.inverted):before{border-color:rgba(0,0,0,.1)}.ui.basic.loading.button:not(.inverted):after{border-top-color:#767676}.ui.button:disabled,.ui.buttons .disabled.button,.ui.disabled.active.button,.ui.disabled.button,.ui.disabled.button:hover{cursor:default;opacity:.45!important;background-image:none!important;box-shadow:none!important;pointer-events:none!important}.ui.basic.buttons .ui.disabled.button{border-color:rgba(34,36,38,.5)}.ui.animated.button{position:relative;overflow:hidden;padding-right:0!important;vertical-align:middle;z-index:1}.ui.animated.button .content{will-change:transform,opacity}.ui.animated.button .visible.content{position:relative;margin-right:1.5em}.ui.animated.button .hidden.content{position:absolute;width:100%}.ui.animated.button .hidden.content,.ui.animated.button .visible.content{-webkit-transition:right .3s ease 0s;transition:right .3s ease 0s}.ui.animated.button .visible.content{left:auto;right:0}.ui.animated.button .hidden.content{top:50%;left:auto;right:-100%;margin-top:-.5em}.ui.animated.button:focus .visible.content,.ui.animated.button:hover .visible.content{left:auto;right:200%}.ui.animated.button:focus .hidden.content,.ui.animated.button:hover .hidden.content{left:auto;right:0}.ui.vertical.animated.button .hidden.content,.ui.vertical.animated.button .visible.content{-webkit-transition:top .3s ease,-webkit-transform .3s ease;transition:top .3s ease,transform .3s ease}.ui.vertical.animated.button .visible.content{-webkit-transform:translateY(0);transform:translateY(0);right:auto}.ui.vertical.animated.button .hidden.content{top:-50%;left:0;right:auto}.ui.vertical.animated.button:focus .visible.content,.ui.vertical.animated.button:hover .visible.content{-webkit-transform:translateY(200%);transform:translateY(200%);right:auto}.ui.vertical.animated.button:focus .hidden.content,.ui.vertical.animated.button:hover .hidden.content{top:50%;right:auto}.ui.fade.animated.button .hidden.content,.ui.fade.animated.button .visible.content{-webkit-transition:opacity .3s ease,-webkit-transform .3s ease;transition:opacity .3s ease,transform .3s ease}.ui.fade.animated.button .visible.content{left:auto;right:auto;opacity:1;-webkit-transform:scale(1);transform:scale(1)}.ui.fade.animated.button .hidden.content{opacity:0;left:0;right:auto;-webkit-transform:scale(1.5);transform:scale(1.5)}.ui.fade.animated.button:focus .visible.content,.ui.fade.animated.button:hover .visible.content{left:auto;right:auto;opacity:0;-webkit-transform:scale(.75);transform:scale(.75)}.ui.fade.animated.button:focus .hidden.content,.ui.fade.animated.button:hover .hidden.content{left:0;right:auto;opacity:1;-webkit-transform:scale(1);transform:scale(1)}.ui.inverted.button{box-shadow:0 0 0 2px #fff inset!important;background:transparent none;color:#fff;text-shadow:none!important}.ui.inverted.buttons .button{margin:0 0 0 -2px}.ui.inverted.buttons .button:first-child{margin-left:0}.ui.inverted.vertical.buttons .button{margin:0 0 -2px 0}.ui.inverted.vertical.buttons .button:first-child{margin-top:0}.ui.inverted.button:hover{background:#fff;box-shadow:0 0 0 2px #fff inset!important;color:rgba(0,0,0,.8)}.ui.inverted.button.active,.ui.inverted.button:focus{background:#fff;box-shadow:0 0 0 2px #fff inset!important;color:rgba(0,0,0,.8)}.ui.inverted.button.active:focus{background:#dcddde;box-shadow:0 0 0 2px #dcddde inset!important;color:rgba(0,0,0,.8)}.ui.labeled.button:not(.icon){display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;background:0 0!important;padding:0!important;border:none!important;box-shadow:none!important}.ui.labeled.button>.button{margin:0}.ui.labeled.button>.label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin:0 0 0 -1px!important;padding:'';font-size:1em;border-color:rgba(34,36,38,.15)}.ui.labeled.button>.tag.label:before{width:1.85em;height:1.85em}.ui.labeled.button:not([class*="left labeled"])>.button{border-top-right-radius:0;border-bottom-right-radius:0}.ui.labeled.button:not([class*="left labeled"])>.label{border-top-left-radius:0;border-bottom-left-radius:0}.ui[class*="left labeled"].button>.button{border-top-left-radius:0;border-bottom-left-radius:0}.ui[class*="left labeled"].button>.label{border-top-right-radius:0;border-bottom-right-radius:0}.ui.facebook.button{background-color:#3b5998;color:#fff;text-shadow:none;background-image:none;box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.facebook.button:hover{background-color:#304d8a;color:#fff;text-shadow:none}.ui.facebook.button:active{background-color:#2d4373;color:#fff;text-shadow:none}.ui.twitter.button{background-color:#55acee;color:#fff;text-shadow:none;background-image:none;box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.twitter.button:hover{background-color:#35a2f4;color:#fff;text-shadow:none}.ui.twitter.button:active{background-color:#2795e9;color:#fff;text-shadow:none}.ui.google.plus.button{background-color:#dd4b39;color:#fff;text-shadow:none;background-image:none;box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.google.plus.button:hover{background-color:#e0321c;color:#fff;text-shadow:none}.ui.google.plus.button:active{background-color:#c23321;color:#fff;text-shadow:none}.ui.linkedin.button{background-color:#1f88be;color:#fff;text-shadow:none}.ui.linkedin.button:hover{background-color:#147baf;color:#fff;text-shadow:none}.ui.linkedin.button:active{background-color:#186992;color:#fff;text-shadow:none}.ui.youtube.button{background-color:#cc181e;color:#fff;text-shadow:none;background-image:none;box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.youtube.button:hover{background-color:#bd0d13;color:#fff;text-shadow:none}.ui.youtube.button:active{background-color:#9e1317;color:#fff;text-shadow:none}.ui.instagram.button{background-color:#49769c;color:#fff;text-shadow:none;background-image:none;box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.instagram.button:hover{background-color:#3d698e;color:#fff;text-shadow:none}.ui.instagram.button:active{background-color:#395c79;color:#fff;text-shadow:none}.ui.pinterest.button{background-color:#bd081c;color:#fff;text-shadow:none;background-image:none;box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.pinterest.button:hover{background-color:#ac0013;color:#fff;text-shadow:none}.ui.pinterest.button:active{background-color:#8c0615;color:#fff;text-shadow:none}.ui.vk.button{background-color:#4d7198;color:#fff;background-image:none;box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.vk.button:hover{background-color:#41648a;color:#fff}.ui.vk.button:active{background-color:#3c5876;color:#fff}.ui.button>.icon:not(.button){height:.85714286em;opacity:.8;margin:0 .42857143em 0 -.21428571em;-webkit-transition:opacity .1s ease;transition:opacity .1s ease;vertical-align:'';color:''}.ui.button:not(.icon)>.icon:not(.button):not(.dropdown){margin:0 .42857143em 0 -.21428571em}.ui.button:not(.icon)>.right.icon:not(.button):not(.dropdown){margin:0 -.21428571em 0 .42857143em}.ui[class*="left floated"].button,.ui[class*="left floated"].buttons{float:left;margin-left:0;margin-right:.25em}.ui[class*="right floated"].button,.ui[class*="right floated"].buttons{float:right;margin-right:0;margin-left:.25em}.ui.compact.button,.ui.compact.buttons .button{padding:.58928571em 1.125em .58928571em}.ui.compact.icon.button,.ui.compact.icon.buttons .button{padding:.58928571em .58928571em .58928571em}.ui.compact.labeled.icon.button,.ui.compact.labeled.icon.buttons .button{padding:.58928571em 3.69642857em .58928571em}.ui.mini.button,.ui.mini.buttons .button,.ui.mini.buttons .or{font-size:.78571429rem}.ui.tiny.button,.ui.tiny.buttons .button,.ui.tiny.buttons .or{font-size:.85714286rem}.ui.small.button,.ui.small.buttons .button,.ui.small.buttons .or{font-size:.92857143rem}.ui.button,.ui.buttons .button,.ui.buttons .or{font-size:1rem}.ui.large.button,.ui.large.buttons .button,.ui.large.buttons .or{font-size:1.14285714rem}.ui.big.button,.ui.big.buttons .button,.ui.big.buttons .or{font-size:1.28571429rem}.ui.huge.button,.ui.huge.buttons .button,.ui.huge.buttons .or{font-size:1.42857143rem}.ui.massive.button,.ui.massive.buttons .button,.ui.massive.buttons .or{font-size:1.71428571rem}.ui.icon.button,.ui.icon.buttons .button{padding:.78571429em .78571429em .78571429em}.ui.icon.button>.icon,.ui.icon.buttons .button>.icon{opacity:.9;margin:0!important;vertical-align:top}.ui.basic.button,.ui.basic.buttons .button{background:transparent none!important;color:rgba(0,0,0,.6)!important;font-weight:400;border-radius:.28571429rem;text-transform:none;text-shadow:none!important;box-shadow:0 0 0 1px rgba(34,36,38,.15) inset}.ui.basic.buttons{box-shadow:none;border:1px solid rgba(34,36,38,.15);border-radius:.28571429rem}.ui.basic.buttons .button{border-radius:0}.ui.basic.button:hover,.ui.basic.buttons .button:hover{background:#fff!important;color:rgba(0,0,0,.8)!important;box-shadow:0 0 0 1px rgba(34,36,38,.35) inset,0 0 0 0 rgba(34,36,38,.15) inset}.ui.basic.button:focus,.ui.basic.buttons .button:focus{background:#fff!important;color:rgba(0,0,0,.8)!important;box-shadow:0 0 0 1px rgba(34,36,38,.35) inset,0 0 0 0 rgba(34,36,38,.15) inset}.ui.basic.button:active,.ui.basic.buttons .button:active{background:#f8f8f8!important;color:rgba(0,0,0,.9)!important;box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 1px 4px 0 rgba(34,36,38,.15) inset}.ui.basic.active.button,.ui.basic.buttons .active.button{background:rgba(0,0,0,.05)!important;box-shadow:''!important;color:rgba(0,0,0,.95)}.ui.basic.active.button:hover,.ui.basic.buttons .active.button:hover{background-color:rgba(0,0,0,.05)}.ui.basic.buttons .button:hover{box-shadow:0 0 0 1px rgba(34,36,38,.35) inset,0 0 0 0 rgba(34,36,38,.15) inset inset}.ui.basic.buttons .button:active{box-shadow:0 0 0 1px rgba(0,0,0,.15) inset,0 1px 4px 0 rgba(34,36,38,.15) inset inset}.ui.basic.buttons .active.button{box-shadow:''!important}.ui.basic.inverted.button,.ui.basic.inverted.buttons .button{background-color:transparent!important;color:#f9fafb!important;box-shadow:0 0 0 2px rgba(255,255,255,.5) inset!important}.ui.basic.inverted.button:hover,.ui.basic.inverted.buttons .button:hover{color:#fff!important;box-shadow:0 0 0 2px #fff inset!important}.ui.basic.inverted.button:focus,.ui.basic.inverted.buttons .button:focus{color:#fff!important;box-shadow:0 0 0 2px #fff inset!important}.ui.basic.inverted.button:active,.ui.basic.inverted.buttons .button:active{background-color:rgba(255,255,255,.08)!important;color:#fff!important;box-shadow:0 0 0 2px rgba(255,255,255,.9) inset!important}.ui.basic.inverted.active.button,.ui.basic.inverted.buttons .active.button{background-color:rgba(255,255,255,.08);color:#fff;text-shadow:none;box-shadow:0 0 0 2px rgba(255,255,255,.7) inset}.ui.basic.inverted.active.button:hover,.ui.basic.inverted.buttons .active.button:hover{background-color:rgba(255,255,255,.15);box-shadow:0 0 0 2px #fff inset!important}.ui.basic.buttons .button{border-left:1px solid rgba(34,36,38,.15);box-shadow:none}.ui.basic.vertical.buttons .button{border-left:none}.ui.basic.vertical.buttons .button{border-left-width:0;border-top:1px solid rgba(34,36,38,.15)}.ui.basic.vertical.buttons .button:first-child{border-top-width:0}.ui.labeled.icon.button,.ui.labeled.icon.buttons .button{position:relative;padding-left:4.07142857em!important;padding-right:1.5em!important}.ui.labeled.icon.button>.icon,.ui.labeled.icon.buttons>.button>.icon{position:absolute;height:100%;line-height:1;border-radius:0;border-top-left-radius:inherit;border-bottom-left-radius:inherit;text-align:center;margin:0;width:2.57142857em;background-color:rgba(0,0,0,.05);color:'';box-shadow:-1px 0 0 0 transparent inset}.ui.labeled.icon.button>.icon,.ui.labeled.icon.buttons>.button>.icon{top:0;left:0}.ui[class*="right labeled"].icon.button{padding-right:4.07142857em!important;padding-left:1.5em!important}.ui[class*="right labeled"].icon.button>.icon{left:auto;right:0;border-radius:0;border-top-right-radius:inherit;border-bottom-right-radius:inherit;box-shadow:1px 0 0 0 transparent inset}.ui.labeled.icon.button>.icon:after,.ui.labeled.icon.button>.icon:before,.ui.labeled.icon.buttons>.button>.icon:after,.ui.labeled.icon.buttons>.button>.icon:before{display:block;position:absolute;width:100%;top:50%;text-align:center;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.ui.labeled.icon.buttons .button>.icon{border-radius:0}.ui.labeled.icon.buttons .button:first-child>.icon{border-top-left-radius:.28571429rem;border-bottom-left-radius:.28571429rem}.ui.labeled.icon.buttons .button:last-child>.icon{border-top-right-radius:.28571429rem;border-bottom-right-radius:.28571429rem}.ui.vertical.labeled.icon.buttons .button:first-child>.icon{border-radius:0;border-top-left-radius:.28571429rem}.ui.vertical.labeled.icon.buttons .button:last-child>.icon{border-radius:0;border-bottom-left-radius:.28571429rem}.ui.fluid[class*="left labeled"].icon.button,.ui.fluid[class*="right labeled"].icon.button{padding-left:1.5em!important;padding-right:1.5em!important}.ui.button.toggle.active,.ui.buttons .button.toggle.active,.ui.toggle.buttons .active.button{background-color:#21ba45!important;box-shadow:none!important;text-shadow:none;color:#fff!important}.ui.button.toggle.active:hover{background-color:#16ab39!important;text-shadow:none;color:#fff!important}.ui.circular.button{border-radius:10em}.ui.circular.button>.icon{width:1em;vertical-align:baseline}.ui.buttons .or{position:relative;width:.3em;height:2.57142857em;z-index:3}.ui.buttons .or:before{position:absolute;text-align:center;border-radius:500rem;content:'or';top:50%;left:50%;background-color:#fff;text-shadow:none;margin-top:-.89285714em;margin-left:-.89285714em;width:1.78571429em;height:1.78571429em;line-height:1.78571429em;color:rgba(0,0,0,.4);font-style:normal;font-weight:700;box-shadow:0 0 0 1px transparent inset}.ui.buttons .or[data-text]:before{content:attr(data-text)}.ui.fluid.buttons .or{width:0!important}.ui.fluid.buttons .or:after{display:none}.ui.attached.button{position:relative;display:block;margin:0;border-radius:0;box-shadow:0 0 0 1px rgba(34,36,38,.15)!important}.ui.attached.top.button{border-radius:.28571429rem .28571429rem 0 0}.ui.attached.bottom.button{border-radius:0 0 .28571429rem .28571429rem}.ui.left.attached.button{display:inline-block;border-left:none;text-align:right;padding-right:.75em;border-radius:.28571429rem 0 0 .28571429rem}.ui.right.attached.button{display:inline-block;text-align:left;padding-left:.75em;border-radius:0 .28571429rem .28571429rem 0}.ui.attached.buttons{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:0;width:auto!important;z-index:2;margin-left:-1px;margin-right:-1px}.ui.attached.buttons .button{margin:0}.ui.attached.buttons .button:first-child{border-radius:0}.ui.attached.buttons .button:last-child{border-radius:0}.ui[class*="top attached"].buttons{margin-bottom:-1px;border-radius:.28571429rem .28571429rem 0 0}.ui[class*="top attached"].buttons .button:first-child{border-radius:.28571429rem 0 0 0}.ui[class*="top attached"].buttons .button:last-child{border-radius:0 .28571429rem 0 0}.ui[class*="bottom attached"].buttons{margin-top:-1px;border-radius:0 0 .28571429rem .28571429rem}.ui[class*="bottom attached"].buttons .button:first-child{border-radius:0 0 0 .28571429rem}.ui[class*="bottom attached"].buttons .button:last-child{border-radius:0 0 .28571429rem 0}.ui[class*="left attached"].buttons{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-right:0;margin-left:-1px;border-radius:0 .28571429rem .28571429rem 0}.ui[class*="left attached"].buttons .button:first-child{margin-left:-1px;border-radius:0 .28571429rem 0 0}.ui[class*="left attached"].buttons .button:last-child{margin-left:-1px;border-radius:0 0 .28571429rem 0}.ui[class*="right attached"].buttons{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin-left:0;margin-right:-1px;border-radius:.28571429rem 0 0 .28571429rem}.ui[class*="right attached"].buttons .button:first-child{margin-left:-1px;border-radius:.28571429rem 0 0 0}.ui[class*="right attached"].buttons .button:last-child{margin-left:-1px;border-radius:0 0 0 .28571429rem}.ui.fluid.button,.ui.fluid.buttons{width:100%}.ui.fluid.button{display:block}.ui.two.buttons{width:100%}.ui.two.buttons>.button{width:50%}.ui.three.buttons{width:100%}.ui.three.buttons>.button{width:33.333%}.ui.four.buttons{width:100%}.ui.four.buttons>.button{width:25%}.ui.five.buttons{width:100%}.ui.five.buttons>.button{width:20%}.ui.six.buttons{width:100%}.ui.six.buttons>.button{width:16.666%}.ui.seven.buttons{width:100%}.ui.seven.buttons>.button{width:14.285%}.ui.eight.buttons{width:100%}.ui.eight.buttons>.button{width:12.5%}.ui.nine.buttons{width:100%}.ui.nine.buttons>.button{width:11.11%}.ui.ten.buttons{width:100%}.ui.ten.buttons>.button{width:10%}.ui.eleven.buttons{width:100%}.ui.eleven.buttons>.button{width:9.09%}.ui.twelve.buttons{width:100%}.ui.twelve.buttons>.button{width:8.3333%}.ui.fluid.vertical.buttons,.ui.fluid.vertical.buttons>.button{display:-webkit-box;display:-ms-flexbox;display:flex;width:auto}.ui.two.vertical.buttons>.button{height:50%}.ui.three.vertical.buttons>.button{height:33.333%}.ui.four.vertical.buttons>.button{height:25%}.ui.five.vertical.buttons>.button{height:20%}.ui.six.vertical.buttons>.button{height:16.666%}.ui.seven.vertical.buttons>.button{height:14.285%}.ui.eight.vertical.buttons>.button{height:12.5%}.ui.nine.vertical.buttons>.button{height:11.11%}.ui.ten.vertical.buttons>.button{height:10%}.ui.eleven.vertical.buttons>.button{height:9.09%}.ui.twelve.vertical.buttons>.button{height:8.3333%}.ui.black.button,.ui.black.buttons .button{background-color:#1b1c1d;color:#fff;text-shadow:none;background-image:none}.ui.black.button{box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.black.button:hover,.ui.black.buttons .button:hover{background-color:#27292a;color:#fff;text-shadow:none}.ui.black.button:focus,.ui.black.buttons .button:focus{background-color:#2f3032;color:#fff;text-shadow:none}.ui.black.button:active,.ui.black.buttons .button:active{background-color:#343637;color:#fff;text-shadow:none}.ui.black.active.button,.ui.black.button .active.button:active,.ui.black.buttons .active.button,.ui.black.buttons .active.button:active{background-color:#0f0f10;color:#fff;text-shadow:none}.ui.basic.black.button,.ui.basic.black.buttons .button{box-shadow:0 0 0 1px #1b1c1d inset!important;color:#1b1c1d!important}.ui.basic.black.button:hover,.ui.basic.black.buttons .button:hover{background:0 0!important;box-shadow:0 0 0 1px #27292a inset!important;color:#27292a!important}.ui.basic.black.button:focus,.ui.basic.black.buttons .button:focus{background:0 0!important;box-shadow:0 0 0 1px #2f3032 inset!important;color:#27292a!important}.ui.basic.black.active.button,.ui.basic.black.buttons .active.button{background:0 0!important;box-shadow:0 0 0 1px #0f0f10 inset!important;color:#343637!important}.ui.basic.black.button:active,.ui.basic.black.buttons .button:active{box-shadow:0 0 0 1px #343637 inset!important;color:#343637!important}.ui.buttons:not(.vertical)>.basic.black.button:not(:first-child){margin-left:-1px}.ui.inverted.black.button,.ui.inverted.black.buttons .button{background-color:transparent;box-shadow:0 0 0 2px #d4d4d5 inset!important;color:#fff}.ui.inverted.black.button.active,.ui.inverted.black.button:active,.ui.inverted.black.button:focus,.ui.inverted.black.button:hover,.ui.inverted.black.buttons .button.active,.ui.inverted.black.buttons .button:active,.ui.inverted.black.buttons .button:focus,.ui.inverted.black.buttons .button:hover{box-shadow:none!important;color:#fff}.ui.inverted.black.button:hover,.ui.inverted.black.buttons .button:hover{background-color:#000}.ui.inverted.black.button:focus,.ui.inverted.black.buttons .button:focus{background-color:#000}.ui.inverted.black.active.button,.ui.inverted.black.buttons .active.button{background-color:#000}.ui.inverted.black.button:active,.ui.inverted.black.buttons .button:active{background-color:#000}.ui.inverted.black.basic.button,.ui.inverted.black.basic.buttons .button,.ui.inverted.black.buttons .basic.button{background-color:transparent;box-shadow:0 0 0 2px rgba(255,255,255,.5) inset!important;color:#fff!important}.ui.inverted.black.basic.button:hover,.ui.inverted.black.basic.buttons .button:hover,.ui.inverted.black.buttons .basic.button:hover{box-shadow:0 0 0 2px #000 inset!important;color:#fff!important}.ui.inverted.black.basic.button:focus,.ui.inverted.black.basic.buttons .button:focus{box-shadow:0 0 0 2px #000 inset!important;color:#545454!important}.ui.inverted.black.basic.active.button,.ui.inverted.black.basic.buttons .active.button,.ui.inverted.black.buttons .basic.active.button{box-shadow:0 0 0 2px #000 inset!important;color:#fff!important}.ui.inverted.black.basic.button:active,.ui.inverted.black.basic.buttons .button:active,.ui.inverted.black.buttons .basic.button:active{box-shadow:0 0 0 2px #000 inset!important;color:#fff!important}.ui.grey.button,.ui.grey.buttons .button{background-color:#767676;color:#fff;text-shadow:none;background-image:none}.ui.grey.button{box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.grey.button:hover,.ui.grey.buttons .button:hover{background-color:#838383;color:#fff;text-shadow:none}.ui.grey.button:focus,.ui.grey.buttons .button:focus{background-color:#8a8a8a;color:#fff;text-shadow:none}.ui.grey.button:active,.ui.grey.buttons .button:active{background-color:#909090;color:#fff;text-shadow:none}.ui.grey.active.button,.ui.grey.button .active.button:active,.ui.grey.buttons .active.button,.ui.grey.buttons .active.button:active{background-color:#696969;color:#fff;text-shadow:none}.ui.basic.grey.button,.ui.basic.grey.buttons .button{box-shadow:0 0 0 1px #767676 inset!important;color:#767676!important}.ui.basic.grey.button:hover,.ui.basic.grey.buttons .button:hover{background:0 0!important;box-shadow:0 0 0 1px #838383 inset!important;color:#838383!important}.ui.basic.grey.button:focus,.ui.basic.grey.buttons .button:focus{background:0 0!important;box-shadow:0 0 0 1px #8a8a8a inset!important;color:#838383!important}.ui.basic.grey.active.button,.ui.basic.grey.buttons .active.button{background:0 0!important;box-shadow:0 0 0 1px #696969 inset!important;color:#909090!important}.ui.basic.grey.button:active,.ui.basic.grey.buttons .button:active{box-shadow:0 0 0 1px #909090 inset!important;color:#909090!important}.ui.buttons:not(.vertical)>.basic.grey.button:not(:first-child){margin-left:-1px}.ui.inverted.grey.button,.ui.inverted.grey.buttons .button{background-color:transparent;box-shadow:0 0 0 2px #d4d4d5 inset!important;color:#fff}.ui.inverted.grey.button.active,.ui.inverted.grey.button:active,.ui.inverted.grey.button:focus,.ui.inverted.grey.button:hover,.ui.inverted.grey.buttons .button.active,.ui.inverted.grey.buttons .button:active,.ui.inverted.grey.buttons .button:focus,.ui.inverted.grey.buttons .button:hover{box-shadow:none!important;color:rgba(0,0,0,.6)}.ui.inverted.grey.button:hover,.ui.inverted.grey.buttons .button:hover{background-color:#cfd0d2}.ui.inverted.grey.button:focus,.ui.inverted.grey.buttons .button:focus{background-color:#c7c9cb}.ui.inverted.grey.active.button,.ui.inverted.grey.buttons .active.button{background-color:#cfd0d2}.ui.inverted.grey.button:active,.ui.inverted.grey.buttons .button:active{background-color:#c2c4c5}.ui.inverted.grey.basic.button,.ui.inverted.grey.basic.buttons .button,.ui.inverted.grey.buttons .basic.button{background-color:transparent;box-shadow:0 0 0 2px rgba(255,255,255,.5) inset!important;color:#fff!important}.ui.inverted.grey.basic.button:hover,.ui.inverted.grey.basic.buttons .button:hover,.ui.inverted.grey.buttons .basic.button:hover{box-shadow:0 0 0 2px #cfd0d2 inset!important;color:#fff!important}.ui.inverted.grey.basic.button:focus,.ui.inverted.grey.basic.buttons .button:focus{box-shadow:0 0 0 2px #c7c9cb inset!important;color:#dcddde!important}.ui.inverted.grey.basic.active.button,.ui.inverted.grey.basic.buttons .active.button,.ui.inverted.grey.buttons .basic.active.button{box-shadow:0 0 0 2px #cfd0d2 inset!important;color:#fff!important}.ui.inverted.grey.basic.button:active,.ui.inverted.grey.basic.buttons .button:active,.ui.inverted.grey.buttons .basic.button:active{box-shadow:0 0 0 2px #c2c4c5 inset!important;color:#fff!important}.ui.brown.button,.ui.brown.buttons .button{background-color:#a5673f;color:#fff;text-shadow:none;background-image:none}.ui.brown.button{box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.brown.button:hover,.ui.brown.buttons .button:hover{background-color:#975b33;color:#fff;text-shadow:none}.ui.brown.button:focus,.ui.brown.buttons .button:focus{background-color:#90532b;color:#fff;text-shadow:none}.ui.brown.button:active,.ui.brown.buttons .button:active{background-color:#805031;color:#fff;text-shadow:none}.ui.brown.active.button,.ui.brown.button .active.button:active,.ui.brown.buttons .active.button,.ui.brown.buttons .active.button:active{background-color:#995a31;color:#fff;text-shadow:none}.ui.basic.brown.button,.ui.basic.brown.buttons .button{box-shadow:0 0 0 1px #a5673f inset!important;color:#a5673f!important}.ui.basic.brown.button:hover,.ui.basic.brown.buttons .button:hover{background:0 0!important;box-shadow:0 0 0 1px #975b33 inset!important;color:#975b33!important}.ui.basic.brown.button:focus,.ui.basic.brown.buttons .button:focus{background:0 0!important;box-shadow:0 0 0 1px #90532b inset!important;color:#975b33!important}.ui.basic.brown.active.button,.ui.basic.brown.buttons .active.button{background:0 0!important;box-shadow:0 0 0 1px #995a31 inset!important;color:#805031!important}.ui.basic.brown.button:active,.ui.basic.brown.buttons .button:active{box-shadow:0 0 0 1px #805031 inset!important;color:#805031!important}.ui.buttons:not(.vertical)>.basic.brown.button:not(:first-child){margin-left:-1px}.ui.inverted.brown.button,.ui.inverted.brown.buttons .button{background-color:transparent;box-shadow:0 0 0 2px #d67c1c inset!important;color:#d67c1c}.ui.inverted.brown.button.active,.ui.inverted.brown.button:active,.ui.inverted.brown.button:focus,.ui.inverted.brown.button:hover,.ui.inverted.brown.buttons .button.active,.ui.inverted.brown.buttons .button:active,.ui.inverted.brown.buttons .button:focus,.ui.inverted.brown.buttons .button:hover{box-shadow:none!important;color:#fff}.ui.inverted.brown.button:hover,.ui.inverted.brown.buttons .button:hover{background-color:#c86f11}.ui.inverted.brown.button:focus,.ui.inverted.brown.buttons .button:focus{background-color:#c16808}.ui.inverted.brown.active.button,.ui.inverted.brown.buttons .active.button{background-color:#cc6f0d}.ui.inverted.brown.button:active,.ui.inverted.brown.buttons .button:active{background-color:#a96216}.ui.inverted.brown.basic.button,.ui.inverted.brown.basic.buttons .button,.ui.inverted.brown.buttons .basic.button{background-color:transparent;box-shadow:0 0 0 2px rgba(255,255,255,.5) inset!important;color:#fff!important}.ui.inverted.brown.basic.button:hover,.ui.inverted.brown.basic.buttons .button:hover,.ui.inverted.brown.buttons .basic.button:hover{box-shadow:0 0 0 2px #c86f11 inset!important;color:#d67c1c!important}.ui.inverted.brown.basic.button:focus,.ui.inverted.brown.basic.buttons .button:focus{box-shadow:0 0 0 2px #c16808 inset!important;color:#d67c1c!important}.ui.inverted.brown.basic.active.button,.ui.inverted.brown.basic.buttons .active.button,.ui.inverted.brown.buttons .basic.active.button{box-shadow:0 0 0 2px #cc6f0d inset!important;color:#d67c1c!important}.ui.inverted.brown.basic.button:active,.ui.inverted.brown.basic.buttons .button:active,.ui.inverted.brown.buttons .basic.button:active{box-shadow:0 0 0 2px #a96216 inset!important;color:#d67c1c!important}.ui.blue.button,.ui.blue.buttons .button{background-color:#2185d0;color:#fff;text-shadow:none;background-image:none}.ui.blue.button{box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.blue.button:hover,.ui.blue.buttons .button:hover{background-color:#1678c2;color:#fff;text-shadow:none}.ui.blue.button:focus,.ui.blue.buttons .button:focus{background-color:#0d71bb;color:#fff;text-shadow:none}.ui.blue.button:active,.ui.blue.buttons .button:active{background-color:#1a69a4;color:#fff;text-shadow:none}.ui.blue.active.button,.ui.blue.button .active.button:active,.ui.blue.buttons .active.button,.ui.blue.buttons .active.button:active{background-color:#1279c6;color:#fff;text-shadow:none}.ui.basic.blue.button,.ui.basic.blue.buttons .button{box-shadow:0 0 0 1px #2185d0 inset!important;color:#2185d0!important}.ui.basic.blue.button:hover,.ui.basic.blue.buttons .button:hover{background:0 0!important;box-shadow:0 0 0 1px #1678c2 inset!important;color:#1678c2!important}.ui.basic.blue.button:focus,.ui.basic.blue.buttons .button:focus{background:0 0!important;box-shadow:0 0 0 1px #0d71bb inset!important;color:#1678c2!important}.ui.basic.blue.active.button,.ui.basic.blue.buttons .active.button{background:0 0!important;box-shadow:0 0 0 1px #1279c6 inset!important;color:#1a69a4!important}.ui.basic.blue.button:active,.ui.basic.blue.buttons .button:active{box-shadow:0 0 0 1px #1a69a4 inset!important;color:#1a69a4!important}.ui.buttons:not(.vertical)>.basic.blue.button:not(:first-child){margin-left:-1px}.ui.inverted.blue.button,.ui.inverted.blue.buttons .button{background-color:transparent;box-shadow:0 0 0 2px #54c8ff inset!important;color:#54c8ff}.ui.inverted.blue.button.active,.ui.inverted.blue.button:active,.ui.inverted.blue.button:focus,.ui.inverted.blue.button:hover,.ui.inverted.blue.buttons .button.active,.ui.inverted.blue.buttons .button:active,.ui.inverted.blue.buttons .button:focus,.ui.inverted.blue.buttons .button:hover{box-shadow:none!important;color:#fff}.ui.inverted.blue.button:hover,.ui.inverted.blue.buttons .button:hover{background-color:#3ac0ff}.ui.inverted.blue.button:focus,.ui.inverted.blue.buttons .button:focus{background-color:#2bbbff}.ui.inverted.blue.active.button,.ui.inverted.blue.buttons .active.button{background-color:#3ac0ff}.ui.inverted.blue.button:active,.ui.inverted.blue.buttons .button:active{background-color:#21b8ff}.ui.inverted.blue.basic.button,.ui.inverted.blue.basic.buttons .button,.ui.inverted.blue.buttons .basic.button{background-color:transparent;box-shadow:0 0 0 2px rgba(255,255,255,.5) inset!important;color:#fff!important}.ui.inverted.blue.basic.button:hover,.ui.inverted.blue.basic.buttons .button:hover,.ui.inverted.blue.buttons .basic.button:hover{box-shadow:0 0 0 2px #3ac0ff inset!important;color:#54c8ff!important}.ui.inverted.blue.basic.button:focus,.ui.inverted.blue.basic.buttons .button:focus{box-shadow:0 0 0 2px #2bbbff inset!important;color:#54c8ff!important}.ui.inverted.blue.basic.active.button,.ui.inverted.blue.basic.buttons .active.button,.ui.inverted.blue.buttons .basic.active.button{box-shadow:0 0 0 2px #3ac0ff inset!important;color:#54c8ff!important}.ui.inverted.blue.basic.button:active,.ui.inverted.blue.basic.buttons .button:active,.ui.inverted.blue.buttons .basic.button:active{box-shadow:0 0 0 2px #21b8ff inset!important;color:#54c8ff!important}.ui.green.button,.ui.green.buttons .button{background-color:#21ba45;color:#fff;text-shadow:none;background-image:none}.ui.green.button{box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.green.button:hover,.ui.green.buttons .button:hover{background-color:#16ab39;color:#fff;text-shadow:none}.ui.green.button:focus,.ui.green.buttons .button:focus{background-color:#0ea432;color:#fff;text-shadow:none}.ui.green.button:active,.ui.green.buttons .button:active{background-color:#198f35;color:#fff;text-shadow:none}.ui.green.active.button,.ui.green.button .active.button:active,.ui.green.buttons .active.button,.ui.green.buttons .active.button:active{background-color:#13ae38;color:#fff;text-shadow:none}.ui.basic.green.button,.ui.basic.green.buttons .button{box-shadow:0 0 0 1px #21ba45 inset!important;color:#21ba45!important}.ui.basic.green.button:hover,.ui.basic.green.buttons .button:hover{background:0 0!important;box-shadow:0 0 0 1px #16ab39 inset!important;color:#16ab39!important}.ui.basic.green.button:focus,.ui.basic.green.buttons .button:focus{background:0 0!important;box-shadow:0 0 0 1px #0ea432 inset!important;color:#16ab39!important}.ui.basic.green.active.button,.ui.basic.green.buttons .active.button{background:0 0!important;box-shadow:0 0 0 1px #13ae38 inset!important;color:#198f35!important}.ui.basic.green.button:active,.ui.basic.green.buttons .button:active{box-shadow:0 0 0 1px #198f35 inset!important;color:#198f35!important}.ui.buttons:not(.vertical)>.basic.green.button:not(:first-child){margin-left:-1px}.ui.inverted.green.button,.ui.inverted.green.buttons .button{background-color:transparent;box-shadow:0 0 0 2px #2ecc40 inset!important;color:#2ecc40}.ui.inverted.green.button.active,.ui.inverted.green.button:active,.ui.inverted.green.button:focus,.ui.inverted.green.button:hover,.ui.inverted.green.buttons .button.active,.ui.inverted.green.buttons .button:active,.ui.inverted.green.buttons .button:focus,.ui.inverted.green.buttons .button:hover{box-shadow:none!important;color:#fff}.ui.inverted.green.button:hover,.ui.inverted.green.buttons .button:hover{background-color:#22be34}.ui.inverted.green.button:focus,.ui.inverted.green.buttons .button:focus{background-color:#19b82b}.ui.inverted.green.active.button,.ui.inverted.green.buttons .active.button{background-color:#1fc231}.ui.inverted.green.button:active,.ui.inverted.green.buttons .button:active{background-color:#25a233}.ui.inverted.green.basic.button,.ui.inverted.green.basic.buttons .button,.ui.inverted.green.buttons .basic.button{background-color:transparent;box-shadow:0 0 0 2px rgba(255,255,255,.5) inset!important;color:#fff!important}.ui.inverted.green.basic.button:hover,.ui.inverted.green.basic.buttons .button:hover,.ui.inverted.green.buttons .basic.button:hover{box-shadow:0 0 0 2px #22be34 inset!important;color:#2ecc40!important}.ui.inverted.green.basic.button:focus,.ui.inverted.green.basic.buttons .button:focus{box-shadow:0 0 0 2px #19b82b inset!important;color:#2ecc40!important}.ui.inverted.green.basic.active.button,.ui.inverted.green.basic.buttons .active.button,.ui.inverted.green.buttons .basic.active.button{box-shadow:0 0 0 2px #1fc231 inset!important;color:#2ecc40!important}.ui.inverted.green.basic.button:active,.ui.inverted.green.basic.buttons .button:active,.ui.inverted.green.buttons .basic.button:active{box-shadow:0 0 0 2px #25a233 inset!important;color:#2ecc40!important}.ui.orange.button,.ui.orange.buttons .button{background-color:#f2711c;color:#fff;text-shadow:none;background-image:none}.ui.orange.button{box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.orange.button:hover,.ui.orange.buttons .button:hover{background-color:#f26202;color:#fff;text-shadow:none}.ui.orange.button:focus,.ui.orange.buttons .button:focus{background-color:#e55b00;color:#fff;text-shadow:none}.ui.orange.button:active,.ui.orange.buttons .button:active{background-color:#cf590c;color:#fff;text-shadow:none}.ui.orange.active.button,.ui.orange.button .active.button:active,.ui.orange.buttons .active.button,.ui.orange.buttons .active.button:active{background-color:#f56100;color:#fff;text-shadow:none}.ui.basic.orange.button,.ui.basic.orange.buttons .button{box-shadow:0 0 0 1px #f2711c inset!important;color:#f2711c!important}.ui.basic.orange.button:hover,.ui.basic.orange.buttons .button:hover{background:0 0!important;box-shadow:0 0 0 1px #f26202 inset!important;color:#f26202!important}.ui.basic.orange.button:focus,.ui.basic.orange.buttons .button:focus{background:0 0!important;box-shadow:0 0 0 1px #e55b00 inset!important;color:#f26202!important}.ui.basic.orange.active.button,.ui.basic.orange.buttons .active.button{background:0 0!important;box-shadow:0 0 0 1px #f56100 inset!important;color:#cf590c!important}.ui.basic.orange.button:active,.ui.basic.orange.buttons .button:active{box-shadow:0 0 0 1px #cf590c inset!important;color:#cf590c!important}.ui.buttons:not(.vertical)>.basic.orange.button:not(:first-child){margin-left:-1px}.ui.inverted.orange.button,.ui.inverted.orange.buttons .button{background-color:transparent;box-shadow:0 0 0 2px #ff851b inset!important;color:#ff851b}.ui.inverted.orange.button.active,.ui.inverted.orange.button:active,.ui.inverted.orange.button:focus,.ui.inverted.orange.button:hover,.ui.inverted.orange.buttons .button.active,.ui.inverted.orange.buttons .button:active,.ui.inverted.orange.buttons .button:focus,.ui.inverted.orange.buttons .button:hover{box-shadow:none!important;color:#fff}.ui.inverted.orange.button:hover,.ui.inverted.orange.buttons .button:hover{background-color:#ff7701}.ui.inverted.orange.button:focus,.ui.inverted.orange.buttons .button:focus{background-color:#f17000}.ui.inverted.orange.active.button,.ui.inverted.orange.buttons .active.button{background-color:#ff7701}.ui.inverted.orange.button:active,.ui.inverted.orange.buttons .button:active{background-color:#e76b00}.ui.inverted.orange.basic.button,.ui.inverted.orange.basic.buttons .button,.ui.inverted.orange.buttons .basic.button{background-color:transparent;box-shadow:0 0 0 2px rgba(255,255,255,.5) inset!important;color:#fff!important}.ui.inverted.orange.basic.button:hover,.ui.inverted.orange.basic.buttons .button:hover,.ui.inverted.orange.buttons .basic.button:hover{box-shadow:0 0 0 2px #ff7701 inset!important;color:#ff851b!important}.ui.inverted.orange.basic.button:focus,.ui.inverted.orange.basic.buttons .button:focus{box-shadow:0 0 0 2px #f17000 inset!important;color:#ff851b!important}.ui.inverted.orange.basic.active.button,.ui.inverted.orange.basic.buttons .active.button,.ui.inverted.orange.buttons .basic.active.button{box-shadow:0 0 0 2px #ff7701 inset!important;color:#ff851b!important}.ui.inverted.orange.basic.button:active,.ui.inverted.orange.basic.buttons .button:active,.ui.inverted.orange.buttons .basic.button:active{box-shadow:0 0 0 2px #e76b00 inset!important;color:#ff851b!important}.ui.pink.button,.ui.pink.buttons .button{background-color:#e03997;color:#fff;text-shadow:none;background-image:none}.ui.pink.button{box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.pink.button:hover,.ui.pink.buttons .button:hover{background-color:#e61a8d;color:#fff;text-shadow:none}.ui.pink.button:focus,.ui.pink.buttons .button:focus{background-color:#e10f85;color:#fff;text-shadow:none}.ui.pink.button:active,.ui.pink.buttons .button:active{background-color:#c71f7e;color:#fff;text-shadow:none}.ui.pink.active.button,.ui.pink.button .active.button:active,.ui.pink.buttons .active.button,.ui.pink.buttons .active.button:active{background-color:#ea158d;color:#fff;text-shadow:none}.ui.basic.pink.button,.ui.basic.pink.buttons .button{box-shadow:0 0 0 1px #e03997 inset!important;color:#e03997!important}.ui.basic.pink.button:hover,.ui.basic.pink.buttons .button:hover{background:0 0!important;box-shadow:0 0 0 1px #e61a8d inset!important;color:#e61a8d!important}.ui.basic.pink.button:focus,.ui.basic.pink.buttons .button:focus{background:0 0!important;box-shadow:0 0 0 1px #e10f85 inset!important;color:#e61a8d!important}.ui.basic.pink.active.button,.ui.basic.pink.buttons .active.button{background:0 0!important;box-shadow:0 0 0 1px #ea158d inset!important;color:#c71f7e!important}.ui.basic.pink.button:active,.ui.basic.pink.buttons .button:active{box-shadow:0 0 0 1px #c71f7e inset!important;color:#c71f7e!important}.ui.buttons:not(.vertical)>.basic.pink.button:not(:first-child){margin-left:-1px}.ui.inverted.pink.button,.ui.inverted.pink.buttons .button{background-color:transparent;box-shadow:0 0 0 2px #ff8edf inset!important;color:#ff8edf}.ui.inverted.pink.button.active,.ui.inverted.pink.button:active,.ui.inverted.pink.button:focus,.ui.inverted.pink.button:hover,.ui.inverted.pink.buttons .button.active,.ui.inverted.pink.buttons .button:active,.ui.inverted.pink.buttons .button:focus,.ui.inverted.pink.buttons .button:hover{box-shadow:none!important;color:#fff}.ui.inverted.pink.button:hover,.ui.inverted.pink.buttons .button:hover{background-color:#ff74d8}.ui.inverted.pink.button:focus,.ui.inverted.pink.buttons .button:focus{background-color:#ff65d3}.ui.inverted.pink.active.button,.ui.inverted.pink.buttons .active.button{background-color:#ff74d8}.ui.inverted.pink.button:active,.ui.inverted.pink.buttons .button:active{background-color:#ff5bd1}.ui.inverted.pink.basic.button,.ui.inverted.pink.basic.buttons .button,.ui.inverted.pink.buttons .basic.button{background-color:transparent;box-shadow:0 0 0 2px rgba(255,255,255,.5) inset!important;color:#fff!important}.ui.inverted.pink.basic.button:hover,.ui.inverted.pink.basic.buttons .button:hover,.ui.inverted.pink.buttons .basic.button:hover{box-shadow:0 0 0 2px #ff74d8 inset!important;color:#ff8edf!important}.ui.inverted.pink.basic.button:focus,.ui.inverted.pink.basic.buttons .button:focus{box-shadow:0 0 0 2px #ff65d3 inset!important;color:#ff8edf!important}.ui.inverted.pink.basic.active.button,.ui.inverted.pink.basic.buttons .active.button,.ui.inverted.pink.buttons .basic.active.button{box-shadow:0 0 0 2px #ff74d8 inset!important;color:#ff8edf!important}.ui.inverted.pink.basic.button:active,.ui.inverted.pink.basic.buttons .button:active,.ui.inverted.pink.buttons .basic.button:active{box-shadow:0 0 0 2px #ff5bd1 inset!important;color:#ff8edf!important}.ui.violet.button,.ui.violet.buttons .button{background-color:#6435c9;color:#fff;text-shadow:none;background-image:none}.ui.violet.button{box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.violet.button:hover,.ui.violet.buttons .button:hover{background-color:#5829bb;color:#fff;text-shadow:none}.ui.violet.button:focus,.ui.violet.buttons .button:focus{background-color:#4f20b5;color:#fff;text-shadow:none}.ui.violet.button:active,.ui.violet.buttons .button:active{background-color:#502aa1;color:#fff;text-shadow:none}.ui.violet.active.button,.ui.violet.button .active.button:active,.ui.violet.buttons .active.button,.ui.violet.buttons .active.button:active{background-color:#5626bf;color:#fff;text-shadow:none}.ui.basic.violet.button,.ui.basic.violet.buttons .button{box-shadow:0 0 0 1px #6435c9 inset!important;color:#6435c9!important}.ui.basic.violet.button:hover,.ui.basic.violet.buttons .button:hover{background:0 0!important;box-shadow:0 0 0 1px #5829bb inset!important;color:#5829bb!important}.ui.basic.violet.button:focus,.ui.basic.violet.buttons .button:focus{background:0 0!important;box-shadow:0 0 0 1px #4f20b5 inset!important;color:#5829bb!important}.ui.basic.violet.active.button,.ui.basic.violet.buttons .active.button{background:0 0!important;box-shadow:0 0 0 1px #5626bf inset!important;color:#502aa1!important}.ui.basic.violet.button:active,.ui.basic.violet.buttons .button:active{box-shadow:0 0 0 1px #502aa1 inset!important;color:#502aa1!important}.ui.buttons:not(.vertical)>.basic.violet.button:not(:first-child){margin-left:-1px}.ui.inverted.violet.button,.ui.inverted.violet.buttons .button{background-color:transparent;box-shadow:0 0 0 2px #a291fb inset!important;color:#a291fb}.ui.inverted.violet.button.active,.ui.inverted.violet.button:active,.ui.inverted.violet.button:focus,.ui.inverted.violet.button:hover,.ui.inverted.violet.buttons .button.active,.ui.inverted.violet.buttons .button:active,.ui.inverted.violet.buttons .button:focus,.ui.inverted.violet.buttons .button:hover{box-shadow:none!important;color:#fff}.ui.inverted.violet.button:hover,.ui.inverted.violet.buttons .button:hover{background-color:#8a73ff}.ui.inverted.violet.button:focus,.ui.inverted.violet.buttons .button:focus{background-color:#7d64ff}.ui.inverted.violet.active.button,.ui.inverted.violet.buttons .active.button{background-color:#8a73ff}.ui.inverted.violet.button:active,.ui.inverted.violet.buttons .button:active{background-color:#7860f9}.ui.inverted.violet.basic.button,.ui.inverted.violet.basic.buttons .button,.ui.inverted.violet.buttons .basic.button{background-color:transparent;box-shadow:0 0 0 2px rgba(255,255,255,.5) inset!important;color:#fff!important}.ui.inverted.violet.basic.button:hover,.ui.inverted.violet.basic.buttons .button:hover,.ui.inverted.violet.buttons .basic.button:hover{box-shadow:0 0 0 2px #8a73ff inset!important;color:#a291fb!important}.ui.inverted.violet.basic.button:focus,.ui.inverted.violet.basic.buttons .button:focus{box-shadow:0 0 0 2px #7d64ff inset!important;color:#a291fb!important}.ui.inverted.violet.basic.active.button,.ui.inverted.violet.basic.buttons .active.button,.ui.inverted.violet.buttons .basic.active.button{box-shadow:0 0 0 2px #8a73ff inset!important;color:#a291fb!important}.ui.inverted.violet.basic.button:active,.ui.inverted.violet.basic.buttons .button:active,.ui.inverted.violet.buttons .basic.button:active{box-shadow:0 0 0 2px #7860f9 inset!important;color:#a291fb!important}.ui.purple.button,.ui.purple.buttons .button{background-color:#a333c8;color:#fff;text-shadow:none;background-image:none}.ui.purple.button{box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.purple.button:hover,.ui.purple.buttons .button:hover{background-color:#9627ba;color:#fff;text-shadow:none}.ui.purple.button:focus,.ui.purple.buttons .button:focus{background-color:#8f1eb4;color:#fff;text-shadow:none}.ui.purple.button:active,.ui.purple.buttons .button:active{background-color:#82299f;color:#fff;text-shadow:none}.ui.purple.active.button,.ui.purple.button .active.button:active,.ui.purple.buttons .active.button,.ui.purple.buttons .active.button:active{background-color:#9724be;color:#fff;text-shadow:none}.ui.basic.purple.button,.ui.basic.purple.buttons .button{box-shadow:0 0 0 1px #a333c8 inset!important;color:#a333c8!important}.ui.basic.purple.button:hover,.ui.basic.purple.buttons .button:hover{background:0 0!important;box-shadow:0 0 0 1px #9627ba inset!important;color:#9627ba!important}.ui.basic.purple.button:focus,.ui.basic.purple.buttons .button:focus{background:0 0!important;box-shadow:0 0 0 1px #8f1eb4 inset!important;color:#9627ba!important}.ui.basic.purple.active.button,.ui.basic.purple.buttons .active.button{background:0 0!important;box-shadow:0 0 0 1px #9724be inset!important;color:#82299f!important}.ui.basic.purple.button:active,.ui.basic.purple.buttons .button:active{box-shadow:0 0 0 1px #82299f inset!important;color:#82299f!important}.ui.buttons:not(.vertical)>.basic.purple.button:not(:first-child){margin-left:-1px}.ui.inverted.purple.button,.ui.inverted.purple.buttons .button{background-color:transparent;box-shadow:0 0 0 2px #dc73ff inset!important;color:#dc73ff}.ui.inverted.purple.button.active,.ui.inverted.purple.button:active,.ui.inverted.purple.button:focus,.ui.inverted.purple.button:hover,.ui.inverted.purple.buttons .button.active,.ui.inverted.purple.buttons .button:active,.ui.inverted.purple.buttons .button:focus,.ui.inverted.purple.buttons .button:hover{box-shadow:none!important;color:#fff}.ui.inverted.purple.button:hover,.ui.inverted.purple.buttons .button:hover{background-color:#d65aff}.ui.inverted.purple.button:focus,.ui.inverted.purple.buttons .button:focus{background-color:#d24aff}.ui.inverted.purple.active.button,.ui.inverted.purple.buttons .active.button{background-color:#d65aff}.ui.inverted.purple.button:active,.ui.inverted.purple.buttons .button:active{background-color:#cf40ff}.ui.inverted.purple.basic.button,.ui.inverted.purple.basic.buttons .button,.ui.inverted.purple.buttons .basic.button{background-color:transparent;box-shadow:0 0 0 2px rgba(255,255,255,.5) inset!important;color:#fff!important}.ui.inverted.purple.basic.button:hover,.ui.inverted.purple.basic.buttons .button:hover,.ui.inverted.purple.buttons .basic.button:hover{box-shadow:0 0 0 2px #d65aff inset!important;color:#dc73ff!important}.ui.inverted.purple.basic.button:focus,.ui.inverted.purple.basic.buttons .button:focus{box-shadow:0 0 0 2px #d24aff inset!important;color:#dc73ff!important}.ui.inverted.purple.basic.active.button,.ui.inverted.purple.basic.buttons .active.button,.ui.inverted.purple.buttons .basic.active.button{box-shadow:0 0 0 2px #d65aff inset!important;color:#dc73ff!important}.ui.inverted.purple.basic.button:active,.ui.inverted.purple.basic.buttons .button:active,.ui.inverted.purple.buttons .basic.button:active{box-shadow:0 0 0 2px #cf40ff inset!important;color:#dc73ff!important}.ui.red.button,.ui.red.buttons .button{background-color:#db2828;color:#fff;text-shadow:none;background-image:none}.ui.red.button{box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.red.button:hover,.ui.red.buttons .button:hover{background-color:#d01919;color:#fff;text-shadow:none}.ui.red.button:focus,.ui.red.buttons .button:focus{background-color:#ca1010;color:#fff;text-shadow:none}.ui.red.button:active,.ui.red.buttons .button:active{background-color:#b21e1e;color:#fff;text-shadow:none}.ui.red.active.button,.ui.red.button .active.button:active,.ui.red.buttons .active.button,.ui.red.buttons .active.button:active{background-color:#d41515;color:#fff;text-shadow:none}.ui.basic.red.button,.ui.basic.red.buttons .button{box-shadow:0 0 0 1px #db2828 inset!important;color:#db2828!important}.ui.basic.red.button:hover,.ui.basic.red.buttons .button:hover{background:0 0!important;box-shadow:0 0 0 1px #d01919 inset!important;color:#d01919!important}.ui.basic.red.button:focus,.ui.basic.red.buttons .button:focus{background:0 0!important;box-shadow:0 0 0 1px #ca1010 inset!important;color:#d01919!important}.ui.basic.red.active.button,.ui.basic.red.buttons .active.button{background:0 0!important;box-shadow:0 0 0 1px #d41515 inset!important;color:#b21e1e!important}.ui.basic.red.button:active,.ui.basic.red.buttons .button:active{box-shadow:0 0 0 1px #b21e1e inset!important;color:#b21e1e!important}.ui.buttons:not(.vertical)>.basic.red.button:not(:first-child){margin-left:-1px}.ui.inverted.red.button,.ui.inverted.red.buttons .button{background-color:transparent;box-shadow:0 0 0 2px #ff695e inset!important;color:#ff695e}.ui.inverted.red.button.active,.ui.inverted.red.button:active,.ui.inverted.red.button:focus,.ui.inverted.red.button:hover,.ui.inverted.red.buttons .button.active,.ui.inverted.red.buttons .button:active,.ui.inverted.red.buttons .button:focus,.ui.inverted.red.buttons .button:hover{box-shadow:none!important;color:#fff}.ui.inverted.red.button:hover,.ui.inverted.red.buttons .button:hover{background-color:#ff5144}.ui.inverted.red.button:focus,.ui.inverted.red.buttons .button:focus{background-color:#ff4335}.ui.inverted.red.active.button,.ui.inverted.red.buttons .active.button{background-color:#ff5144}.ui.inverted.red.button:active,.ui.inverted.red.buttons .button:active{background-color:#ff392b}.ui.inverted.red.basic.button,.ui.inverted.red.basic.buttons .button,.ui.inverted.red.buttons .basic.button{background-color:transparent;box-shadow:0 0 0 2px rgba(255,255,255,.5) inset!important;color:#fff!important}.ui.inverted.red.basic.button:hover,.ui.inverted.red.basic.buttons .button:hover,.ui.inverted.red.buttons .basic.button:hover{box-shadow:0 0 0 2px #ff5144 inset!important;color:#ff695e!important}.ui.inverted.red.basic.button:focus,.ui.inverted.red.basic.buttons .button:focus{box-shadow:0 0 0 2px #ff4335 inset!important;color:#ff695e!important}.ui.inverted.red.basic.active.button,.ui.inverted.red.basic.buttons .active.button,.ui.inverted.red.buttons .basic.active.button{box-shadow:0 0 0 2px #ff5144 inset!important;color:#ff695e!important}.ui.inverted.red.basic.button:active,.ui.inverted.red.basic.buttons .button:active,.ui.inverted.red.buttons .basic.button:active{box-shadow:0 0 0 2px #ff392b inset!important;color:#ff695e!important}.ui.teal.button,.ui.teal.buttons .button{background-color:#00b5ad;color:#fff;text-shadow:none;background-image:none}.ui.teal.button{box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.teal.button:hover,.ui.teal.buttons .button:hover{background-color:#009c95;color:#fff;text-shadow:none}.ui.teal.button:focus,.ui.teal.buttons .button:focus{background-color:#008c86;color:#fff;text-shadow:none}.ui.teal.button:active,.ui.teal.buttons .button:active{background-color:#00827c;color:#fff;text-shadow:none}.ui.teal.active.button,.ui.teal.button .active.button:active,.ui.teal.buttons .active.button,.ui.teal.buttons .active.button:active{background-color:#009c95;color:#fff;text-shadow:none}.ui.basic.teal.button,.ui.basic.teal.buttons .button{box-shadow:0 0 0 1px #00b5ad inset!important;color:#00b5ad!important}.ui.basic.teal.button:hover,.ui.basic.teal.buttons .button:hover{background:0 0!important;box-shadow:0 0 0 1px #009c95 inset!important;color:#009c95!important}.ui.basic.teal.button:focus,.ui.basic.teal.buttons .button:focus{background:0 0!important;box-shadow:0 0 0 1px #008c86 inset!important;color:#009c95!important}.ui.basic.teal.active.button,.ui.basic.teal.buttons .active.button{background:0 0!important;box-shadow:0 0 0 1px #009c95 inset!important;color:#00827c!important}.ui.basic.teal.button:active,.ui.basic.teal.buttons .button:active{box-shadow:0 0 0 1px #00827c inset!important;color:#00827c!important}.ui.buttons:not(.vertical)>.basic.teal.button:not(:first-child){margin-left:-1px}.ui.inverted.teal.button,.ui.inverted.teal.buttons .button{background-color:transparent;box-shadow:0 0 0 2px #6dffff inset!important;color:#6dffff}.ui.inverted.teal.button.active,.ui.inverted.teal.button:active,.ui.inverted.teal.button:focus,.ui.inverted.teal.button:hover,.ui.inverted.teal.buttons .button.active,.ui.inverted.teal.buttons .button:active,.ui.inverted.teal.buttons .button:focus,.ui.inverted.teal.buttons .button:hover{box-shadow:none!important;color:rgba(0,0,0,.6)}.ui.inverted.teal.button:hover,.ui.inverted.teal.buttons .button:hover{background-color:#54ffff}.ui.inverted.teal.button:focus,.ui.inverted.teal.buttons .button:focus{background-color:#4ff}.ui.inverted.teal.active.button,.ui.inverted.teal.buttons .active.button{background-color:#54ffff}.ui.inverted.teal.button:active,.ui.inverted.teal.buttons .button:active{background-color:#3affff}.ui.inverted.teal.basic.button,.ui.inverted.teal.basic.buttons .button,.ui.inverted.teal.buttons .basic.button{background-color:transparent;box-shadow:0 0 0 2px rgba(255,255,255,.5) inset!important;color:#fff!important}.ui.inverted.teal.basic.button:hover,.ui.inverted.teal.basic.buttons .button:hover,.ui.inverted.teal.buttons .basic.button:hover{box-shadow:0 0 0 2px #54ffff inset!important;color:#6dffff!important}.ui.inverted.teal.basic.button:focus,.ui.inverted.teal.basic.buttons .button:focus{box-shadow:0 0 0 2px #4ff inset!important;color:#6dffff!important}.ui.inverted.teal.basic.active.button,.ui.inverted.teal.basic.buttons .active.button,.ui.inverted.teal.buttons .basic.active.button{box-shadow:0 0 0 2px #54ffff inset!important;color:#6dffff!important}.ui.inverted.teal.basic.button:active,.ui.inverted.teal.basic.buttons .button:active,.ui.inverted.teal.buttons .basic.button:active{box-shadow:0 0 0 2px #3affff inset!important;color:#6dffff!important}.ui.olive.button,.ui.olive.buttons .button{background-color:#b5cc18;color:#fff;text-shadow:none;background-image:none}.ui.olive.button{box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.olive.button:hover,.ui.olive.buttons .button:hover{background-color:#a7bd0d;color:#fff;text-shadow:none}.ui.olive.button:focus,.ui.olive.buttons .button:focus{background-color:#a0b605;color:#fff;text-shadow:none}.ui.olive.button:active,.ui.olive.buttons .button:active{background-color:#8d9e13;color:#fff;text-shadow:none}.ui.olive.active.button,.ui.olive.button .active.button:active,.ui.olive.buttons .active.button,.ui.olive.buttons .active.button:active{background-color:#aac109;color:#fff;text-shadow:none}.ui.basic.olive.button,.ui.basic.olive.buttons .button{box-shadow:0 0 0 1px #b5cc18 inset!important;color:#b5cc18!important}.ui.basic.olive.button:hover,.ui.basic.olive.buttons .button:hover{background:0 0!important;box-shadow:0 0 0 1px #a7bd0d inset!important;color:#a7bd0d!important}.ui.basic.olive.button:focus,.ui.basic.olive.buttons .button:focus{background:0 0!important;box-shadow:0 0 0 1px #a0b605 inset!important;color:#a7bd0d!important}.ui.basic.olive.active.button,.ui.basic.olive.buttons .active.button{background:0 0!important;box-shadow:0 0 0 1px #aac109 inset!important;color:#8d9e13!important}.ui.basic.olive.button:active,.ui.basic.olive.buttons .button:active{box-shadow:0 0 0 1px #8d9e13 inset!important;color:#8d9e13!important}.ui.buttons:not(.vertical)>.basic.olive.button:not(:first-child){margin-left:-1px}.ui.inverted.olive.button,.ui.inverted.olive.buttons .button{background-color:transparent;box-shadow:0 0 0 2px #d9e778 inset!important;color:#d9e778}.ui.inverted.olive.button.active,.ui.inverted.olive.button:active,.ui.inverted.olive.button:focus,.ui.inverted.olive.button:hover,.ui.inverted.olive.buttons .button.active,.ui.inverted.olive.buttons .button:active,.ui.inverted.olive.buttons .button:focus,.ui.inverted.olive.buttons .button:hover{box-shadow:none!important;color:rgba(0,0,0,.6)}.ui.inverted.olive.button:hover,.ui.inverted.olive.buttons .button:hover{background-color:#d8ea5c}.ui.inverted.olive.button:focus,.ui.inverted.olive.buttons .button:focus{background-color:#daef47}.ui.inverted.olive.active.button,.ui.inverted.olive.buttons .active.button{background-color:#daed59}.ui.inverted.olive.button:active,.ui.inverted.olive.buttons .button:active{background-color:#cddf4d}.ui.inverted.olive.basic.button,.ui.inverted.olive.basic.buttons .button,.ui.inverted.olive.buttons .basic.button{background-color:transparent;box-shadow:0 0 0 2px rgba(255,255,255,.5) inset!important;color:#fff!important}.ui.inverted.olive.basic.button:hover,.ui.inverted.olive.basic.buttons .button:hover,.ui.inverted.olive.buttons .basic.button:hover{box-shadow:0 0 0 2px #d8ea5c inset!important;color:#d9e778!important}.ui.inverted.olive.basic.button:focus,.ui.inverted.olive.basic.buttons .button:focus{box-shadow:0 0 0 2px #daef47 inset!important;color:#d9e778!important}.ui.inverted.olive.basic.active.button,.ui.inverted.olive.basic.buttons .active.button,.ui.inverted.olive.buttons .basic.active.button{box-shadow:0 0 0 2px #daed59 inset!important;color:#d9e778!important}.ui.inverted.olive.basic.button:active,.ui.inverted.olive.basic.buttons .button:active,.ui.inverted.olive.buttons .basic.button:active{box-shadow:0 0 0 2px #cddf4d inset!important;color:#d9e778!important}.ui.yellow.button,.ui.yellow.buttons .button{background-color:#fbbd08;color:#fff;text-shadow:none;background-image:none}.ui.yellow.button{box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.yellow.button:hover,.ui.yellow.buttons .button:hover{background-color:#eaae00;color:#fff;text-shadow:none}.ui.yellow.button:focus,.ui.yellow.buttons .button:focus{background-color:#daa300;color:#fff;text-shadow:none}.ui.yellow.button:active,.ui.yellow.buttons .button:active{background-color:#cd9903;color:#fff;text-shadow:none}.ui.yellow.active.button,.ui.yellow.button .active.button:active,.ui.yellow.buttons .active.button,.ui.yellow.buttons .active.button:active{background-color:#eaae00;color:#fff;text-shadow:none}.ui.basic.yellow.button,.ui.basic.yellow.buttons .button{box-shadow:0 0 0 1px #fbbd08 inset!important;color:#fbbd08!important}.ui.basic.yellow.button:hover,.ui.basic.yellow.buttons .button:hover{background:0 0!important;box-shadow:0 0 0 1px #eaae00 inset!important;color:#eaae00!important}.ui.basic.yellow.button:focus,.ui.basic.yellow.buttons .button:focus{background:0 0!important;box-shadow:0 0 0 1px #daa300 inset!important;color:#eaae00!important}.ui.basic.yellow.active.button,.ui.basic.yellow.buttons .active.button{background:0 0!important;box-shadow:0 0 0 1px #eaae00 inset!important;color:#cd9903!important}.ui.basic.yellow.button:active,.ui.basic.yellow.buttons .button:active{box-shadow:0 0 0 1px #cd9903 inset!important;color:#cd9903!important}.ui.buttons:not(.vertical)>.basic.yellow.button:not(:first-child){margin-left:-1px}.ui.inverted.yellow.button,.ui.inverted.yellow.buttons .button{background-color:transparent;box-shadow:0 0 0 2px #ffe21f inset!important;color:#ffe21f}.ui.inverted.yellow.button.active,.ui.inverted.yellow.button:active,.ui.inverted.yellow.button:focus,.ui.inverted.yellow.button:hover,.ui.inverted.yellow.buttons .button.active,.ui.inverted.yellow.buttons .button:active,.ui.inverted.yellow.buttons .button:focus,.ui.inverted.yellow.buttons .button:hover{box-shadow:none!important;color:rgba(0,0,0,.6)}.ui.inverted.yellow.button:hover,.ui.inverted.yellow.buttons .button:hover{background-color:#ffdf05}.ui.inverted.yellow.button:focus,.ui.inverted.yellow.buttons .button:focus{background-color:#f5d500}.ui.inverted.yellow.active.button,.ui.inverted.yellow.buttons .active.button{background-color:#ffdf05}.ui.inverted.yellow.button:active,.ui.inverted.yellow.buttons .button:active{background-color:#ebcd00}.ui.inverted.yellow.basic.button,.ui.inverted.yellow.basic.buttons .button,.ui.inverted.yellow.buttons .basic.button{background-color:transparent;box-shadow:0 0 0 2px rgba(255,255,255,.5) inset!important;color:#fff!important}.ui.inverted.yellow.basic.button:hover,.ui.inverted.yellow.basic.buttons .button:hover,.ui.inverted.yellow.buttons .basic.button:hover{box-shadow:0 0 0 2px #ffdf05 inset!important;color:#ffe21f!important}.ui.inverted.yellow.basic.button:focus,.ui.inverted.yellow.basic.buttons .button:focus{box-shadow:0 0 0 2px #f5d500 inset!important;color:#ffe21f!important}.ui.inverted.yellow.basic.active.button,.ui.inverted.yellow.basic.buttons .active.button,.ui.inverted.yellow.buttons .basic.active.button{box-shadow:0 0 0 2px #ffdf05 inset!important;color:#ffe21f!important}.ui.inverted.yellow.basic.button:active,.ui.inverted.yellow.basic.buttons .button:active,.ui.inverted.yellow.buttons .basic.button:active{box-shadow:0 0 0 2px #ebcd00 inset!important;color:#ffe21f!important}.ui.primary.button,.ui.primary.buttons .button{background-color:#2185d0;color:#fff;text-shadow:none;background-image:none}.ui.primary.button{box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.primary.button:hover,.ui.primary.buttons .button:hover{background-color:#1678c2;color:#fff;text-shadow:none}.ui.primary.button:focus,.ui.primary.buttons .button:focus{background-color:#0d71bb;color:#fff;text-shadow:none}.ui.primary.button:active,.ui.primary.buttons .button:active{background-color:#1a69a4;color:#fff;text-shadow:none}.ui.primary.active.button,.ui.primary.button .active.button:active,.ui.primary.buttons .active.button,.ui.primary.buttons .active.button:active{background-color:#1279c6;color:#fff;text-shadow:none}.ui.basic.primary.button,.ui.basic.primary.buttons .button{box-shadow:0 0 0 1px #2185d0 inset!important;color:#2185d0!important}.ui.basic.primary.button:hover,.ui.basic.primary.buttons .button:hover{background:0 0!important;box-shadow:0 0 0 1px #1678c2 inset!important;color:#1678c2!important}.ui.basic.primary.button:focus,.ui.basic.primary.buttons .button:focus{background:0 0!important;box-shadow:0 0 0 1px #0d71bb inset!important;color:#1678c2!important}.ui.basic.primary.active.button,.ui.basic.primary.buttons .active.button{background:0 0!important;box-shadow:0 0 0 1px #1279c6 inset!important;color:#1a69a4!important}.ui.basic.primary.button:active,.ui.basic.primary.buttons .button:active{box-shadow:0 0 0 1px #1a69a4 inset!important;color:#1a69a4!important}.ui.buttons:not(.vertical)>.basic.primary.button:not(:first-child){margin-left:-1px}.ui.secondary.button,.ui.secondary.buttons .button{background-color:#1b1c1d;color:#fff;text-shadow:none;background-image:none}.ui.secondary.button{box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.secondary.button:hover,.ui.secondary.buttons .button:hover{background-color:#27292a;color:#fff;text-shadow:none}.ui.secondary.button:focus,.ui.secondary.buttons .button:focus{background-color:#2e3032;color:#fff;text-shadow:none}.ui.secondary.button:active,.ui.secondary.buttons .button:active{background-color:#343637;color:#fff;text-shadow:none}.ui.secondary.active.button,.ui.secondary.button .active.button:active,.ui.secondary.buttons .active.button,.ui.secondary.buttons .active.button:active{background-color:#27292a;color:#fff;text-shadow:none}.ui.basic.secondary.button,.ui.basic.secondary.buttons .button{box-shadow:0 0 0 1px #1b1c1d inset!important;color:#1b1c1d!important}.ui.basic.secondary.button:hover,.ui.basic.secondary.buttons .button:hover{background:0 0!important;box-shadow:0 0 0 1px #27292a inset!important;color:#27292a!important}.ui.basic.secondary.button:focus,.ui.basic.secondary.buttons .button:focus{background:0 0!important;box-shadow:0 0 0 1px #2e3032 inset!important;color:#27292a!important}.ui.basic.secondary.active.button,.ui.basic.secondary.buttons .active.button{background:0 0!important;box-shadow:0 0 0 1px #27292a inset!important;color:#343637!important}.ui.basic.secondary.button:active,.ui.basic.secondary.buttons .button:active{box-shadow:0 0 0 1px #343637 inset!important;color:#343637!important}.ui.buttons:not(.vertical)>.basic.primary.button:not(:first-child){margin-left:-1px}.ui.positive.button,.ui.positive.buttons .button{background-color:#21ba45;color:#fff;text-shadow:none;background-image:none}.ui.positive.button{box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.positive.button:hover,.ui.positive.buttons .button:hover{background-color:#16ab39;color:#fff;text-shadow:none}.ui.positive.button:focus,.ui.positive.buttons .button:focus{background-color:#0ea432;color:#fff;text-shadow:none}.ui.positive.button:active,.ui.positive.buttons .button:active{background-color:#198f35;color:#fff;text-shadow:none}.ui.positive.active.button,.ui.positive.button .active.button:active,.ui.positive.buttons .active.button,.ui.positive.buttons .active.button:active{background-color:#13ae38;color:#fff;text-shadow:none}.ui.basic.positive.button,.ui.basic.positive.buttons .button{box-shadow:0 0 0 1px #21ba45 inset!important;color:#21ba45!important}.ui.basic.positive.button:hover,.ui.basic.positive.buttons .button:hover{background:0 0!important;box-shadow:0 0 0 1px #16ab39 inset!important;color:#16ab39!important}.ui.basic.positive.button:focus,.ui.basic.positive.buttons .button:focus{background:0 0!important;box-shadow:0 0 0 1px #0ea432 inset!important;color:#16ab39!important}.ui.basic.positive.active.button,.ui.basic.positive.buttons .active.button{background:0 0!important;box-shadow:0 0 0 1px #13ae38 inset!important;color:#198f35!important}.ui.basic.positive.button:active,.ui.basic.positive.buttons .button:active{box-shadow:0 0 0 1px #198f35 inset!important;color:#198f35!important}.ui.buttons:not(.vertical)>.basic.primary.button:not(:first-child){margin-left:-1px}.ui.negative.button,.ui.negative.buttons .button{background-color:#db2828;color:#fff;text-shadow:none;background-image:none}.ui.negative.button{box-shadow:0 0 0 0 rgba(34,36,38,.15) inset}.ui.negative.button:hover,.ui.negative.buttons .button:hover{background-color:#d01919;color:#fff;text-shadow:none}.ui.negative.button:focus,.ui.negative.buttons .button:focus{background-color:#ca1010;color:#fff;text-shadow:none}.ui.negative.button:active,.ui.negative.buttons .button:active{background-color:#b21e1e;color:#fff;text-shadow:none}.ui.negative.active.button,.ui.negative.button .active.button:active,.ui.negative.buttons .active.button,.ui.negative.buttons .active.button:active{background-color:#d41515;color:#fff;text-shadow:none}.ui.basic.negative.button,.ui.basic.negative.buttons .button{box-shadow:0 0 0 1px #db2828 inset!important;color:#db2828!important}.ui.basic.negative.button:hover,.ui.basic.negative.buttons .button:hover{background:0 0!important;box-shadow:0 0 0 1px #d01919 inset!important;color:#d01919!important}.ui.basic.negative.button:focus,.ui.basic.negative.buttons .button:focus{background:0 0!important;box-shadow:0 0 0 1px #ca1010 inset!important;color:#d01919!important}.ui.basic.negative.active.button,.ui.basic.negative.buttons .active.button{background:0 0!important;box-shadow:0 0 0 1px #d41515 inset!important;color:#b21e1e!important}.ui.basic.negative.button:active,.ui.basic.negative.buttons .button:active{box-shadow:0 0 0 1px #b21e1e inset!important;color:#b21e1e!important}.ui.buttons:not(.vertical)>.basic.primary.button:not(:first-child){margin-left:-1px}.ui.buttons{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;font-size:0;vertical-align:baseline;margin:0 .25em 0 0}.ui.buttons:not(.basic):not(.inverted){box-shadow:none}.ui.buttons:after{content:".";display:block;height:0;clear:both;visibility:hidden}.ui.buttons .button{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;margin:0;border-radius:0;margin:0}.ui.buttons:not(.basic):not(.inverted)>.button,.ui.buttons>.ui.button:not(.basic):not(.inverted){box-shadow:0 0 0 1px transparent inset,0 0 0 0 rgba(34,36,38,.15) inset}.ui.buttons .button:first-child{border-left:none;margin-left:0;border-top-left-radius:.28571429rem;border-bottom-left-radius:.28571429rem}.ui.buttons .button:last-child{border-top-right-radius:.28571429rem;border-bottom-right-radius:.28571429rem}.ui.vertical.buttons{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.ui.vertical.buttons .button{display:block;float:none;width:100%;margin:0;box-shadow:none;border-radius:0}.ui.vertical.buttons .button:first-child{border-top-left-radius:.28571429rem;border-top-right-radius:.28571429rem}.ui.vertical.buttons .button:last-child{margin-bottom:0;border-bottom-left-radius:.28571429rem;border-bottom-right-radius:.28571429rem}.ui.vertical.buttons .button:only-child{border-radius:.28571429rem}/*! + * # Semantic UI 2.2.10 - Container + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.container{display:block;max-width:100%!important}@media only screen and (max-width:767px){.ui.container{width:auto!important;margin-left:1em!important;margin-right:1em!important}.ui.grid.container{width:auto!important}.ui.relaxed.grid.container{width:auto!important}.ui.very.relaxed.grid.container{width:auto!important}}@media only screen and (min-width:768px) and (max-width:991px){.ui.container{width:723px;margin-left:auto!important;margin-right:auto!important}.ui.grid.container{width:calc(723px + 2rem)!important}.ui.relaxed.grid.container{width:calc(723px + 3rem)!important}.ui.very.relaxed.grid.container{width:calc(723px + 5rem)!important}}@media only screen and (min-width:992px) and (max-width:1199px){.ui.container{width:933px;margin-left:auto!important;margin-right:auto!important}.ui.grid.container{width:calc(933px + 2rem)!important}.ui.relaxed.grid.container{width:calc(933px + 3rem)!important}.ui.very.relaxed.grid.container{width:calc(933px + 5rem)!important}}@media only screen and (min-width:1200px){.ui.container{width:1127px;margin-left:auto!important;margin-right:auto!important}.ui.grid.container{width:calc(1127px + 2rem)!important}.ui.relaxed.grid.container{width:calc(1127px + 3rem)!important}.ui.very.relaxed.grid.container{width:calc(1127px + 5rem)!important}}.ui.text.container{font-family:HelveticaNeueLTStd-Lt,Helvetica,Arial,sans-serif;max-width:700px!important;line-height:1.5}.ui.text.container{font-size:1.14285714rem}.ui.fluid.container{width:100%}.ui[class*="left aligned"].container{text-align:left}.ui[class*="center aligned"].container{text-align:center}.ui[class*="right aligned"].container{text-align:right}.ui.justified.container{text-align:justify;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto}/*! + * # Semantic UI 2.2.10 - Divider + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.divider{margin:1rem 0;line-height:1;height:0;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:rgba(0,0,0,.85);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent}.ui.divider:not(.vertical):not(.horizontal){border-top:1px solid rgba(34,36,38,.15);border-bottom:1px solid rgba(255,255,255,.1)}.ui.grid>.column+.divider,.ui.grid>.row>.column+.divider{left:auto}.ui.horizontal.divider{display:table;white-space:nowrap;height:auto;margin:'';line-height:1;text-align:center}.ui.horizontal.divider:after,.ui.horizontal.divider:before{content:'';display:table-cell;position:relative;top:50%;width:50%;background-repeat:no-repeat}.ui.horizontal.divider:before{background-position:right 1em top 50%}.ui.horizontal.divider:after{background-position:left 1em top 50%}.ui.vertical.divider{position:absolute;z-index:2;top:50%;left:50%;margin:0;padding:0;width:auto;height:50%;line-height:0;text-align:center;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.ui.vertical.divider:after,.ui.vertical.divider:before{position:absolute;left:50%;content:'';z-index:3;border-left:1px solid rgba(34,36,38,.15);border-right:1px solid rgba(255,255,255,.1);width:0;height:calc(100% - 1rem)}.ui.vertical.divider:before{top:-100%}.ui.vertical.divider:after{top:auto;bottom:0}@media only screen and (max-width:767px){.ui.grid .stackable.row .ui.vertical.divider,.ui.stackable.grid .ui.vertical.divider{display:table;white-space:nowrap;height:auto;margin:'';overflow:hidden;line-height:1;text-align:center;position:static;top:0;left:0;-webkit-transform:none;transform:none}.ui.grid .stackable.row .ui.vertical.divider:after,.ui.grid .stackable.row .ui.vertical.divider:before,.ui.stackable.grid .ui.vertical.divider:after,.ui.stackable.grid .ui.vertical.divider:before{position:static;left:0;border-left:none;border-right:none;content:'';display:table-cell;position:relative;top:50%;width:50%;background-repeat:no-repeat}.ui.grid .stackable.row .ui.vertical.divider:before,.ui.stackable.grid .ui.vertical.divider:before{background-position:right 1em top 50%}.ui.grid .stackable.row .ui.vertical.divider:after,.ui.stackable.grid .ui.vertical.divider:after{background-position:left 1em top 50%}}.ui.divider>.icon{margin:0;font-size:1rem;height:1em;vertical-align:middle}.ui.hidden.divider{border-color:transparent!important}.ui.hidden.divider:after,.ui.hidden.divider:before{display:none}.ui.divider.inverted,.ui.horizontal.inverted.divider,.ui.vertical.inverted.divider{color:#fff}.ui.divider.inverted,.ui.divider.inverted:after,.ui.divider.inverted:before{border-top-color:rgba(34,36,38,.15)!important;border-left-color:rgba(34,36,38,.15)!important;border-bottom-color:rgba(255,255,255,.15)!important;border-right-color:rgba(255,255,255,.15)!important}.ui.fitted.divider{margin:0}.ui.clearing.divider{clear:both}.ui.section.divider{margin-top:2rem;margin-bottom:2rem}.ui.divider{font-size:1rem}.ui.horizontal.divider:after,.ui.horizontal.divider:before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC)}@media only screen and (max-width:767px){.ui.grid .stackable.row .ui.vertical.divider:after,.ui.grid .stackable.row .ui.vertical.divider:before,.ui.stackable.grid .ui.vertical.divider:after,.ui.stackable.grid .ui.vertical.divider:before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC)}}/*! + * # Semantic UI 2.2.10 - Flag + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */i.flag:not(.icon){display:inline-block;width:16px;height:11px;line-height:11px;vertical-align:baseline;margin:0 .5em 0 0;text-decoration:inherit;speak:none;font-smoothing:antialiased;-webkit-backface-visibility:hidden;backface-visibility:hidden}i.flag:not(.icon):before{display:inline-block;content:'';background:url(themes/default/assets/images/flags.png) no-repeat -108px -1976px;width:16px;height:11px}i.flag.ad:before,i.flag.andorra:before{background-position:0 0}i.flag.ae:before,i.flag.uae:before,i.flag.united.arab.emirates:before{background-position:0 -26px}i.flag.af:before,i.flag.afghanistan:before{background-position:0 -52px}i.flag.ag:before,i.flag.antigua:before{background-position:0 -78px}i.flag.ai:before,i.flag.anguilla:before{background-position:0 -104px}i.flag.al:before,i.flag.albania:before{background-position:0 -130px}i.flag.am:before,i.flag.armenia:before{background-position:0 -156px}i.flag.an:before,i.flag.netherlands.antilles:before{background-position:0 -182px}i.flag.angola:before,i.flag.ao:before{background-position:0 -208px}i.flag.ar:before,i.flag.argentina:before{background-position:0 -234px}i.flag.american.samoa:before,i.flag.as:before{background-position:0 -260px}i.flag.at:before,i.flag.austria:before{background-position:0 -286px}i.flag.au:before,i.flag.australia:before{background-position:0 -312px}i.flag.aruba:before,i.flag.aw:before{background-position:0 -338px}i.flag.aland.islands:before,i.flag.ax:before{background-position:0 -364px}i.flag.az:before,i.flag.azerbaijan:before{background-position:0 -390px}i.flag.ba:before,i.flag.bosnia:before{background-position:0 -416px}i.flag.barbados:before,i.flag.bb:before{background-position:0 -442px}i.flag.bangladesh:before,i.flag.bd:before{background-position:0 -468px}i.flag.be:before,i.flag.belgium:before{background-position:0 -494px}i.flag.bf:before,i.flag.burkina.faso:before{background-position:0 -520px}i.flag.bg:before,i.flag.bulgaria:before{background-position:0 -546px}i.flag.bahrain:before,i.flag.bh:before{background-position:0 -572px}i.flag.bi:before,i.flag.burundi:before{background-position:0 -598px}i.flag.benin:before,i.flag.bj:before{background-position:0 -624px}i.flag.bermuda:before,i.flag.bm:before{background-position:0 -650px}i.flag.bn:before,i.flag.brunei:before{background-position:0 -676px}i.flag.bo:before,i.flag.bolivia:before{background-position:0 -702px}i.flag.br:before,i.flag.brazil:before{background-position:0 -728px}i.flag.bahamas:before,i.flag.bs:before{background-position:0 -754px}i.flag.bhutan:before,i.flag.bt:before{background-position:0 -780px}i.flag.bouvet.island:before,i.flag.bv:before{background-position:0 -806px}i.flag.botswana:before,i.flag.bw:before{background-position:0 -832px}i.flag.belarus:before,i.flag.by:before{background-position:0 -858px}i.flag.belize:before,i.flag.bz:before{background-position:0 -884px}i.flag.ca:before,i.flag.canada:before{background-position:0 -910px}i.flag.cc:before,i.flag.cocos.islands:before{background-position:0 -962px}i.flag.cd:before,i.flag.congo:before{background-position:0 -988px}i.flag.central.african.republic:before,i.flag.cf:before{background-position:0 -1014px}i.flag.cg:before,i.flag.congo.brazzaville:before{background-position:0 -1040px}i.flag.ch:before,i.flag.switzerland:before{background-position:0 -1066px}i.flag.ci:before,i.flag.cote.divoire:before{background-position:0 -1092px}i.flag.ck:before,i.flag.cook.islands:before{background-position:0 -1118px}i.flag.chile:before,i.flag.cl:before{background-position:0 -1144px}i.flag.cameroon:before,i.flag.cm:before{background-position:0 -1170px}i.flag.china:before,i.flag.cn:before{background-position:0 -1196px}i.flag.co:before,i.flag.colombia:before{background-position:0 -1222px}i.flag.costa.rica:before,i.flag.cr:before{background-position:0 -1248px}i.flag.cs:before,i.flag.serbia:before{background-position:0 -1274px}i.flag.cu:before,i.flag.cuba:before{background-position:0 -1300px}i.flag.cape.verde:before,i.flag.cv:before{background-position:0 -1326px}i.flag.christmas.island:before,i.flag.cx:before{background-position:0 -1352px}i.flag.cy:before,i.flag.cyprus:before{background-position:0 -1378px}i.flag.cz:before,i.flag.czech.republic:before{background-position:0 -1404px}i.flag.de:before,i.flag.germany:before{background-position:0 -1430px}i.flag.dj:before,i.flag.djibouti:before{background-position:0 -1456px}i.flag.denmark:before,i.flag.dk:before{background-position:0 -1482px}i.flag.dm:before,i.flag.dominica:before{background-position:0 -1508px}i.flag.do:before,i.flag.dominican.republic:before{background-position:0 -1534px}i.flag.algeria:before,i.flag.dz:before{background-position:0 -1560px}i.flag.ec:before,i.flag.ecuador:before{background-position:0 -1586px}i.flag.ee:before,i.flag.estonia:before{background-position:0 -1612px}i.flag.eg:before,i.flag.egypt:before{background-position:0 -1638px}i.flag.eh:before,i.flag.western.sahara:before{background-position:0 -1664px}i.flag.er:before,i.flag.eritrea:before{background-position:0 -1716px}i.flag.es:before,i.flag.spain:before{background-position:0 -1742px}i.flag.et:before,i.flag.ethiopia:before{background-position:0 -1768px}i.flag.eu:before,i.flag.european.union:before{background-position:0 -1794px}i.flag.fi:before,i.flag.finland:before{background-position:0 -1846px}i.flag.fiji:before,i.flag.fj:before{background-position:0 -1872px}i.flag.falkland.islands:before,i.flag.fk:before{background-position:0 -1898px}i.flag.fm:before,i.flag.micronesia:before{background-position:0 -1924px}i.flag.faroe.islands:before,i.flag.fo:before{background-position:0 -1950px}i.flag.fr:before,i.flag.france:before{background-position:0 -1976px}i.flag.ga:before,i.flag.gabon:before{background-position:-36px 0}i.flag.gb:before,i.flag.united.kingdom:before{background-position:-36px -26px}i.flag.gd:before,i.flag.grenada:before{background-position:-36px -52px}i.flag.ge:before,i.flag.georgia:before{background-position:-36px -78px}i.flag.french.guiana:before,i.flag.gf:before{background-position:-36px -104px}i.flag.gh:before,i.flag.ghana:before{background-position:-36px -130px}i.flag.gi:before,i.flag.gibraltar:before{background-position:-36px -156px}i.flag.gl:before,i.flag.greenland:before{background-position:-36px -182px}i.flag.gambia:before,i.flag.gm:before{background-position:-36px -208px}i.flag.gn:before,i.flag.guinea:before{background-position:-36px -234px}i.flag.gp:before,i.flag.guadeloupe:before{background-position:-36px -260px}i.flag.equatorial.guinea:before,i.flag.gq:before{background-position:-36px -286px}i.flag.gr:before,i.flag.greece:before{background-position:-36px -312px}i.flag.gs:before,i.flag.sandwich.islands:before{background-position:-36px -338px}i.flag.gt:before,i.flag.guatemala:before{background-position:-36px -364px}i.flag.gu:before,i.flag.guam:before{background-position:-36px -390px}i.flag.guinea-bissau:before,i.flag.gw:before{background-position:-36px -416px}i.flag.guyana:before,i.flag.gy:before{background-position:-36px -442px}i.flag.hk:before,i.flag.hong.kong:before{background-position:-36px -468px}i.flag.heard.island:before,i.flag.hm:before{background-position:-36px -494px}i.flag.hn:before,i.flag.honduras:before{background-position:-36px -520px}i.flag.croatia:before,i.flag.hr:before{background-position:-36px -546px}i.flag.haiti:before,i.flag.ht:before{background-position:-36px -572px}i.flag.hu:before,i.flag.hungary:before{background-position:-36px -598px}i.flag.id:before,i.flag.indonesia:before{background-position:-36px -624px}i.flag.ie:before,i.flag.ireland:before{background-position:-36px -650px}i.flag.il:before,i.flag.israel:before{background-position:-36px -676px}i.flag.in:before,i.flag.india:before{background-position:-36px -702px}i.flag.indian.ocean.territory:before,i.flag.io:before{background-position:-36px -728px}i.flag.iq:before,i.flag.iraq:before{background-position:-36px -754px}i.flag.ir:before,i.flag.iran:before{background-position:-36px -780px}i.flag.iceland:before,i.flag.is:before{background-position:-36px -806px}i.flag.it:before,i.flag.italy:before{background-position:-36px -832px}i.flag.jamaica:before,i.flag.jm:before{background-position:-36px -858px}i.flag.jo:before,i.flag.jordan:before{background-position:-36px -884px}i.flag.japan:before,i.flag.jp:before{background-position:-36px -910px}i.flag.ke:before,i.flag.kenya:before{background-position:-36px -936px}i.flag.kg:before,i.flag.kyrgyzstan:before{background-position:-36px -962px}i.flag.cambodia:before,i.flag.kh:before{background-position:-36px -988px}i.flag.ki:before,i.flag.kiribati:before{background-position:-36px -1014px}i.flag.comoros:before,i.flag.km:before{background-position:-36px -1040px}i.flag.kn:before,i.flag.saint.kitts.and.nevis:before{background-position:-36px -1066px}i.flag.kp:before,i.flag.north.korea:before{background-position:-36px -1092px}i.flag.kr:before,i.flag.south.korea:before{background-position:-36px -1118px}i.flag.kuwait:before,i.flag.kw:before{background-position:-36px -1144px}i.flag.cayman.islands:before,i.flag.ky:before{background-position:-36px -1170px}i.flag.kazakhstan:before,i.flag.kz:before{background-position:-36px -1196px}i.flag.la:before,i.flag.laos:before{background-position:-36px -1222px}i.flag.lb:before,i.flag.lebanon:before{background-position:-36px -1248px}i.flag.lc:before,i.flag.saint.lucia:before{background-position:-36px -1274px}i.flag.li:before,i.flag.liechtenstein:before{background-position:-36px -1300px}i.flag.lk:before,i.flag.sri.lanka:before{background-position:-36px -1326px}i.flag.liberia:before,i.flag.lr:before{background-position:-36px -1352px}i.flag.lesotho:before,i.flag.ls:before{background-position:-36px -1378px}i.flag.lithuania:before,i.flag.lt:before{background-position:-36px -1404px}i.flag.lu:before,i.flag.luxembourg:before{background-position:-36px -1430px}i.flag.latvia:before,i.flag.lv:before{background-position:-36px -1456px}i.flag.libya:before,i.flag.ly:before{background-position:-36px -1482px}i.flag.ma:before,i.flag.morocco:before{background-position:-36px -1508px}i.flag.mc:before,i.flag.monaco:before{background-position:-36px -1534px}i.flag.md:before,i.flag.moldova:before{background-position:-36px -1560px}i.flag.me:before,i.flag.montenegro:before{background-position:-36px -1586px}i.flag.madagascar:before,i.flag.mg:before{background-position:-36px -1613px}i.flag.marshall.islands:before,i.flag.mh:before{background-position:-36px -1639px}i.flag.macedonia:before,i.flag.mk:before{background-position:-36px -1665px}i.flag.mali:before,i.flag.ml:before{background-position:-36px -1691px}i.flag.burma:before,i.flag.mm:before,i.flag.myanmar:before{background-position:-73px -1821px}i.flag.mn:before,i.flag.mongolia:before{background-position:-36px -1743px}i.flag.macau:before,i.flag.mo:before{background-position:-36px -1769px}i.flag.mp:before,i.flag.northern.mariana.islands:before{background-position:-36px -1795px}i.flag.martinique:before,i.flag.mq:before{background-position:-36px -1821px}i.flag.mauritania:before,i.flag.mr:before{background-position:-36px -1847px}i.flag.montserrat:before,i.flag.ms:before{background-position:-36px -1873px}i.flag.malta:before,i.flag.mt:before{background-position:-36px -1899px}i.flag.mauritius:before,i.flag.mu:before{background-position:-36px -1925px}i.flag.maldives:before,i.flag.mv:before{background-position:-36px -1951px}i.flag.malawi:before,i.flag.mw:before{background-position:-36px -1977px}i.flag.mexico:before,i.flag.mx:before{background-position:-72px 0}i.flag.malaysia:before,i.flag.my:before{background-position:-72px -26px}i.flag.mozambique:before,i.flag.mz:before{background-position:-72px -52px}i.flag.na:before,i.flag.namibia:before{background-position:-72px -78px}i.flag.nc:before,i.flag.new.caledonia:before{background-position:-72px -104px}i.flag.ne:before,i.flag.niger:before{background-position:-72px -130px}i.flag.nf:before,i.flag.norfolk.island:before{background-position:-72px -156px}i.flag.ng:before,i.flag.nigeria:before{background-position:-72px -182px}i.flag.ni:before,i.flag.nicaragua:before{background-position:-72px -208px}i.flag.netherlands:before,i.flag.nl:before{background-position:-72px -234px}i.flag.no:before,i.flag.norway:before{background-position:-72px -260px}i.flag.nepal:before,i.flag.np:before{background-position:-72px -286px}i.flag.nauru:before,i.flag.nr:before{background-position:-72px -312px}i.flag.niue:before,i.flag.nu:before{background-position:-72px -338px}i.flag.new.zealand:before,i.flag.nz:before{background-position:-72px -364px}i.flag.om:before,i.flag.oman:before{background-position:-72px -390px}i.flag.pa:before,i.flag.panama:before{background-position:-72px -416px}i.flag.pe:before,i.flag.peru:before{background-position:-72px -442px}i.flag.french.polynesia:before,i.flag.pf:before{background-position:-72px -468px}i.flag.new.guinea:before,i.flag.pg:before{background-position:-72px -494px}i.flag.ph:before,i.flag.philippines:before{background-position:-72px -520px}i.flag.pakistan:before,i.flag.pk:before{background-position:-72px -546px}i.flag.pl:before,i.flag.poland:before{background-position:-72px -572px}i.flag.pm:before,i.flag.saint.pierre:before{background-position:-72px -598px}i.flag.pitcairn.islands:before,i.flag.pn:before{background-position:-72px -624px}i.flag.pr:before,i.flag.puerto.rico:before{background-position:-72px -650px}i.flag.palestine:before,i.flag.ps:before{background-position:-72px -676px}i.flag.portugal:before,i.flag.pt:before{background-position:-72px -702px}i.flag.palau:before,i.flag.pw:before{background-position:-72px -728px}i.flag.paraguay:before,i.flag.py:before{background-position:-72px -754px}i.flag.qa:before,i.flag.qatar:before{background-position:-72px -780px}i.flag.re:before,i.flag.reunion:before{background-position:-72px -806px}i.flag.ro:before,i.flag.romania:before{background-position:-72px -832px}i.flag.rs:before,i.flag.serbia:before{background-position:-72px -858px}i.flag.ru:before,i.flag.russia:before{background-position:-72px -884px}i.flag.rw:before,i.flag.rwanda:before{background-position:-72px -910px}i.flag.sa:before,i.flag.saudi.arabia:before{background-position:-72px -936px}i.flag.sb:before,i.flag.solomon.islands:before{background-position:-72px -962px}i.flag.sc:before,i.flag.seychelles:before{background-position:-72px -988px}i.flag.gb.sct:before,i.flag.scotland:before{background-position:-72px -1014px}i.flag.sd:before,i.flag.sudan:before{background-position:-72px -1040px}i.flag.se:before,i.flag.sweden:before{background-position:-72px -1066px}i.flag.sg:before,i.flag.singapore:before{background-position:-72px -1092px}i.flag.saint.helena:before,i.flag.sh:before{background-position:-72px -1118px}i.flag.si:before,i.flag.slovenia:before{background-position:-72px -1144px}i.flag.jan.mayen:before,i.flag.sj:before,i.flag.svalbard:before{background-position:-72px -1170px}i.flag.sk:before,i.flag.slovakia:before{background-position:-72px -1196px}i.flag.sierra.leone:before,i.flag.sl:before{background-position:-72px -1222px}i.flag.san.marino:before,i.flag.sm:before{background-position:-72px -1248px}i.flag.senegal:before,i.flag.sn:before{background-position:-72px -1274px}i.flag.so:before,i.flag.somalia:before{background-position:-72px -1300px}i.flag.sr:before,i.flag.suriname:before{background-position:-72px -1326px}i.flag.sao.tome:before,i.flag.st:before{background-position:-72px -1352px}i.flag.el.salvador:before,i.flag.sv:before{background-position:-72px -1378px}i.flag.sy:before,i.flag.syria:before{background-position:-72px -1404px}i.flag.swaziland:before,i.flag.sz:before{background-position:-72px -1430px}i.flag.caicos.islands:before,i.flag.tc:before{background-position:-72px -1456px}i.flag.chad:before,i.flag.td:before{background-position:-72px -1482px}i.flag.french.territories:before,i.flag.tf:before{background-position:-72px -1508px}i.flag.tg:before,i.flag.togo:before{background-position:-72px -1534px}i.flag.th:before,i.flag.thailand:before{background-position:-72px -1560px}i.flag.tajikistan:before,i.flag.tj:before{background-position:-72px -1586px}i.flag.tk:before,i.flag.tokelau:before{background-position:-72px -1612px}i.flag.timorleste:before,i.flag.tl:before{background-position:-72px -1638px}i.flag.tm:before,i.flag.turkmenistan:before{background-position:-72px -1664px}i.flag.tn:before,i.flag.tunisia:before{background-position:-72px -1690px}i.flag.to:before,i.flag.tonga:before{background-position:-72px -1716px}i.flag.tr:before,i.flag.turkey:before{background-position:-72px -1742px}i.flag.trinidad:before,i.flag.tt:before{background-position:-72px -1768px}i.flag.tuvalu:before,i.flag.tv:before{background-position:-72px -1794px}i.flag.taiwan:before,i.flag.tw:before{background-position:-72px -1820px}i.flag.tanzania:before,i.flag.tz:before{background-position:-72px -1846px}i.flag.ua:before,i.flag.ukraine:before{background-position:-72px -1872px}i.flag.ug:before,i.flag.uganda:before{background-position:-72px -1898px}i.flag.um:before,i.flag.us.minor.islands:before{background-position:-72px -1924px}i.flag.america:before,i.flag.united.states:before,i.flag.us:before{background-position:-72px -1950px}i.flag.uruguay:before,i.flag.uy:before{background-position:-72px -1976px}i.flag.uz:before,i.flag.uzbekistan:before{background-position:-108px 0}i.flag.va:before,i.flag.vatican.city:before{background-position:-108px -26px}i.flag.saint.vincent:before,i.flag.vc:before{background-position:-108px -52px}i.flag.ve:before,i.flag.venezuela:before{background-position:-108px -78px}i.flag.british.virgin.islands:before,i.flag.vg:before{background-position:-108px -104px}i.flag.us.virgin.islands:before,i.flag.vi:before{background-position:-108px -130px}i.flag.vietnam:before,i.flag.vn:before{background-position:-108px -156px}i.flag.vanuatu:before,i.flag.vu:before{background-position:-108px -182px}i.flag.gb.wls:before,i.flag.wales:before{background-position:-108px -208px}i.flag.wallis.and.futuna:before,i.flag.wf:before{background-position:-108px -234px}i.flag.samoa:before,i.flag.ws:before{background-position:-108px -260px}i.flag.ye:before,i.flag.yemen:before{background-position:-108px -286px}i.flag.mayotte:before,i.flag.yt:before{background-position:-108px -312px}i.flag.south.africa:before,i.flag.za:before{background-position:-108px -338px}i.flag.zambia:before,i.flag.zm:before{background-position:-108px -364px}i.flag.zimbabwe:before,i.flag.zw:before{background-position:-108px -390px}/*! + * # Semantic UI 2.2.10 - Header + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.header{border:none;margin:calc(2rem - .165em) 0 1rem;padding:0 0;font-family:'Open Sans',Arial,sans-serif;font-weight:400;line-height:1.33em;text-transform:none;color:#212121}.ui.header:first-child{margin-top:-.165em}.ui.header:last-child{margin-bottom:0}.ui.header .sub.header{display:block;font-weight:400;padding:0;margin:0;font-size:1rem;line-height:1.2em;color:rgba(0,0,0,.6)}.ui.header>.icon{display:table-cell;opacity:1;font-size:1.5em;padding-top:.165em;vertical-align:middle}.ui.header .icon:only-child{display:inline-block;padding:0;margin-right:.75rem}.ui.header>.image:not(.icon),.ui.header>img{display:inline-block;margin-top:.165em;width:2.5em;height:auto;vertical-align:middle}.ui.header>.image:not(.icon):only-child,.ui.header>img:only-child{margin-right:.75rem}.ui.header .content{display:inline-block;vertical-align:top}.ui.header>.image+.content,.ui.header>img+.content{padding-left:.75rem;vertical-align:middle}.ui.header>.icon+.content{padding-left:.75rem;display:table-cell;vertical-align:middle}.ui.header .ui.label{font-size:'';margin-left:.5rem;vertical-align:middle}.ui.header+p{margin-top:0}h1.ui.header{font-size:2.25rem}h2.ui.header{font-size:2rem}h3.ui.header{font-size:1.75rem}h4.ui.header{font-size:1.5rem}h5.ui.header{font-size:1.25rem}h1.ui.header .sub.header{font-size:1.14285714rem}h2.ui.header .sub.header{font-size:1.14285714rem}h3.ui.header .sub.header{font-size:1rem}h4.ui.header .sub.header{font-size:1rem}h5.ui.header .sub.header{font-size:.92857143rem}.ui.huge.header{min-height:1em;font-size:2.25em}.ui.large.header{font-size:2em}.ui.medium.header{font-size:1.75em}.ui.small.header{font-size:1.5em}.ui.tiny.header{font-size:1.25em}.ui.huge.header .sub.header{font-size:1.14285714rem}.ui.large.header .sub.header{font-size:1.14285714rem}.ui.header .sub.header{font-size:1rem}.ui.small.header .sub.header{font-size:1rem}.ui.tiny.header .sub.header{font-size:.92857143rem}.ui.sub.header{padding:0;margin-bottom:.14285714rem;font-weight:700;font-size:.85714286em;text-transform:uppercase;color:''}.ui.small.sub.header{font-size:.78571429em}.ui.sub.header{font-size:.85714286em}.ui.large.sub.header{font-size:.92857143em}.ui.huge.sub.header{font-size:1em}.ui.icon.header{display:inline-block;text-align:center;margin:2rem 0 1rem}.ui.icon.header:after{content:'';display:block;height:0;clear:both;visibility:hidden}.ui.icon.header:first-child{margin-top:0}.ui.icon.header .icon{float:none;display:block;width:auto;height:auto;line-height:1;padding:0;font-size:3em;margin:0 auto .5rem;opacity:1}.ui.icon.header .content{display:block;padding:0}.ui.icon.header .circular.icon{font-size:2em}.ui.icon.header .square.icon{font-size:2em}.ui.block.icon.header .icon{margin-bottom:0}.ui.icon.header.aligned{margin-left:auto;margin-right:auto;display:block}.ui.disabled.header{opacity:.45}.ui.inverted.header{color:#fff}.ui.inverted.header .sub.header{color:rgba(255,255,255,.8)}.ui.inverted.attached.header{background:#333 -webkit-linear-gradient(transparent,rgba(0,0,0,.05));background:#333 linear-gradient(transparent,rgba(0,0,0,.05));box-shadow:none;border-color:transparent}.ui.inverted.block.header{background:#333 -webkit-linear-gradient(transparent,rgba(0,0,0,.05));background:#333 linear-gradient(transparent,rgba(0,0,0,.05));box-shadow:none}.ui.inverted.block.header{border-bottom:none}.ui.red.header{color:#f44336!important}a.ui.red.header:hover{color:#fd2313!important}.ui.red.dividing.header{border-bottom:2px solid #f44336}.ui.inverted.red.header{color:#ff1744!important}a.ui.inverted.red.header:hover{color:#fc0031!important}.ui.orange.header{color:#ff9800!important}a.ui.orange.header:hover{color:#e68900!important}.ui.orange.dividing.header{border-bottom:2px solid #ff9800}.ui.inverted.orange.header{color:#ff9100!important}a.ui.inverted.orange.header:hover{color:#e68300!important}.ui.olive.header{color:#b5cc18!important}a.ui.olive.header:hover{color:#a7bd0d!important}.ui.olive.dividing.header{border-bottom:2px solid #b5cc18}.ui.inverted.olive.header{color:#d9e778!important}a.ui.inverted.olive.header:hover{color:#d8ea5c!important}.ui.yellow.header{color:#ffeb3b!important}a.ui.yellow.header:hover{color:#ffe821!important}.ui.yellow.dividing.header{border-bottom:2px solid #ffeb3b}.ui.inverted.yellow.header{color:#ffea00!important}a.ui.inverted.yellow.header:hover{color:#e6d300!important}.ui.green.header{color:#4caf50!important}a.ui.green.header:hover{color:#40a244!important}.ui.green.dividing.header{border-bottom:2px solid #4caf50}.ui.inverted.green.header{color:#00e676!important}a.ui.inverted.green.header:hover{color:#00cd69!important}.ui.teal.header{color:#1de9b6!important}a.ui.teal.header:hover{color:#0be1ac!important}.ui.teal.dividing.header{border-bottom:2px solid #1de9b6}.ui.inverted.teal.header{color:#1de9b6!important}a.ui.inverted.teal.header:hover{color:#0be1ac!important}.ui.blue.header{color:#2196f3!important}a.ui.blue.header:hover{color:#028bf9!important}.ui.blue.dividing.header{border-bottom:2px solid #2196f3}.ui.inverted.blue.header{color:#2979ff!important}a.ui.inverted.blue.header:hover{color:#1069ff!important}.ui.violet.header{color:#6435c9!important}a.ui.violet.header:hover{color:#5829bb!important}.ui.violet.dividing.header{border-bottom:2px solid #6435c9}.ui.inverted.violet.header{color:#a291fb!important}a.ui.inverted.violet.header:hover{color:#8a73ff!important}.ui.purple.header{color:#9c27b0!important}a.ui.purple.header:hover{color:#8e1ca1!important}.ui.purple.dividing.header{border-bottom:2px solid #9c27b0}.ui.inverted.purple.header{color:#d500f9!important}a.ui.inverted.purple.header:hover{color:#bf00e0!important}.ui.pink.header{color:#e91e63!important}a.ui.pink.header:hover{color:#e20b54!important}.ui.pink.dividing.header{border-bottom:2px solid #e91e63}.ui.inverted.pink.header{color:#f50057!important}a.ui.inverted.pink.header:hover{color:#dc004e!important}.ui.brown.header{color:#a5673f!important}a.ui.brown.header:hover{color:#975b33!important}.ui.brown.dividing.header{border-bottom:2px solid #a5673f}.ui.inverted.brown.header{color:#d67c1c!important}a.ui.inverted.brown.header:hover{color:#c86f11!important}.ui.grey.header{color:#9e9e9e!important}a.ui.grey.header:hover{color:#ababab!important}.ui.grey.dividing.header{border-bottom:2px solid #9e9e9e}.ui.inverted.grey.header{color:#dcddde!important}a.ui.inverted.grey.header:hover{color:#cfd0d2!important}.ui.left.aligned.header{text-align:left}.ui.right.aligned.header{text-align:right}.ui.center.aligned.header,.ui.centered.header{text-align:center}.ui.justified.header{text-align:justify}.ui.justified.header:after{display:inline-block;content:'';width:100%}.ui.floated.header,.ui[class*="left floated"].header{float:left;margin-top:0;margin-right:.5em}.ui[class*="right floated"].header{float:right;margin-top:0;margin-left:.5em}.ui.fitted.header{padding:0}.ui.dividing.header{padding-bottom:.21428571rem;border-bottom:1px solid rgba(34,36,38,.15)}.ui.dividing.header .sub.header{padding-bottom:.21428571rem}.ui.dividing.header .icon{margin-bottom:0}.ui.inverted.dividing.header{border-bottom-color:rgba(255,255,255,.1)}.ui.block.header{background:#fafafa -webkit-linear-gradient(transparent,rgba(0,0,0,.05));background:#fafafa linear-gradient(transparent,rgba(0,0,0,.05));padding:.78571429rem 1rem;box-shadow:0 1px 2px 0 rgba(34,36,38,.15);border:1px solid #d4d4d5;border-radius:4px}.ui.tiny.block.header{font-size:.85714286rem}.ui.small.block.header{font-size:.92857143rem}.ui.block.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6){font-size:1rem}.ui.large.block.header{font-size:1.14285714rem}.ui.huge.block.header{font-size:1.42857143rem}.ui.attached.header{background:#fff;padding:.78571429rem 1rem;margin-left:-1px;margin-right:-1px;box-shadow:none;border:1px solid #d4d4d5}.ui.attached.block.header{background:#fafafa -webkit-linear-gradient(transparent,rgba(0,0,0,.05));background:#fafafa linear-gradient(transparent,rgba(0,0,0,.05))}.ui.attached:not(.top):not(.bottom).header{margin-top:0;margin-bottom:0;border-top:none;border-radius:0}.ui.top.attached.header{margin-bottom:0;border-radius:4px 4px 0 0}.ui.bottom.attached.header{margin-top:0;border-top:none;border-radius:0 0 4px 4px}.ui.tiny.attached.header{font-size:.85714286em}.ui.small.attached.header{font-size:.92857143em}.ui.attached.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6){font-size:1em}.ui.large.attached.header{font-size:1.14285714em}.ui.huge.attached.header{font-size:1.42857143em}.ui.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6){font-size:1.75em}/*! + * # Semantic UI 2.2.10 - Icon + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */@font-face{font-family:Icons;src:url(themes/default/assets/fonts/icons.eot);src:url(themes/default/assets/fonts/icons.eot?#iefix) format('embedded-opentype'),url(themes/default/assets/fonts/icons.woff2) format('woff2'),url(themes/default/assets/fonts/icons.woff) format('woff'),url(themes/default/assets/fonts/icons.ttf) format('truetype'),url(themes/default/assets/fonts/icons.svg#icons) format('svg');font-style:normal;font-weight:400;font-variant:normal;text-decoration:inherit;text-transform:none}i.icon{display:inline-block;opacity:1;margin:0 .25rem 0 0;width:1.18em;height:1em;font-family:Icons;font-style:normal;font-weight:400;text-decoration:inherit;text-align:center;speak:none;font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;-webkit-backface-visibility:hidden;backface-visibility:hidden}i.icon:before{background:0 0!important}i.icon.loading{height:1em;line-height:1;-webkit-animation:icon-loading 2s linear infinite;animation:icon-loading 2s linear infinite}@-webkit-keyframes icon-loading{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes icon-loading{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}i.icon.hover{opacity:1!important}i.icon.active{opacity:1!important}i.emphasized.icon{opacity:1!important}i.disabled.icon{opacity:.45!important}i.fitted.icon{width:auto;margin:0}i.link.icon,i.link.icons{cursor:pointer;opacity:.8;-webkit-transition:opacity .1s ease;transition:opacity .1s ease}i.link.icon:hover,i.link.icons:hover{opacity:1!important}i.circular.icon{border-radius:500em!important;line-height:1!important;padding:.5em .5em!important;box-shadow:0 0 0 .1em rgba(0,0,0,.1) inset;width:2em!important;height:2em!important}i.circular.inverted.icon{border:none;box-shadow:none}i.flipped.icon,i.horizontally.flipped.icon{-webkit-transform:scale(-1,1);transform:scale(-1,1)}i.vertically.flipped.icon{-webkit-transform:scale(1,-1);transform:scale(1,-1)}i.clockwise.rotated.icon,i.right.rotated.icon,i.rotated.icon{-webkit-transform:rotate(90deg);transform:rotate(90deg)}i.counterclockwise.rotated.icon,i.left.rotated.icon{-webkit-transform:rotate(-90deg);transform:rotate(-90deg)}i.bordered.icon{line-height:1;vertical-align:baseline;width:2em;height:2em;padding:.5em .41em!important;box-shadow:0 0 0 .1em rgba(0,0,0,.1) inset}i.bordered.inverted.icon{border:none;box-shadow:none}i.inverted.bordered.icon,i.inverted.circular.icon{background-color:#1b1c1d!important;color:#fff!important}i.inverted.icon{color:#fff}i.red.icon{color:#db2828!important}i.inverted.red.icon{color:#ff695e!important}i.inverted.bordered.red.icon,i.inverted.circular.red.icon{background-color:#db2828!important;color:#fff!important}i.orange.icon{color:#f2711c!important}i.inverted.orange.icon{color:#ff851b!important}i.inverted.bordered.orange.icon,i.inverted.circular.orange.icon{background-color:#f2711c!important;color:#fff!important}i.yellow.icon{color:#fbbd08!important}i.inverted.yellow.icon{color:#ffe21f!important}i.inverted.bordered.yellow.icon,i.inverted.circular.yellow.icon{background-color:#fbbd08!important;color:#fff!important}i.olive.icon{color:#b5cc18!important}i.inverted.olive.icon{color:#d9e778!important}i.inverted.bordered.olive.icon,i.inverted.circular.olive.icon{background-color:#b5cc18!important;color:#fff!important}i.green.icon{color:#21ba45!important}i.inverted.green.icon{color:#2ecc40!important}i.inverted.bordered.green.icon,i.inverted.circular.green.icon{background-color:#21ba45!important;color:#fff!important}i.teal.icon{color:#00b5ad!important}i.inverted.teal.icon{color:#6dffff!important}i.inverted.bordered.teal.icon,i.inverted.circular.teal.icon{background-color:#00b5ad!important;color:#fff!important}i.blue.icon{color:#2185d0!important}i.inverted.blue.icon{color:#54c8ff!important}i.inverted.bordered.blue.icon,i.inverted.circular.blue.icon{background-color:#2185d0!important;color:#fff!important}i.violet.icon{color:#6435c9!important}i.inverted.violet.icon{color:#a291fb!important}i.inverted.bordered.violet.icon,i.inverted.circular.violet.icon{background-color:#6435c9!important;color:#fff!important}i.purple.icon{color:#a333c8!important}i.inverted.purple.icon{color:#dc73ff!important}i.inverted.bordered.purple.icon,i.inverted.circular.purple.icon{background-color:#a333c8!important;color:#fff!important}i.pink.icon{color:#e03997!important}i.inverted.pink.icon{color:#ff8edf!important}i.inverted.bordered.pink.icon,i.inverted.circular.pink.icon{background-color:#e03997!important;color:#fff!important}i.brown.icon{color:#a5673f!important}i.inverted.brown.icon{color:#d67c1c!important}i.inverted.bordered.brown.icon,i.inverted.circular.brown.icon{background-color:#a5673f!important;color:#fff!important}i.grey.icon{color:#767676!important}i.inverted.grey.icon{color:#dcddde!important}i.inverted.bordered.grey.icon,i.inverted.circular.grey.icon{background-color:#767676!important;color:#fff!important}i.black.icon{color:#1b1c1d!important}i.inverted.black.icon{color:#545454!important}i.inverted.bordered.black.icon,i.inverted.circular.black.icon{background-color:#1b1c1d!important;color:#fff!important}i.mini.icon,i.mini.icons{line-height:1;font-size:.4em}i.tiny.icon,i.tiny.icons{line-height:1;font-size:.5em}i.small.icon,i.small.icons{line-height:1;font-size:.75em}i.icon,i.icons{font-size:1em}i.large.icon,i.large.icons{line-height:1;vertical-align:middle;font-size:1.5em}i.big.icon,i.big.icons{line-height:1;vertical-align:middle;font-size:2em}i.huge.icon,i.huge.icons{line-height:1;vertical-align:middle;font-size:4em}i.massive.icon,i.massive.icons{line-height:1;vertical-align:middle;font-size:8em}i.icons{display:inline-block;position:relative;line-height:1}i.icons .icon{position:absolute;top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);margin:0;margin:0}i.icons .icon:first-child{position:static;width:auto;height:auto;vertical-align:top;-webkit-transform:none;transform:none;margin-right:.25rem}i.icons .corner.icon{top:auto;left:auto;right:0;bottom:0;-webkit-transform:none;transform:none;font-size:.45em;text-shadow:-1px -1px 0 #fff,1px -1px 0 #fff,-1px 1px 0 #fff,1px 1px 0 #fff}i.icons .inverted.corner.icon{text-shadow:-1px -1px 0 #1b1c1d,1px -1px 0 #1b1c1d,-1px 1px 0 #1b1c1d,1px 1px 0 #1b1c1d}i.icon.search:before{content:"\f002"}i.icon.mail.outline:before{content:"\f003"}i.icon.signal:before{content:"\f012"}i.icon.setting:before{content:"\f013"}i.icon.home:before{content:"\f015"}i.icon.inbox:before{content:"\f01c"}i.icon.browser:before{content:"\f022"}i.icon.tag:before{content:"\f02b"}i.icon.tags:before{content:"\f02c"}i.icon.image:before{content:"\f03e"}i.icon.calendar:before{content:"\f073"}i.icon.comment:before{content:"\f075"}i.icon.shop:before{content:"\f07a"}i.icon.comments:before{content:"\f086"}i.icon.external:before{content:"\f08e"}i.icon.privacy:before{content:"\f084"}i.icon.settings:before{content:"\f085"}i.icon.comments:before{content:"\f086"}i.icon.external:before{content:"\f08e"}i.icon.trophy:before{content:"\f091"}i.icon.payment:before{content:"\f09d"}i.icon.feed:before{content:"\f09e"}i.icon.alarm.outline:before{content:"\f0a2"}i.icon.tasks:before{content:"\f0ae"}i.icon.cloud:before{content:"\f0c2"}i.icon.lab:before{content:"\f0c3"}i.icon.mail:before{content:"\f0e0"}i.icon.dashboard:before{content:"\f0e4"}i.icon.comment.outline:before{content:"\f0e5"}i.icon.comments.outline:before{content:"\f0e6"}i.icon.sitemap:before{content:"\f0e8"}i.icon.idea:before{content:"\f0eb"}i.icon.alarm:before{content:"\f0f3"}i.icon.terminal:before{content:"\f120"}i.icon.code:before{content:"\f121"}i.icon.protect:before{content:"\f132"}i.icon.calendar.outline:before{content:"\f133"}i.icon.ticket:before{content:"\f145"}i.icon.external.square:before{content:"\f14c"}i.icon.bug:before{content:"\f188"}i.icon.mail.square:before{content:"\f199"}i.icon.history:before{content:"\f1da"}i.icon.options:before{content:"\f1de"}i.icon.text.telephone:before{content:"\f1e4"}i.icon.find:before{content:"\f1e5"}i.icon.alarm.mute:before{content:"\f1f6"}i.icon.alarm.mute.outline:before{content:"\f1f7"}i.icon.copyright:before{content:"\f1f9"}i.icon.at:before{content:"\f1fa"}i.icon.eyedropper:before{content:"\f1fb"}i.icon.paint.brush:before{content:"\f1fc"}i.icon.heartbeat:before{content:"\f21e"}i.icon.mouse.pointer:before{content:"\f245"}i.icon.hourglass.empty:before{content:"\f250"}i.icon.hourglass.start:before{content:"\f251"}i.icon.hourglass.half:before{content:"\f252"}i.icon.hourglass.end:before{content:"\f253"}i.icon.hourglass.full:before{content:"\f254"}i.icon.hand.pointer:before{content:"\f25a"}i.icon.trademark:before{content:"\f25c"}i.icon.registered:before{content:"\f25d"}i.icon.creative.commons:before{content:"\f25e"}i.icon.add.to.calendar:before{content:"\f271"}i.icon.remove.from.calendar:before{content:"\f272"}i.icon.delete.calendar:before{content:"\f273"}i.icon.checked.calendar:before{content:"\f274"}i.icon.industry:before{content:"\f275"}i.icon.shopping.bag:before{content:"\f290"}i.icon.shopping.basket:before{content:"\f291"}i.icon.hashtag:before{content:"\f292"}i.icon.percent:before{content:"\f295"}i.icon.handshake:before{content:"\f2b5"}i.icon.open.envelope:before{content:"\f2b6"}i.icon.open.envelope.outline:before{content:"\f2b7"}i.icon.address.book:before{content:"\f2b9"}i.icon.address.book.outline:before{content:"\f2ba"}i.icon.address.card:before{content:"\f2bb"}i.icon.address.card.outline:before{content:"\f2bc"}i.icon.id.badge:before{content:"\f2c1"}i.icon.id.card:before{content:"\f2c2"}i.icon.id.card.outline:before{content:"\f2c3"}i.icon.podcast:before{content:"\f2ce"}i.icon.window.maximize:before{content:"\f2d0"}i.icon.window.minimize:before{content:"\f2d1"}i.icon.window.restore:before{content:"\f2d2"}i.icon.window.close:before{content:"\f2d3"}i.icon.window.close.outline:before{content:"\f2d4"}i.icon.wait:before{content:"\f017"}i.icon.download:before{content:"\f019"}i.icon.repeat:before{content:"\f01e"}i.icon.refresh:before{content:"\f021"}i.icon.lock:before{content:"\f023"}i.icon.bookmark:before{content:"\f02e"}i.icon.print:before{content:"\f02f"}i.icon.write:before{content:"\f040"}i.icon.adjust:before{content:"\f042"}i.icon.theme:before{content:"\f043"}i.icon.edit:before{content:"\f044"}i.icon.external.share:before{content:"\f045"}i.icon.ban:before{content:"\f05e"}i.icon.mail.forward:before{content:"\f064"}i.icon.share:before{content:"\f064"}i.icon.expand:before{content:"\f065"}i.icon.compress:before{content:"\f066"}i.icon.unhide:before{content:"\f06e"}i.icon.hide:before{content:"\f070"}i.icon.random:before{content:"\f074"}i.icon.retweet:before{content:"\f079"}i.icon.sign.out:before{content:"\f08b"}i.icon.pin:before{content:"\f08d"}i.icon.sign.in:before{content:"\f090"}i.icon.upload:before{content:"\f093"}i.icon.call:before{content:"\f095"}i.icon.remove.bookmark:before{content:"\f097"}i.icon.call.square:before{content:"\f098"}i.icon.unlock:before{content:"\f09c"}i.icon.configure:before{content:"\f0ad"}i.icon.filter:before{content:"\f0b0"}i.icon.wizard:before{content:"\f0d0"}i.icon.undo:before{content:"\f0e2"}i.icon.exchange:before{content:"\f0ec"}i.icon.cloud.download:before{content:"\f0ed"}i.icon.cloud.upload:before{content:"\f0ee"}i.icon.reply:before{content:"\f112"}i.icon.reply.all:before{content:"\f122"}i.icon.erase:before{content:"\f12d"}i.icon.unlock.alternate:before{content:"\f13e"}i.icon.write.square:before{content:"\f14b"}i.icon.share.square:before{content:"\f14d"}i.icon.archive:before{content:"\f187"}i.icon.translate:before{content:"\f1ab"}i.icon.recycle:before{content:"\f1b8"}i.icon.send:before{content:"\f1d8"}i.icon.send.outline:before{content:"\f1d9"}i.icon.share.alternate:before{content:"\f1e0"}i.icon.share.alternate.square:before{content:"\f1e1"}i.icon.add.to.cart:before{content:"\f217"}i.icon.in.cart:before{content:"\f218"}i.icon.add.user:before{content:"\f234"}i.icon.remove.user:before{content:"\f235"}i.icon.object.group:before{content:"\f247"}i.icon.object.ungroup:before{content:"\f248"}i.icon.clone:before{content:"\f24d"}i.icon.talk:before{content:"\f27a"}i.icon.talk.outline:before{content:"\f27b"}i.icon.help.circle:before{content:"\f059"}i.icon.info.circle:before{content:"\f05a"}i.icon.warning.circle:before{content:"\f06a"}i.icon.warning.sign:before{content:"\f071"}i.icon.announcement:before{content:"\f0a1"}i.icon.help:before{content:"\f128"}i.icon.info:before{content:"\f129"}i.icon.warning:before{content:"\f12a"}i.icon.birthday:before{content:"\f1fd"}i.icon.help.circle.outline:before{content:"\f29c"}i.icon.user:before{content:"\f007"}i.icon.users:before{content:"\f0c0"}i.icon.doctor:before{content:"\f0f0"}i.icon.handicap:before{content:"\f193"}i.icon.student:before{content:"\f19d"}i.icon.child:before{content:"\f1ae"}i.icon.spy:before{content:"\f21b"}i.icon.user.circle:before{content:"\f2bd"}i.icon.user.circle.outline:before{content:"\f2be"}i.icon.user.outline:before{content:"\f2c0"}i.icon.female:before{content:"\f182"}i.icon.male:before{content:"\f183"}i.icon.woman:before{content:"\f221"}i.icon.man:before{content:"\f222"}i.icon.non.binary.transgender:before{content:"\f223"}i.icon.intergender:before{content:"\f224"}i.icon.transgender:before{content:"\f225"}i.icon.lesbian:before{content:"\f226"}i.icon.gay:before{content:"\f227"}i.icon.heterosexual:before{content:"\f228"}i.icon.other.gender:before{content:"\f229"}i.icon.other.gender.vertical:before{content:"\f22a"}i.icon.other.gender.horizontal:before{content:"\f22b"}i.icon.neuter:before{content:"\f22c"}i.icon.genderless:before{content:"\f22d"}i.icon.universal.access:before{content:"\f29a"}i.icon.wheelchair:before{content:"\f29b"}i.icon.blind:before{content:"\f29d"}i.icon.audio.description:before{content:"\f29e"}i.icon.volume.control.phone:before{content:"\f2a0"}i.icon.braille:before{content:"\f2a1"}i.icon.asl:before{content:"\f2a3"}i.icon.assistive.listening.systems:before{content:"\f2a2"}i.icon.deafness:before{content:"\f2a4"}i.icon.sign.language:before{content:"\f2a7"}i.icon.low.vision:before{content:"\f2a8"}i.icon.block.layout:before{content:"\f009"}i.icon.grid.layout:before{content:"\f00a"}i.icon.list.layout:before{content:"\f00b"}i.icon.zoom:before{content:"\f00e"}i.icon.zoom.out:before{content:"\f010"}i.icon.resize.vertical:before{content:"\f07d"}i.icon.resize.horizontal:before{content:"\f07e"}i.icon.maximize:before{content:"\f0b2"}i.icon.crop:before{content:"\f125"}i.icon.cocktail:before{content:"\f000"}i.icon.road:before{content:"\f018"}i.icon.flag:before{content:"\f024"}i.icon.book:before{content:"\f02d"}i.icon.gift:before{content:"\f06b"}i.icon.leaf:before{content:"\f06c"}i.icon.fire:before{content:"\f06d"}i.icon.plane:before{content:"\f072"}i.icon.magnet:before{content:"\f076"}i.icon.lemon:before{content:"\f094"}i.icon.world:before{content:"\f0ac"}i.icon.travel:before{content:"\f0b1"}i.icon.shipping:before{content:"\f0d1"}i.icon.money:before{content:"\f0d6"}i.icon.legal:before{content:"\f0e3"}i.icon.lightning:before{content:"\f0e7"}i.icon.umbrella:before{content:"\f0e9"}i.icon.treatment:before{content:"\f0f1"}i.icon.suitcase:before{content:"\f0f2"}i.icon.bar:before{content:"\f0fc"}i.icon.flag.outline:before{content:"\f11d"}i.icon.flag.checkered:before{content:"\f11e"}i.icon.puzzle:before{content:"\f12e"}i.icon.fire.extinguisher:before{content:"\f134"}i.icon.rocket:before{content:"\f135"}i.icon.anchor:before{content:"\f13d"}i.icon.bullseye:before{content:"\f140"}i.icon.sun:before{content:"\f185"}i.icon.moon:before{content:"\f186"}i.icon.fax:before{content:"\f1ac"}i.icon.life.ring:before{content:"\f1cd"}i.icon.bomb:before{content:"\f1e2"}i.icon.soccer:before{content:"\f1e3"}i.icon.calculator:before{content:"\f1ec"}i.icon.diamond:before{content:"\f219"}i.icon.sticky.note:before{content:"\f249"}i.icon.sticky.note.outline:before{content:"\f24a"}i.icon.law:before{content:"\f24e"}i.icon.hand.peace:before{content:"\f25b"}i.icon.hand.rock:before{content:"\f255"}i.icon.hand.paper:before{content:"\f256"}i.icon.hand.scissors:before{content:"\f257"}i.icon.hand.lizard:before{content:"\f258"}i.icon.hand.spock:before{content:"\f259"}i.icon.tv:before{content:"\f26c"}i.icon.thermometer.full:before{content:"\f2c7"}i.icon.thermometer.three.quarters:before{content:"\f2c8"}i.icon.thermometer.half:before{content:"\f2c9"}i.icon.thermometer.quarter:before{content:"\f2ca"}i.icon.thermometer.empty:before{content:"\f2cb"}i.icon.shower:before{content:"\f2cc"}i.icon.bathtub:before{content:"\f2cd"}i.icon.snowflake:before{content:"\f2dc"}i.icon.crosshairs:before{content:"\f05b"}i.icon.asterisk:before{content:"\f069"}i.icon.square.outline:before{content:"\f096"}i.icon.certificate:before{content:"\f0a3"}i.icon.square:before{content:"\f0c8"}i.icon.quote.left:before{content:"\f10d"}i.icon.quote.right:before{content:"\f10e"}i.icon.spinner:before{content:"\f110"}i.icon.circle:before{content:"\f111"}i.icon.ellipsis.horizontal:before{content:"\f141"}i.icon.ellipsis.vertical:before{content:"\f142"}i.icon.cube:before{content:"\f1b2"}i.icon.cubes:before{content:"\f1b3"}i.icon.circle.notched:before{content:"\f1ce"}i.icon.circle.thin:before{content:"\f1db"}i.icon.checkmark:before{content:"\f00c"}i.icon.remove:before{content:"\f00d"}i.icon.checkmark.box:before{content:"\f046"}i.icon.move:before{content:"\f047"}i.icon.add.circle:before{content:"\f055"}i.icon.minus.circle:before{content:"\f056"}i.icon.remove.circle:before{content:"\f057"}i.icon.check.circle:before{content:"\f058"}i.icon.remove.circle.outline:before{content:"\f05c"}i.icon.check.circle.outline:before{content:"\f05d"}i.icon.plus:before{content:"\f067"}i.icon.minus:before{content:"\f068"}i.icon.add.square:before{content:"\f0fe"}i.icon.radio:before{content:"\f10c"}i.icon.minus.square:before{content:"\f146"}i.icon.minus.square.outline:before{content:"\f147"}i.icon.check.square:before{content:"\f14a"}i.icon.selected.radio:before{content:"\f192"}i.icon.plus.square.outline:before{content:"\f196"}i.icon.toggle.off:before{content:"\f204"}i.icon.toggle.on:before{content:"\f205"}i.icon.film:before{content:"\f008"}i.icon.sound:before{content:"\f025"}i.icon.photo:before{content:"\f030"}i.icon.bar.chart:before{content:"\f080"}i.icon.camera.retro:before{content:"\f083"}i.icon.newspaper:before{content:"\f1ea"}i.icon.area.chart:before{content:"\f1fe"}i.icon.pie.chart:before{content:"\f200"}i.icon.line.chart:before{content:"\f201"}i.icon.arrow.circle.outline.down:before{content:"\f01a"}i.icon.arrow.circle.outline.up:before{content:"\f01b"}i.icon.chevron.left:before{content:"\f053"}i.icon.chevron.right:before{content:"\f054"}i.icon.arrow.left:before{content:"\f060"}i.icon.arrow.right:before{content:"\f061"}i.icon.arrow.up:before{content:"\f062"}i.icon.arrow.down:before{content:"\f063"}i.icon.chevron.up:before{content:"\f077"}i.icon.chevron.down:before{content:"\f078"}i.icon.pointing.right:before{content:"\f0a4"}i.icon.pointing.left:before{content:"\f0a5"}i.icon.pointing.up:before{content:"\f0a6"}i.icon.pointing.down:before{content:"\f0a7"}i.icon.arrow.circle.left:before{content:"\f0a8"}i.icon.arrow.circle.right:before{content:"\f0a9"}i.icon.arrow.circle.up:before{content:"\f0aa"}i.icon.arrow.circle.down:before{content:"\f0ab"}i.icon.caret.down:before{content:"\f0d7"}i.icon.caret.up:before{content:"\f0d8"}i.icon.caret.left:before{content:"\f0d9"}i.icon.caret.right:before{content:"\f0da"}i.icon.angle.double.left:before{content:"\f100"}i.icon.angle.double.right:before{content:"\f101"}i.icon.angle.double.up:before{content:"\f102"}i.icon.angle.double.down:before{content:"\f103"}i.icon.angle.left:before{content:"\f104"}i.icon.angle.right:before{content:"\f105"}i.icon.angle.up:before{content:"\f106"}i.icon.angle.down:before{content:"\f107"}i.icon.chevron.circle.left:before{content:"\f137"}i.icon.chevron.circle.right:before{content:"\f138"}i.icon.chevron.circle.up:before{content:"\f139"}i.icon.chevron.circle.down:before{content:"\f13a"}i.icon.toggle.down:before{content:"\f150"}i.icon.toggle.up:before{content:"\f151"}i.icon.toggle.right:before{content:"\f152"}i.icon.long.arrow.down:before{content:"\f175"}i.icon.long.arrow.up:before{content:"\f176"}i.icon.long.arrow.left:before{content:"\f177"}i.icon.long.arrow.right:before{content:"\f178"}i.icon.arrow.circle.outline.right:before{content:"\f18e"}i.icon.arrow.circle.outline.left:before{content:"\f190"}i.icon.toggle.left:before{content:"\f191"}i.icon.tablet:before{content:"\f10a"}i.icon.mobile:before{content:"\f10b"}i.icon.battery.full:before{content:"\f240"}i.icon.battery.high:before{content:"\f241"}i.icon.battery.medium:before{content:"\f242"}i.icon.battery.low:before{content:"\f243"}i.icon.battery.empty:before{content:"\f244"}i.icon.power:before{content:"\f011"}i.icon.trash.outline:before{content:"\f014"}i.icon.disk.outline:before{content:"\f0a0"}i.icon.desktop:before{content:"\f108"}i.icon.laptop:before{content:"\f109"}i.icon.game:before{content:"\f11b"}i.icon.keyboard:before{content:"\f11c"}i.icon.plug:before{content:"\f1e6"}i.icon.trash:before{content:"\f1f8"}i.icon.file.outline:before{content:"\f016"}i.icon.folder:before{content:"\f07b"}i.icon.folder.open:before{content:"\f07c"}i.icon.file.text.outline:before{content:"\f0f6"}i.icon.folder.outline:before{content:"\f114"}i.icon.folder.open.outline:before{content:"\f115"}i.icon.level.up:before{content:"\f148"}i.icon.level.down:before{content:"\f149"}i.icon.file:before{content:"\f15b"}i.icon.file.text:before{content:"\f15c"}i.icon.file.pdf.outline:before{content:"\f1c1"}i.icon.file.word.outline:before{content:"\f1c2"}i.icon.file.excel.outline:before{content:"\f1c3"}i.icon.file.powerpoint.outline:before{content:"\f1c4"}i.icon.file.image.outline:before{content:"\f1c5"}i.icon.file.archive.outline:before{content:"\f1c6"}i.icon.file.audio.outline:before{content:"\f1c7"}i.icon.file.video.outline:before{content:"\f1c8"}i.icon.file.code.outline:before{content:"\f1c9"}i.icon.qrcode:before{content:"\f029"}i.icon.barcode:before{content:"\f02a"}i.icon.rss:before{content:"\f09e"}i.icon.fork:before{content:"\f126"}i.icon.html5:before{content:"\f13b"}i.icon.css3:before{content:"\f13c"}i.icon.rss.square:before{content:"\f143"}i.icon.openid:before{content:"\f19b"}i.icon.database:before{content:"\f1c0"}i.icon.wifi:before{content:"\f1eb"}i.icon.server:before{content:"\f233"}i.icon.usb:before{content:"\f287"}i.icon.bluetooth:before{content:"\f293"}i.icon.bluetooth.alternative:before{content:"\f294"}i.icon.microchip:before{content:"\f2db"}i.icon.heart:before{content:"\f004"}i.icon.star:before{content:"\f005"}i.icon.empty.star:before{content:"\f006"}i.icon.thumbs.outline.up:before{content:"\f087"}i.icon.thumbs.outline.down:before{content:"\f088"}i.icon.star.half:before{content:"\f089"}i.icon.empty.heart:before{content:"\f08a"}i.icon.smile:before{content:"\f118"}i.icon.frown:before{content:"\f119"}i.icon.meh:before{content:"\f11a"}i.icon.star.half.empty:before{content:"\f123"}i.icon.thumbs.up:before{content:"\f164"}i.icon.thumbs.down:before{content:"\f165"}i.icon.music:before{content:"\f001"}i.icon.video.play.outline:before{content:"\f01d"}i.icon.volume.off:before{content:"\f026"}i.icon.volume.down:before{content:"\f027"}i.icon.volume.up:before{content:"\f028"}i.icon.record:before{content:"\f03d"}i.icon.step.backward:before{content:"\f048"}i.icon.fast.backward:before{content:"\f049"}i.icon.backward:before{content:"\f04a"}i.icon.play:before{content:"\f04b"}i.icon.pause:before{content:"\f04c"}i.icon.stop:before{content:"\f04d"}i.icon.forward:before{content:"\f04e"}i.icon.fast.forward:before{content:"\f050"}i.icon.step.forward:before{content:"\f051"}i.icon.eject:before{content:"\f052"}i.icon.unmute:before{content:"\f130"}i.icon.mute:before{content:"\f131"}i.icon.video.play:before{content:"\f144"}i.icon.closed.captioning:before{content:"\f20a"}i.icon.pause.circle:before{content:"\f28b"}i.icon.pause.circle.outline:before{content:"\f28c"}i.icon.stop.circle:before{content:"\f28d"}i.icon.stop.circle.outline:before{content:"\f28e"}i.icon.marker:before{content:"\f041"}i.icon.coffee:before{content:"\f0f4"}i.icon.food:before{content:"\f0f5"}i.icon.building.outline:before{content:"\f0f7"}i.icon.hospital:before{content:"\f0f8"}i.icon.emergency:before{content:"\f0f9"}i.icon.first.aid:before{content:"\f0fa"}i.icon.military:before{content:"\f0fb"}i.icon.h:before{content:"\f0fd"}i.icon.location.arrow:before{content:"\f124"}i.icon.compass:before{content:"\f14e"}i.icon.space.shuttle:before{content:"\f197"}i.icon.university:before{content:"\f19c"}i.icon.building:before{content:"\f1ad"}i.icon.paw:before{content:"\f1b0"}i.icon.spoon:before{content:"\f1b1"}i.icon.car:before{content:"\f1b9"}i.icon.taxi:before{content:"\f1ba"}i.icon.tree:before{content:"\f1bb"}i.icon.bicycle:before{content:"\f206"}i.icon.bus:before{content:"\f207"}i.icon.ship:before{content:"\f21a"}i.icon.motorcycle:before{content:"\f21c"}i.icon.street.view:before{content:"\f21d"}i.icon.hotel:before{content:"\f236"}i.icon.train:before{content:"\f238"}i.icon.subway:before{content:"\f239"}i.icon.map.pin:before{content:"\f276"}i.icon.map.signs:before{content:"\f277"}i.icon.map.outline:before{content:"\f278"}i.icon.map:before{content:"\f279"}i.icon.table:before{content:"\f0ce"}i.icon.columns:before{content:"\f0db"}i.icon.sort:before{content:"\f0dc"}i.icon.sort.descending:before{content:"\f0dd"}i.icon.sort.ascending:before{content:"\f0de"}i.icon.sort.alphabet.ascending:before{content:"\f15d"}i.icon.sort.alphabet.descending:before{content:"\f15e"}i.icon.sort.content.ascending:before{content:"\f160"}i.icon.sort.content.descending:before{content:"\f161"}i.icon.sort.numeric.ascending:before{content:"\f162"}i.icon.sort.numeric.descending:before{content:"\f163"}i.icon.font:before{content:"\f031"}i.icon.bold:before{content:"\f032"}i.icon.italic:before{content:"\f033"}i.icon.text.height:before{content:"\f034"}i.icon.text.width:before{content:"\f035"}i.icon.align.left:before{content:"\f036"}i.icon.align.center:before{content:"\f037"}i.icon.align.right:before{content:"\f038"}i.icon.align.justify:before{content:"\f039"}i.icon.list:before{content:"\f03a"}i.icon.outdent:before{content:"\f03b"}i.icon.indent:before{content:"\f03c"}i.icon.linkify:before{content:"\f0c1"}i.icon.cut:before{content:"\f0c4"}i.icon.copy:before{content:"\f0c5"}i.icon.attach:before{content:"\f0c6"}i.icon.save:before{content:"\f0c7"}i.icon.content:before{content:"\f0c9"}i.icon.unordered.list:before{content:"\f0ca"}i.icon.ordered.list:before{content:"\f0cb"}i.icon.strikethrough:before{content:"\f0cc"}i.icon.underline:before{content:"\f0cd"}i.icon.paste:before{content:"\f0ea"}i.icon.unlinkify:before{content:"\f127"}i.icon.superscript:before{content:"\f12b"}i.icon.subscript:before{content:"\f12c"}i.icon.header:before{content:"\f1dc"}i.icon.paragraph:before{content:"\f1dd"}i.icon.text.cursor:before{content:"\f246"}i.icon.euro:before{content:"\f153"}i.icon.pound:before{content:"\f154"}i.icon.dollar:before{content:"\f155"}i.icon.rupee:before{content:"\f156"}i.icon.yen:before{content:"\f157"}i.icon.ruble:before{content:"\f158"}i.icon.won:before{content:"\f159"}i.icon.bitcoin:before{content:"\f15a"}i.icon.lira:before{content:"\f195"}i.icon.shekel:before{content:"\f20b"}i.icon.paypal:before{content:"\f1ed"}i.icon.google.wallet:before{content:"\f1ee"}i.icon.visa:before{content:"\f1f0"}i.icon.mastercard:before{content:"\f1f1"}i.icon.discover:before{content:"\f1f2"}i.icon.american.express:before{content:"\f1f3"}i.icon.paypal.card:before{content:"\f1f4"}i.icon.stripe:before{content:"\f1f5"}i.icon.japan.credit.bureau:before{content:"\f24b"}i.icon.diners.club:before{content:"\f24c"}i.icon.credit.card.alternative:before{content:"\f283"}i.icon.twitter.square:before{content:"\f081"}i.icon.facebook.square:before{content:"\f082"}i.icon.linkedin.square:before{content:"\f08c"}i.icon.github.square:before{content:"\f092"}i.icon.twitter:before{content:"\f099"}i.icon.facebook.f:before{content:"\f09a"}i.icon.github:before{content:"\f09b"}i.icon.pinterest:before{content:"\f0d2"}i.icon.pinterest.square:before{content:"\f0d3"}i.icon.google.plus.square:before{content:"\f0d4"}i.icon.google.plus:before{content:"\f0d5"}i.icon.linkedin:before{content:"\f0e1"}i.icon.github.alternate:before{content:"\f113"}i.icon.maxcdn:before{content:"\f136"}i.icon.youtube.square:before{content:"\f166"}i.icon.youtube:before{content:"\f167"}i.icon.xing:before{content:"\f168"}i.icon.xing.square:before{content:"\f169"}i.icon.youtube.play:before{content:"\f16a"}i.icon.dropbox:before{content:"\f16b"}i.icon.stack.overflow:before{content:"\f16c"}i.icon.instagram:before{content:"\f16d"}i.icon.flickr:before{content:"\f16e"}i.icon.adn:before{content:"\f170"}i.icon.bitbucket:before{content:"\f171"}i.icon.bitbucket.square:before{content:"\f172"}i.icon.tumblr:before{content:"\f173"}i.icon.tumblr.square:before{content:"\f174"}i.icon.apple:before{content:"\f179"}i.icon.windows:before{content:"\f17a"}i.icon.android:before{content:"\f17b"}i.icon.linux:before{content:"\f17c"}i.icon.dribble:before{content:"\f17d"}i.icon.skype:before{content:"\f17e"}i.icon.foursquare:before{content:"\f180"}i.icon.trello:before{content:"\f181"}i.icon.gittip:before{content:"\f184"}i.icon.vk:before{content:"\f189"}i.icon.weibo:before{content:"\f18a"}i.icon.renren:before{content:"\f18b"}i.icon.pagelines:before{content:"\f18c"}i.icon.stack.exchange:before{content:"\f18d"}i.icon.vimeo.square:before{content:"\f194"}i.icon.slack:before{content:"\f198"}i.icon.wordpress:before{content:"\f19a"}i.icon.yahoo:before{content:"\f19e"}i.icon.google:before{content:"\f1a0"}i.icon.reddit:before{content:"\f1a1"}i.icon.reddit.square:before{content:"\f1a2"}i.icon.stumbleupon.circle:before{content:"\f1a3"}i.icon.stumbleupon:before{content:"\f1a4"}i.icon.delicious:before{content:"\f1a5"}i.icon.digg:before{content:"\f1a6"}i.icon.pied.piper:before{content:"\f1a7"}i.icon.pied.piper.alternate:before{content:"\f1a8"}i.icon.drupal:before{content:"\f1a9"}i.icon.joomla:before{content:"\f1aa"}i.icon.behance:before{content:"\f1b4"}i.icon.behance.square:before{content:"\f1b5"}i.icon.steam:before{content:"\f1b6"}i.icon.steam.square:before{content:"\f1b7"}i.icon.spotify:before{content:"\f1bc"}i.icon.deviantart:before{content:"\f1bd"}i.icon.soundcloud:before{content:"\f1be"}i.icon.vine:before{content:"\f1ca"}i.icon.codepen:before{content:"\f1cb"}i.icon.jsfiddle:before{content:"\f1cc"}i.icon.rebel:before{content:"\f1d0"}i.icon.empire:before{content:"\f1d1"}i.icon.git.square:before{content:"\f1d2"}i.icon.git:before{content:"\f1d3"}i.icon.hacker.news:before{content:"\f1d4"}i.icon.tencent.weibo:before{content:"\f1d5"}i.icon.qq:before{content:"\f1d6"}i.icon.wechat:before{content:"\f1d7"}i.icon.slideshare:before{content:"\f1e7"}i.icon.twitch:before{content:"\f1e8"}i.icon.yelp:before{content:"\f1e9"}i.icon.lastfm:before{content:"\f202"}i.icon.lastfm.square:before{content:"\f203"}i.icon.ioxhost:before{content:"\f208"}i.icon.angellist:before{content:"\f209"}i.icon.meanpath:before{content:"\f20c"}i.icon.buysellads:before{content:"\f20d"}i.icon.connectdevelop:before{content:"\f20e"}i.icon.dashcube:before{content:"\f210"}i.icon.forumbee:before{content:"\f211"}i.icon.leanpub:before{content:"\f212"}i.icon.sellsy:before{content:"\f213"}i.icon.shirtsinbulk:before{content:"\f214"}i.icon.simplybuilt:before{content:"\f215"}i.icon.skyatlas:before{content:"\f216"}i.icon.facebook:before{content:"\f230"}i.icon.pinterest:before{content:"\f231"}i.icon.whatsapp:before{content:"\f232"}i.icon.viacoin:before{content:"\f237"}i.icon.medium:before{content:"\f23a"}i.icon.y.combinator:before{content:"\f23b"}i.icon.optinmonster:before{content:"\f23c"}i.icon.opencart:before{content:"\f23d"}i.icon.expeditedssl:before{content:"\f23e"}i.icon.gg:before{content:"\f260"}i.icon.gg.circle:before{content:"\f261"}i.icon.tripadvisor:before{content:"\f262"}i.icon.odnoklassniki:before{content:"\f263"}i.icon.odnoklassniki.square:before{content:"\f264"}i.icon.pocket:before{content:"\f265"}i.icon.wikipedia:before{content:"\f266"}i.icon.safari:before{content:"\f267"}i.icon.chrome:before{content:"\f268"}i.icon.firefox:before{content:"\f269"}i.icon.opera:before{content:"\f26a"}i.icon.internet.explorer:before{content:"\f26b"}i.icon.contao:before{content:"\f26d"}i.icon.\35 00px:before{content:"\f26e"}i.icon.amazon:before{content:"\f270"}i.icon.houzz:before{content:"\f27c"}i.icon.vimeo:before{content:"\f27d"}i.icon.black.tie:before{content:"\f27e"}i.icon.fonticons:before{content:"\f280"}i.icon.reddit.alien:before{content:"\f281"}i.icon.microsoft.edge:before{content:"\f282"}i.icon.codiepie:before{content:"\f284"}i.icon.modx:before{content:"\f285"}i.icon.fort.awesome:before{content:"\f286"}i.icon.product.hunt:before{content:"\f288"}i.icon.mixcloud:before{content:"\f289"}i.icon.scribd:before{content:"\f28a"}i.icon.gitlab:before{content:"\f296"}i.icon.wpbeginner:before{content:"\f297"}i.icon.wpforms:before{content:"\f298"}i.icon.envira.gallery:before{content:"\f299"}i.icon.glide:before{content:"\f2a5"}i.icon.glide.g:before{content:"\f2a6"}i.icon.viadeo:before{content:"\f2a9"}i.icon.viadeo.square:before{content:"\f2aa"}i.icon.snapchat:before{content:"\f2ab"}i.icon.snapchat.ghost:before{content:"\f2ac"}i.icon.snapchat.square:before{content:"\f2ad"}i.icon.pied.piper.hat:before{content:"\f2ae"}i.icon.first.order:before{content:"\f2b0"}i.icon.yoast:before{content:"\f2b1"}i.icon.themeisle:before{content:"\f2b2"}i.icon.google.plus.circle:before{content:"\f2b3"}i.icon.font.awesome:before{content:"\f2b4"}i.icon.linode:before{content:"\f2b8"}i.icon.quora:before{content:"\f2c4"}i.icon.free.code.camp:before{content:"\f2c5"}i.icon.telegram:before{content:"\f2c6"}i.icon.bandcamp:before{content:"\f2d5"}i.icon.grav:before{content:"\f2d6"}i.icon.etsy:before{content:"\f2d7"}i.icon.imdb:before{content:"\f2d8"}i.icon.ravelry:before{content:"\f2d9"}i.icon.eercast:before{content:"\f2da"}i.icon.superpowers:before{content:"\f2dd"}i.icon.wpexplorer:before{content:"\f2de"}i.icon.meetup:before{content:"\f2e0"}i.icon.like:before{content:"\f004"}i.icon.favorite:before{content:"\f005"}i.icon.video:before{content:"\f008"}i.icon.check:before{content:"\f00c"}i.icon.close:before{content:"\f00d"}i.icon.cancel:before{content:"\f00d"}i.icon.delete:before{content:"\f00d"}i.icon.x:before{content:"\f00d"}i.icon.zoom.in:before{content:"\f00e"}i.icon.magnify:before{content:"\f00e"}i.icon.shutdown:before{content:"\f011"}i.icon.clock:before{content:"\f017"}i.icon.time:before{content:"\f017"}i.icon.play.circle.outline:before{content:"\f01d"}i.icon.headphone:before{content:"\f025"}i.icon.camera:before{content:"\f030"}i.icon.video.camera:before{content:"\f03d"}i.icon.picture:before{content:"\f03e"}i.icon.pencil:before{content:"\f040"}i.icon.compose:before{content:"\f040"}i.icon.point:before{content:"\f041"}i.icon.tint:before{content:"\f043"}i.icon.signup:before{content:"\f044"}i.icon.plus.circle:before{content:"\f055"}i.icon.question.circle:before{content:"\f059"}i.icon.dont:before{content:"\f05e"}i.icon.minimize:before{content:"\f066"}i.icon.add:before{content:"\f067"}i.icon.exclamation.circle:before{content:"\f06a"}i.icon.attention:before{content:"\f06a"}i.icon.eye:before{content:"\f06e"}i.icon.exclamation.triangle:before{content:"\f071"}i.icon.shuffle:before{content:"\f074"}i.icon.chat:before{content:"\f075"}i.icon.cart:before{content:"\f07a"}i.icon.shopping.cart:before{content:"\f07a"}i.icon.bar.graph:before{content:"\f080"}i.icon.key:before{content:"\f084"}i.icon.cogs:before{content:"\f085"}i.icon.discussions:before{content:"\f086"}i.icon.like.outline:before{content:"\f087"}i.icon.dislike.outline:before{content:"\f088"}i.icon.heart.outline:before{content:"\f08a"}i.icon.log.out:before{content:"\f08b"}i.icon.thumb.tack:before{content:"\f08d"}i.icon.winner:before{content:"\f091"}i.icon.phone:before{content:"\f095"}i.icon.bookmark.outline:before{content:"\f097"}i.icon.phone.square:before{content:"\f098"}i.icon.credit.card:before{content:"\f09d"}i.icon.hdd.outline:before{content:"\f0a0"}i.icon.bullhorn:before{content:"\f0a1"}i.icon.bell.outline:before{content:"\f0a2"}i.icon.hand.outline.right:before{content:"\f0a4"}i.icon.hand.outline.left:before{content:"\f0a5"}i.icon.hand.outline.up:before{content:"\f0a6"}i.icon.hand.outline.down:before{content:"\f0a7"}i.icon.globe:before{content:"\f0ac"}i.icon.wrench:before{content:"\f0ad"}i.icon.briefcase:before{content:"\f0b1"}i.icon.group:before{content:"\f0c0"}i.icon.linkify:before{content:"\f0c1"}i.icon.chain:before{content:"\f0c1"}i.icon.flask:before{content:"\f0c3"}i.icon.sidebar:before{content:"\f0c9"}i.icon.bars:before{content:"\f0c9"}i.icon.list.ul:before{content:"\f0ca"}i.icon.list.ol:before{content:"\f0cb"}i.icon.numbered.list:before{content:"\f0cb"}i.icon.magic:before{content:"\f0d0"}i.icon.truck:before{content:"\f0d1"}i.icon.currency:before{content:"\f0d6"}i.icon.triangle.down:before{content:"\f0d7"}i.icon.dropdown:before{content:"\f0d7"}i.icon.triangle.up:before{content:"\f0d8"}i.icon.triangle.left:before{content:"\f0d9"}i.icon.triangle.right:before{content:"\f0da"}i.icon.envelope:before{content:"\f0e0"}i.icon.conversation:before{content:"\f0e6"}i.icon.rain:before{content:"\f0e9"}i.icon.clipboard:before{content:"\f0ea"}i.icon.lightbulb:before{content:"\f0eb"}i.icon.bell:before{content:"\f0f3"}i.icon.ambulance:before{content:"\f0f9"}i.icon.medkit:before{content:"\f0fa"}i.icon.fighter.jet:before{content:"\f0fb"}i.icon.beer:before{content:"\f0fc"}i.icon.plus.square:before{content:"\f0fe"}i.icon.computer:before{content:"\f108"}i.icon.circle.outline:before{content:"\f10c"}i.icon.gamepad:before{content:"\f11b"}i.icon.star.half.full:before{content:"\f123"}i.icon.broken.chain:before{content:"\f127"}i.icon.question:before{content:"\f128"}i.icon.exclamation:before{content:"\f12a"}i.icon.eraser:before{content:"\f12d"}i.icon.microphone:before{content:"\f130"}i.icon.microphone.slash:before{content:"\f131"}i.icon.shield:before{content:"\f132"}i.icon.target:before{content:"\f140"}i.icon.play.circle:before{content:"\f144"}i.icon.pencil.square:before{content:"\f14b"}i.icon.eur:before{content:"\f153"}i.icon.gbp:before{content:"\f154"}i.icon.usd:before{content:"\f155"}i.icon.inr:before{content:"\f156"}i.icon.cny:before{content:"\f157"}i.icon.rmb:before{content:"\f157"}i.icon.jpy:before{content:"\f157"}i.icon.rouble:before{content:"\f158"}i.icon.rub:before{content:"\f158"}i.icon.krw:before{content:"\f159"}i.icon.btc:before{content:"\f15a"}i.icon.gratipay:before{content:"\f184"}i.icon.zip:before{content:"\f187"}i.icon.dot.circle.outline:before{content:"\f192"}i.icon.try:before{content:"\f195"}i.icon.graduation:before{content:"\f19d"}i.icon.circle.outline:before{content:"\f1db"}i.icon.sliders:before{content:"\f1de"}i.icon.weixin:before{content:"\f1d7"}i.icon.tty:before{content:"\f1e4"}i.icon.teletype:before{content:"\f1e4"}i.icon.binoculars:before{content:"\f1e5"}i.icon.power.cord:before{content:"\f1e6"}i.icon.wi-fi:before{content:"\f1eb"}i.icon.visa.card:before{content:"\f1f0"}i.icon.mastercard.card:before{content:"\f1f1"}i.icon.discover.card:before{content:"\f1f2"}i.icon.amex:before{content:"\f1f3"}i.icon.american.express.card:before{content:"\f1f3"}i.icon.stripe.card:before{content:"\f1f5"}i.icon.bell.slash:before{content:"\f1f6"}i.icon.bell.slash.outline:before{content:"\f1f7"}i.icon.area.graph:before{content:"\f1fe"}i.icon.pie.graph:before{content:"\f200"}i.icon.line.graph:before{content:"\f201"}i.icon.cc:before{content:"\f20a"}i.icon.sheqel:before{content:"\f20b"}i.icon.ils:before{content:"\f20b"}i.icon.plus.cart:before{content:"\f217"}i.icon.arrow.down.cart:before{content:"\f218"}i.icon.detective:before{content:"\f21b"}i.icon.venus:before{content:"\f221"}i.icon.mars:before{content:"\f222"}i.icon.mercury:before{content:"\f223"}i.icon.intersex:before{content:"\f224"}i.icon.venus.double:before{content:"\f226"}i.icon.female.homosexual:before{content:"\f226"}i.icon.mars.double:before{content:"\f227"}i.icon.male.homosexual:before{content:"\f227"}i.icon.venus.mars:before{content:"\f228"}i.icon.mars.stroke:before{content:"\f229"}i.icon.mars.alternate:before{content:"\f229"}i.icon.mars.vertical:before{content:"\f22a"}i.icon.mars.stroke.vertical:before{content:"\f22a"}i.icon.mars.horizontal:before{content:"\f22b"}i.icon.mars.stroke.horizontal:before{content:"\f22b"}i.icon.asexual:before{content:"\f22d"}i.icon.facebook.official:before{content:"\f230"}i.icon.user.plus:before{content:"\f234"}i.icon.user.times:before{content:"\f235"}i.icon.user.close:before{content:"\f235"}i.icon.user.cancel:before{content:"\f235"}i.icon.user.delete:before{content:"\f235"}i.icon.user.x:before{content:"\f235"}i.icon.bed:before{content:"\f236"}i.icon.yc:before{content:"\f23b"}i.icon.ycombinator:before{content:"\f23b"}i.icon.battery.four:before{content:"\f240"}i.icon.battery.three:before{content:"\f241"}i.icon.battery.three.quarters:before{content:"\f241"}i.icon.battery.two:before{content:"\f242"}i.icon.battery.half:before{content:"\f242"}i.icon.battery.one:before{content:"\f243"}i.icon.battery.quarter:before{content:"\f243"}i.icon.battery.zero:before{content:"\f244"}i.icon.i.cursor:before{content:"\f246"}i.icon.jcb:before{content:"\f24b"}i.icon.japan.credit.bureau.card:before{content:"\f24b"}i.icon.diners.club.card:before{content:"\f24c"}i.icon.balance:before{content:"\f24e"}i.icon.hourglass.outline:before{content:"\f250"}i.icon.hourglass.zero:before{content:"\f250"}i.icon.hourglass.one:before{content:"\f251"}i.icon.hourglass.two:before{content:"\f252"}i.icon.hourglass.three:before{content:"\f253"}i.icon.hourglass.four:before{content:"\f254"}i.icon.grab:before{content:"\f255"}i.icon.hand.victory:before{content:"\f25b"}i.icon.tm:before{content:"\f25c"}i.icon.r.circle:before{content:"\f25d"}i.icon.television:before{content:"\f26c"}i.icon.five.hundred.pixels:before{content:"\f26e"}i.icon.calendar.plus:before{content:"\f271"}i.icon.calendar.minus:before{content:"\f272"}i.icon.calendar.times:before{content:"\f273"}i.icon.calendar.check:before{content:"\f274"}i.icon.factory:before{content:"\f275"}i.icon.commenting:before{content:"\f27a"}i.icon.commenting.outline:before{content:"\f27b"}i.icon.edge:before{content:"\f282"}i.icon.ms.edge:before{content:"\f282"}i.icon.wordpress.beginner:before{content:"\f297"}i.icon.wordpress.forms:before{content:"\f298"}i.icon.envira:before{content:"\f299"}i.icon.question.circle.outline:before{content:"\f29c"}i.icon.assistive.listening.devices:before{content:"\f2a2"}i.icon.als:before{content:"\f2a2"}i.icon.ald:before{content:"\f2a2"}i.icon.asl.interpreting:before{content:"\f2a3"}i.icon.deaf:before{content:"\f2a4"}i.icon.american.sign.language.interpreting:before{content:"\f2a3"}i.icon.hard.of.hearing:before{content:"\f2a4"}i.icon.signing:before{content:"\f2a7"}i.icon.new.pied.piper:before{content:"\f2ae"}i.icon.theme.isle:before{content:"\f2b2"}i.icon.google.plus.official:before{content:"\f2b3"}i.icon.fa:before{content:"\f2b4"}i.icon.vcard:before{content:"\f2bb"}i.icon.vcard.outline:before{content:"\f2bc"}i.icon.drivers.license:before{content:"\f2c2"}i.icon.drivers.license.outline:before{content:"\f2c3"}i.icon.thermometer:before{content:"\f2c7"}i.icon.s15:before{content:"\f2cd"}i.icon.bath:before{content:"\f2cd"}i.icon.times.rectangle:before{content:"\f2d3"}i.icon.times.rectangle.outline:before{content:"\f2d4"}/*! + * # Semantic UI 2.2.10 - Image + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.image{position:relative;display:inline-block;vertical-align:middle;max-width:100%;background-color:transparent}img.ui.image{display:block}.ui.image img,.ui.image svg{display:block;max-width:100%;height:auto}.ui.hidden.image,.ui.hidden.images{display:none}.ui.hidden.transition.image,.ui.hidden.transition.images{display:block;visibility:hidden}.ui.disabled.image,.ui.disabled.images{cursor:default;opacity:.45}.ui.inline.image,.ui.inline.image img,.ui.inline.image svg{display:inline-block}.ui.top.aligned.image,.ui.top.aligned.image img,.ui.top.aligned.image svg,.ui.top.aligned.images .image{display:inline-block;vertical-align:top}.ui.middle.aligned.image,.ui.middle.aligned.image img,.ui.middle.aligned.image svg,.ui.middle.aligned.images .image{display:inline-block;vertical-align:middle}.ui.bottom.aligned.image,.ui.bottom.aligned.image img,.ui.bottom.aligned.image svg,.ui.bottom.aligned.images .image{display:inline-block;vertical-align:bottom}.ui.rounded.image,.ui.rounded.image>*,.ui.rounded.images .image,.ui.rounded.images .image>*{border-radius:.3125em}.ui.bordered.image img,.ui.bordered.image svg,.ui.bordered.images .image,.ui.bordered.images img,.ui.bordered.images svg,img.ui.bordered.image{border:1px solid rgba(0,0,0,.1)}.ui.circular.image,.ui.circular.images{overflow:hidden}.ui.circular.image,.ui.circular.image>*,.ui.circular.images .image,.ui.circular.images .image>*{border-radius:500rem}.ui.fluid.image,.ui.fluid.image img,.ui.fluid.image svg,.ui.fluid.images,.ui.fluid.images img,.ui.fluid.images svg{display:block;width:100%;height:auto}.ui.avatar.image,.ui.avatar.image img,.ui.avatar.image svg,.ui.avatar.images .image,.ui.avatar.images img,.ui.avatar.images svg{margin-right:.25em;display:inline-block;width:2em;height:2em;border-radius:500rem}.ui.spaced.image{display:inline-block!important;margin-left:.5em;margin-right:.5em}.ui[class*="left spaced"].image{margin-left:.5em;margin-right:0}.ui[class*="right spaced"].image{margin-left:0;margin-right:.5em}.ui.floated.image,.ui.floated.images{float:left;margin-right:1em;margin-bottom:1em}.ui.right.floated.image,.ui.right.floated.images{float:right;margin-right:0;margin-bottom:1em;margin-left:1em}.ui.floated.image:last-child,.ui.floated.images:last-child{margin-bottom:0}.ui.centered.image,.ui.centered.images{margin-left:auto;margin-right:auto}.ui.mini.image,.ui.mini.images .image,.ui.mini.images img,.ui.mini.images svg{width:35px;height:auto;font-size:.78571429rem}.ui.tiny.image,.ui.tiny.images .image,.ui.tiny.images img,.ui.tiny.images svg{width:80px;height:auto;font-size:.85714286rem}.ui.small.image,.ui.small.images .image,.ui.small.images img,.ui.small.images svg{width:150px;height:auto;font-size:.92857143rem}.ui.medium.image,.ui.medium.images .image,.ui.medium.images img,.ui.medium.images svg{width:300px;height:auto;font-size:1rem}.ui.large.image,.ui.large.images .image,.ui.large.images img,.ui.large.images svg{width:450px;height:auto;font-size:1.14285714rem}.ui.big.image,.ui.big.images .image,.ui.big.images img,.ui.big.images svg{width:600px;height:auto;font-size:1.28571429rem}.ui.huge.image,.ui.huge.images .image,.ui.huge.images img,.ui.huge.images svg{width:800px;height:auto;font-size:1.42857143rem}.ui.massive.image,.ui.massive.images .image,.ui.massive.images img,.ui.massive.images svg{width:960px;height:auto;font-size:1.71428571rem}.ui.images{font-size:0;margin:0 -.25rem 0}.ui.images .image,.ui.images img,.ui.images svg{display:inline-block;margin:0 .25rem .5rem}/*! + * # Semantic UI 2.2.10 - Input + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.input{position:relative;font-weight:400;font-style:normal;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;color:rgba(0,0,0,.87)}.ui.input input{margin:0;max-width:100%;-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;outline:0;-webkit-tap-highlight-color:rgba(255,255,255,0);text-align:left;line-height:1.21428571em;font-family:HelveticaNeueLTStd-Lt,Helvetica,Arial,sans-serif;padding:.67857143em 1em;background:#fff;border:1px solid rgba(34,36,38,.15);color:rgba(0,0,0,.87);border-radius:.28571429rem;-webkit-transition:box-shadow .1s ease,border-color .1s ease;transition:box-shadow .1s ease,border-color .1s ease;box-shadow:none}.ui.input input::-webkit-input-placeholder{color:rgba(191,191,191,.87)}.ui.input input::-moz-placeholder{color:rgba(191,191,191,.87)}.ui.input input:-ms-input-placeholder{color:rgba(191,191,191,.87)}.ui.disabled.input,.ui.input input[disabled]{opacity:.45}.ui.disabled.input input,.ui.input input[disabled]{pointer-events:none}.ui.input input:active,.ui.input.down input{border-color:rgba(0,0,0,.3);background:#fafafa;color:rgba(0,0,0,.87);box-shadow:none}.ui.loading.loading.input>i.icon:before{position:absolute;content:'';top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.loading.loading.input>i.icon:after{position:absolute;content:'';top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;-webkit-animation:button-spin .6s linear;animation:button-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border-color:#767676 transparent transparent;border-style:solid;border-width:.2em;box-shadow:0 0 0 1px transparent}.ui.input input:focus,.ui.input.focus input{border-color:#85b7d9;background:#fff;color:rgba(0,0,0,.8);box-shadow:none}.ui.input input:focus::-webkit-input-placeholder,.ui.input.focus input::-webkit-input-placeholder{color:rgba(115,115,115,.87)}.ui.input input:focus::-moz-placeholder,.ui.input.focus input::-moz-placeholder{color:rgba(115,115,115,.87)}.ui.input input:focus:-ms-input-placeholder,.ui.input.focus input:-ms-input-placeholder{color:rgba(115,115,115,.87)}.ui.input.error input{background-color:#fff6f6;border-color:#e0b4b4;color:#9f3a38;box-shadow:none}.ui.input.error input::-webkit-input-placeholder{color:#e7bdbc}.ui.input.error input::-moz-placeholder{color:#e7bdbc}.ui.input.error input:-ms-input-placeholder{color:#e7bdbc!important}.ui.input.error input:focus::-webkit-input-placeholder{color:#da9796}.ui.input.error input:focus::-moz-placeholder{color:#da9796}.ui.input.error input:focus:-ms-input-placeholder{color:#da9796!important}.ui.transparent.input input{border-color:transparent!important;background-color:transparent!important;padding:0!important;box-shadow:none!important}.ui.transparent.icon.input>i.icon{width:1.1em}.ui.transparent.icon.input>input{padding-left:0!important;padding-right:2em!important}.ui.transparent[class*="left icon"].input>input{padding-left:2em!important;padding-right:0!important}.ui.transparent.inverted.input{color:#fff}.ui.transparent.inverted.input input{color:inherit}.ui.transparent.inverted.input input::-webkit-input-placeholder{color:rgba(255,255,255,.5)}.ui.transparent.inverted.input input::-moz-placeholder{color:rgba(255,255,255,.5)}.ui.transparent.inverted.input input:-ms-input-placeholder{color:rgba(255,255,255,.5)}.ui.icon.input>i.icon{cursor:default;position:absolute;line-height:1;text-align:center;top:0;right:0;margin:0;height:100%;width:2.67142857em;opacity:.5;border-radius:0 .28571429rem .28571429rem 0;-webkit-transition:opacity .3s ease;transition:opacity .3s ease}.ui.icon.input>i.icon:not(.link){pointer-events:none}.ui.icon.input input{padding-right:2.67142857em!important}.ui.icon.input>i.icon:after,.ui.icon.input>i.icon:before{left:0;position:absolute;text-align:center;top:50%;width:100%;margin-top:-.5em}.ui.icon.input>i.link.icon{cursor:pointer}.ui.icon.input>i.circular.icon{top:.35em;right:.5em}.ui[class*="left icon"].input>i.icon{right:auto;left:1px;border-radius:.28571429rem 0 0 .28571429rem}.ui[class*="left icon"].input>i.circular.icon{right:auto;left:.5em}.ui[class*="left icon"].input>input{padding-left:2.67142857em!important;padding-right:1em!important}.ui.icon.input>input:focus~i.icon{opacity:1}.ui.labeled.input>.label{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;margin:0;font-size:1em}.ui.labeled.input>.label:not(.corner){padding-top:.78571429em;padding-bottom:.78571429em}.ui.labeled.input:not([class*="corner labeled"]) .label:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.ui.labeled.input:not([class*="corner labeled"]) .label:first-child+input{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:transparent}.ui.labeled.input:not([class*="corner labeled"]) .label:first-child+input:focus{border-left-color:#85b7d9}.ui[class*="right labeled"].input input{border-top-right-radius:0!important;border-bottom-right-radius:0!important;border-right-color:transparent!important}.ui[class*="right labeled"].input input+.label{border-top-left-radius:0;border-bottom-left-radius:0}.ui[class*="right labeled"].input input:focus{border-right-color:#85b7d9!important}.ui.labeled.input .corner.label{top:1px;right:1px;font-size:.64285714em;border-radius:0 .28571429rem 0 0}.ui[class*="corner labeled"]:not([class*="left corner labeled"]).labeled.input input{padding-right:2.5em!important}.ui[class*="corner labeled"].icon.input:not([class*="left corner labeled"])>input{padding-right:3.25em!important}.ui[class*="corner labeled"].icon.input:not([class*="left corner labeled"])>.icon{margin-right:1.25em}.ui[class*="left corner labeled"].labeled.input input{padding-left:2.5em!important}.ui[class*="left corner labeled"].icon.input>input{padding-left:3.25em!important}.ui[class*="left corner labeled"].icon.input>.icon{margin-left:1.25em}.ui.input>.ui.corner.label{top:1px;right:1px}.ui.input>.ui.left.corner.label{right:auto;left:1px}.ui.action.input>.button,.ui.action.input>.buttons{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto}.ui.action.input>.button,.ui.action.input>.buttons>.button{padding-top:.78571429em;padding-bottom:.78571429em;margin:0}.ui.action.input:not([class*="left action"])>input{border-top-right-radius:0!important;border-bottom-right-radius:0!important;border-right-color:transparent!important}.ui.action.input:not([class*="left action"])>.button:not(:first-child),.ui.action.input:not([class*="left action"])>.buttons:not(:first-child)>.button,.ui.action.input:not([class*="left action"])>.dropdown:not(:first-child){border-radius:0}.ui.action.input:not([class*="left action"])>.button:last-child,.ui.action.input:not([class*="left action"])>.buttons:last-child>.button,.ui.action.input:not([class*="left action"])>.dropdown:last-child{border-radius:0 .28571429rem .28571429rem 0}.ui.action.input:not([class*="left action"]) input:focus{border-right-color:#85b7d9!important}.ui[class*="left action"].input>input{border-top-left-radius:0!important;border-bottom-left-radius:0!important;border-left-color:transparent!important}.ui[class*="left action"].input>.button,.ui[class*="left action"].input>.buttons>.button,.ui[class*="left action"].input>.dropdown{border-radius:0}.ui[class*="left action"].input>.button:first-child,.ui[class*="left action"].input>.buttons:first-child>.button,.ui[class*="left action"].input>.dropdown:first-child{border-radius:.28571429rem 0 0 .28571429rem}.ui[class*="left action"].input>input:focus{border-left-color:#85b7d9!important}.ui.inverted.input input{border:none}.ui.fluid.input{display:-webkit-box;display:-ms-flexbox;display:flex}.ui.fluid.input>input{width:0!important}.ui.mini.input{font-size:.78571429em}.ui.small.input{font-size:.92857143em}.ui.input{font-size:1em}.ui.large.input{font-size:1.14285714em}.ui.big.input{font-size:1.28571429em}.ui.huge.input{font-size:1.42857143em}.ui.massive.input{font-size:1.71428571em}/*! + * # Semantic UI 2.2.10 - Label + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.label{display:inline-block;line-height:1;vertical-align:baseline;margin:0 .14285714em;background-color:#e8e8e8;background-image:none;padding:.5833em .833em;color:rgba(0,0,0,.6);text-transform:none;font-weight:700;border:0 solid transparent;border-radius:.28571429rem;-webkit-transition:background .1s ease;transition:background .1s ease}.ui.label:first-child{margin-left:0}.ui.label:last-child{margin-right:0}a.ui.label{cursor:pointer}.ui.label>a{cursor:pointer;color:inherit;opacity:.5;-webkit-transition:.1s opacity ease;transition:.1s opacity ease}.ui.label>a:hover{opacity:1}.ui.label>img{width:auto!important;vertical-align:middle;height:2.1666em!important}.ui.label>.icon{width:auto;margin:0 .75em 0 0}.ui.label>.detail{display:inline-block;vertical-align:top;font-weight:700;margin-left:1em;opacity:.8}.ui.label>.detail .icon{margin:0 .25em 0 0}.ui.label>.close.icon,.ui.label>.delete.icon{cursor:pointer;margin-right:0;margin-left:.5em;font-size:.92857143em;opacity:.5;-webkit-transition:background .1s ease;transition:background .1s ease}.ui.label>.delete.icon:hover{opacity:1}.ui.labels>.label{margin:0 .5em .5em 0}.ui.header>.ui.label{margin-top:-.29165em}.ui.attached.segment>.ui.top.left.attached.label,.ui.bottom.attached.segment>.ui.top.left.attached.label{border-top-left-radius:0}.ui.attached.segment>.ui.top.right.attached.label,.ui.bottom.attached.segment>.ui.top.right.attached.label{border-top-right-radius:0}.ui.top.attached.segment>.ui.bottom.left.attached.label{border-bottom-left-radius:0}.ui.top.attached.segment>.ui.bottom.right.attached.label{border-bottom-right-radius:0}.ui.top.attached.label+[class*="right floated"]+*,.ui.top.attached.label:first-child+:not(.attached){margin-top:2rem!important}.ui.bottom.attached.label:first-child~:last-child:not(.attached){margin-top:0;margin-bottom:2rem!important}.ui.image.label{width:auto!important;margin-top:0;margin-bottom:0;max-width:9999px;vertical-align:baseline;text-transform:none;background:#e8e8e8;padding:.5833em .833em .5833em .5em;border-radius:.28571429rem;box-shadow:none}.ui.image.label img{display:inline-block;vertical-align:top;height:2.1666em;margin:-.5833em .5em -.5833em -.5em;border-radius:.28571429rem 0 0 .28571429rem}.ui.image.label .detail{background:rgba(0,0,0,.1);margin:-.5833em -.833em -.5833em .5em;padding:.5833em .833em;border-radius:0 .28571429rem .28571429rem 0}.ui.tag.label,.ui.tag.labels .label{margin-left:1em;position:relative;padding-left:1.5em;padding-right:1.5em;border-radius:0 .28571429rem .28571429rem 0;-webkit-transition:none;transition:none}.ui.tag.label:before,.ui.tag.labels .label:before{position:absolute;-webkit-transform:translateY(-50%) translateX(50%) rotate(-45deg);transform:translateY(-50%) translateX(50%) rotate(-45deg);top:50%;right:100%;content:'';background-color:inherit;background-image:none;width:1.56em;height:1.56em;-webkit-transition:none;transition:none}.ui.tag.label:after,.ui.tag.labels .label:after{position:absolute;content:'';top:50%;left:-.25em;margin-top:-.25em;background-color:#fff!important;width:.5em;height:.5em;box-shadow:0 -1px 1px 0 rgba(0,0,0,.3);border-radius:500rem}.ui.corner.label{position:absolute;top:0;right:0;margin:0;padding:0;text-align:center;border-color:#e8e8e8;width:4em;height:4em;z-index:1;-webkit-transition:border-color .1s ease;transition:border-color .1s ease}.ui.corner.label{background-color:transparent!important}.ui.corner.label:after{position:absolute;content:"";right:0;top:0;z-index:-1;width:0;height:0;background-color:transparent!important;border-top:0 solid transparent;border-right:4em solid transparent;border-bottom:4em solid transparent;border-left:0 solid transparent;border-right-color:inherit;-webkit-transition:border-color .1s ease;transition:border-color .1s ease}.ui.corner.label .icon{cursor:default;position:relative;top:.64285714em;left:.78571429em;font-size:1.14285714em;margin:0}.ui.left.corner.label,.ui.left.corner.label:after{right:auto;left:0}.ui.left.corner.label:after{border-top:4em solid transparent;border-right:4em solid transparent;border-bottom:0 solid transparent;border-left:0 solid transparent;border-top-color:inherit}.ui.left.corner.label .icon{left:-.78571429em}.ui.segment>.ui.corner.label{top:-1px;right:-1px}.ui.segment>.ui.left.corner.label{right:auto;left:-1px}.ui.ribbon.label{position:relative;margin:0;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;border-radius:0 .28571429rem .28571429rem 0;border-color:rgba(0,0,0,.15)}.ui.ribbon.label:after{position:absolute;content:'';top:100%;left:0;background-color:transparent!important;border-style:solid;border-width:0 1.2em 1.2em 0;border-color:transparent;border-right-color:inherit;width:0;height:0}.ui.ribbon.label{left:calc(-1rem - 1.2em);margin-right:-1.2em;padding-left:calc(1rem + 1.2em);padding-right:1.2em}.ui[class*="right ribbon"].label{left:calc(100% + 1rem + 1.2em);padding-left:1.2em;padding-right:calc(1rem + 1.2em)}.ui[class*="right ribbon"].label{text-align:left;-webkit-transform:translateX(-100%);transform:translateX(-100%);border-radius:.28571429rem 0 0 .28571429rem}.ui[class*="right ribbon"].label:after{left:auto;right:0;border-style:solid;border-width:1.2em 1.2em 0 0;border-color:transparent;border-top-color:inherit}.ui.card .image>.ribbon.label,.ui.image>.ribbon.label{position:absolute;top:1rem}.ui.card .image>.ui.ribbon.label,.ui.image>.ui.ribbon.label{left:calc(.05rem - 1.2em)}.ui.card .image>.ui[class*="right ribbon"].label,.ui.image>.ui[class*="right ribbon"].label{left:calc(100% + -.05rem + 1.2em);padding-left:.833em}.ui.table td>.ui.ribbon.label{left:calc(-.78571429em - 1.2em)}.ui.table td>.ui[class*="right ribbon"].label{left:calc(100% + .78571429em + 1.2em);padding-left:.833em}.ui.attached.label,.ui[class*="top attached"].label{width:100%;position:absolute;margin:0;top:0;left:0;padding:.75em 1em;border-radius:.21428571rem .21428571rem 0 0}.ui[class*="bottom attached"].label{top:auto;bottom:0;border-radius:0 0 .21428571rem .21428571rem}.ui[class*="top left attached"].label{width:auto;margin-top:0!important;border-radius:.21428571rem 0 .28571429rem 0}.ui[class*="top right attached"].label{width:auto;left:auto;right:0;border-radius:0 .21428571rem 0 .28571429rem}.ui[class*="bottom left attached"].label{width:auto;top:auto;bottom:0;border-radius:0 .28571429rem 0 .21428571rem}.ui[class*="bottom right attached"].label{top:auto;bottom:0;left:auto;right:0;width:auto;border-radius:.28571429rem 0 .21428571rem 0}.ui.label.disabled{opacity:.5}a.ui.label:hover,a.ui.labels .label:hover{background-color:#e0e0e0;border-color:#e0e0e0;background-image:none;color:rgba(0,0,0,.8)}.ui.labels a.label:hover:before,a.ui.label:hover:before{color:rgba(0,0,0,.8)}.ui.active.label{background-color:#d0d0d0;border-color:#d0d0d0;background-image:none;color:rgba(0,0,0,.95)}.ui.active.label:before{background-color:#d0d0d0;background-image:none;color:rgba(0,0,0,.95)}a.ui.active.label:hover,a.ui.labels .active.label:hover{background-color:#c8c8c8;border-color:#c8c8c8;background-image:none;color:rgba(0,0,0,.95)}.ui.labels a.active.label:ActiveHover:before,a.ui.active.label:ActiveHover:before{background-color:#c8c8c8;background-image:none;color:rgba(0,0,0,.95)}.ui.label.visible:not(.dropdown),.ui.labels.visible .label{display:inline-block!important}.ui.label.hidden,.ui.labels.hidden .label{display:none!important}.ui.red.label,.ui.red.labels .label{background-color:#db2828!important;border-color:#db2828!important;color:#fff!important}.ui.red.labels .label:hover,a.ui.red.label:hover{background-color:#d01919!important;border-color:#d01919!important;color:#fff!important}.ui.red.corner.label,.ui.red.corner.label:hover{background-color:transparent!important}.ui.red.ribbon.label{border-color:#b21e1e!important}.ui.basic.red.label{background-color:#fff!important;color:#db2828!important;border-color:#db2828!important}.ui.basic.red.labels a.label:hover,a.ui.basic.red.label:hover{background-color:#fff!important;color:#d01919!important;border-color:#d01919!important}.ui.orange.label,.ui.orange.labels .label{background-color:#f2711c!important;border-color:#f2711c!important;color:#fff!important}.ui.orange.labels .label:hover,a.ui.orange.label:hover{background-color:#f26202!important;border-color:#f26202!important;color:#fff!important}.ui.orange.corner.label,.ui.orange.corner.label:hover{background-color:transparent!important}.ui.orange.ribbon.label{border-color:#cf590c!important}.ui.basic.orange.label{background-color:#fff!important;color:#f2711c!important;border-color:#f2711c!important}.ui.basic.orange.labels a.label:hover,a.ui.basic.orange.label:hover{background-color:#fff!important;color:#f26202!important;border-color:#f26202!important}.ui.yellow.label,.ui.yellow.labels .label{background-color:#fbbd08!important;border-color:#fbbd08!important;color:#fff!important}.ui.yellow.labels .label:hover,a.ui.yellow.label:hover{background-color:#eaae00!important;border-color:#eaae00!important;color:#fff!important}.ui.yellow.corner.label,.ui.yellow.corner.label:hover{background-color:transparent!important}.ui.yellow.ribbon.label{border-color:#cd9903!important}.ui.basic.yellow.label{background-color:#fff!important;color:#fbbd08!important;border-color:#fbbd08!important}.ui.basic.yellow.labels a.label:hover,a.ui.basic.yellow.label:hover{background-color:#fff!important;color:#eaae00!important;border-color:#eaae00!important}.ui.olive.label,.ui.olive.labels .label{background-color:#b5cc18!important;border-color:#b5cc18!important;color:#fff!important}.ui.olive.labels .label:hover,a.ui.olive.label:hover{background-color:#a7bd0d!important;border-color:#a7bd0d!important;color:#fff!important}.ui.olive.corner.label,.ui.olive.corner.label:hover{background-color:transparent!important}.ui.olive.ribbon.label{border-color:#198f35!important}.ui.basic.olive.label{background-color:#fff!important;color:#b5cc18!important;border-color:#b5cc18!important}.ui.basic.olive.labels a.label:hover,a.ui.basic.olive.label:hover{background-color:#fff!important;color:#a7bd0d!important;border-color:#a7bd0d!important}.ui.green.label,.ui.green.labels .label{background-color:#21ba45!important;border-color:#21ba45!important;color:#fff!important}.ui.green.labels .label:hover,a.ui.green.label:hover{background-color:#16ab39!important;border-color:#16ab39!important;color:#fff!important}.ui.green.corner.label,.ui.green.corner.label:hover{background-color:transparent!important}.ui.green.ribbon.label{border-color:#198f35!important}.ui.basic.green.label{background-color:#fff!important;color:#21ba45!important;border-color:#21ba45!important}.ui.basic.green.labels a.label:hover,a.ui.basic.green.label:hover{background-color:#fff!important;color:#16ab39!important;border-color:#16ab39!important}.ui.teal.label,.ui.teal.labels .label{background-color:#00b5ad!important;border-color:#00b5ad!important;color:#fff!important}.ui.teal.labels .label:hover,a.ui.teal.label:hover{background-color:#009c95!important;border-color:#009c95!important;color:#fff!important}.ui.teal.corner.label,.ui.teal.corner.label:hover{background-color:transparent!important}.ui.teal.ribbon.label{border-color:#00827c!important}.ui.basic.teal.label{background-color:#fff!important;color:#00b5ad!important;border-color:#00b5ad!important}.ui.basic.teal.labels a.label:hover,a.ui.basic.teal.label:hover{background-color:#fff!important;color:#009c95!important;border-color:#009c95!important}.ui.blue.label,.ui.blue.labels .label{background-color:#2185d0!important;border-color:#2185d0!important;color:#fff!important}.ui.blue.labels .label:hover,a.ui.blue.label:hover{background-color:#1678c2!important;border-color:#1678c2!important;color:#fff!important}.ui.blue.corner.label,.ui.blue.corner.label:hover{background-color:transparent!important}.ui.blue.ribbon.label{border-color:#1a69a4!important}.ui.basic.blue.label{background-color:#fff!important;color:#2185d0!important;border-color:#2185d0!important}.ui.basic.blue.labels a.label:hover,a.ui.basic.blue.label:hover{background-color:#fff!important;color:#1678c2!important;border-color:#1678c2!important}.ui.violet.label,.ui.violet.labels .label{background-color:#6435c9!important;border-color:#6435c9!important;color:#fff!important}.ui.violet.labels .label:hover,a.ui.violet.label:hover{background-color:#5829bb!important;border-color:#5829bb!important;color:#fff!important}.ui.violet.corner.label,.ui.violet.corner.label:hover{background-color:transparent!important}.ui.violet.ribbon.label{border-color:#502aa1!important}.ui.basic.violet.label{background-color:#fff!important;color:#6435c9!important;border-color:#6435c9!important}.ui.basic.violet.labels a.label:hover,a.ui.basic.violet.label:hover{background-color:#fff!important;color:#5829bb!important;border-color:#5829bb!important}.ui.purple.label,.ui.purple.labels .label{background-color:#a333c8!important;border-color:#a333c8!important;color:#fff!important}.ui.purple.labels .label:hover,a.ui.purple.label:hover{background-color:#9627ba!important;border-color:#9627ba!important;color:#fff!important}.ui.purple.corner.label,.ui.purple.corner.label:hover{background-color:transparent!important}.ui.purple.ribbon.label{border-color:#82299f!important}.ui.basic.purple.label{background-color:#fff!important;color:#a333c8!important;border-color:#a333c8!important}.ui.basic.purple.labels a.label:hover,a.ui.basic.purple.label:hover{background-color:#fff!important;color:#9627ba!important;border-color:#9627ba!important}.ui.pink.label,.ui.pink.labels .label{background-color:#e03997!important;border-color:#e03997!important;color:#fff!important}.ui.pink.labels .label:hover,a.ui.pink.label:hover{background-color:#e61a8d!important;border-color:#e61a8d!important;color:#fff!important}.ui.pink.corner.label,.ui.pink.corner.label:hover{background-color:transparent!important}.ui.pink.ribbon.label{border-color:#c71f7e!important}.ui.basic.pink.label{background-color:#fff!important;color:#e03997!important;border-color:#e03997!important}.ui.basic.pink.labels a.label:hover,a.ui.basic.pink.label:hover{background-color:#fff!important;color:#e61a8d!important;border-color:#e61a8d!important}.ui.brown.label,.ui.brown.labels .label{background-color:#a5673f!important;border-color:#a5673f!important;color:#fff!important}.ui.brown.labels .label:hover,a.ui.brown.label:hover{background-color:#975b33!important;border-color:#975b33!important;color:#fff!important}.ui.brown.corner.label,.ui.brown.corner.label:hover{background-color:transparent!important}.ui.brown.ribbon.label{border-color:#805031!important}.ui.basic.brown.label{background-color:#fff!important;color:#a5673f!important;border-color:#a5673f!important}.ui.basic.brown.labels a.label:hover,a.ui.basic.brown.label:hover{background-color:#fff!important;color:#975b33!important;border-color:#975b33!important}.ui.grey.label,.ui.grey.labels .label{background-color:#767676!important;border-color:#767676!important;color:#fff!important}.ui.grey.labels .label:hover,a.ui.grey.label:hover{background-color:#838383!important;border-color:#838383!important;color:#fff!important}.ui.grey.corner.label,.ui.grey.corner.label:hover{background-color:transparent!important}.ui.grey.ribbon.label{border-color:#805031!important}.ui.basic.grey.label{background-color:#fff!important;color:#767676!important;border-color:#767676!important}.ui.basic.grey.labels a.label:hover,a.ui.basic.grey.label:hover{background-color:#fff!important;color:#838383!important;border-color:#838383!important}.ui.black.label,.ui.black.labels .label{background-color:#1b1c1d!important;border-color:#1b1c1d!important;color:#fff!important}.ui.black.labels .label:hover,a.ui.black.label:hover{background-color:#27292a!important;border-color:#27292a!important;color:#fff!important}.ui.black.corner.label,.ui.black.corner.label:hover{background-color:transparent!important}.ui.black.ribbon.label{border-color:#805031!important}.ui.basic.black.label{background-color:#fff!important;color:#1b1c1d!important;border-color:#1b1c1d!important}.ui.basic.black.labels a.label:hover,a.ui.basic.black.label:hover{background-color:#fff!important;color:#27292a!important;border-color:#27292a!important}.ui.basic.label{background:none #fff;border:1px solid rgba(34,36,38,.15);color:rgba(0,0,0,.87);box-shadow:none}a.ui.basic.label:hover{text-decoration:none;background:none #fff;color:#1e70bf;box-shadow:1px solid rgba(34,36,38,.15);box-shadow:none}.ui.basic.pointing.label:before{border-color:inherit}.ui.fluid.labels>.label,.ui.label.fluid{width:100%;box-sizing:border-box}.ui.inverted.label,.ui.inverted.labels .label{color:rgba(255,255,255,.9)!important}.ui.horizontal.label,.ui.horizontal.labels .label{margin:0 .5em 0 0;padding:.4em .833em;min-width:3em;text-align:center}.ui.circular.label,.ui.circular.labels .label{min-width:2em;min-height:2em;padding:.5em!important;line-height:1em;text-align:center;border-radius:500rem}.ui.empty.circular.label,.ui.empty.circular.labels .label{min-width:0;min-height:0;overflow:hidden;width:.5em;height:.5em;vertical-align:baseline}.ui.pointing.label{position:relative}.ui.attached.pointing.label{position:absolute}.ui.pointing.label:before{background-color:inherit;background-image:inherit;border-width:none;border-style:solid;border-color:inherit}.ui.pointing.label:before{position:absolute;content:'';-webkit-transform:rotate(45deg);transform:rotate(45deg);background-image:none;z-index:2;width:.6666em;height:.6666em;-webkit-transition:background .1s ease;transition:background .1s ease}.ui.pointing.label,.ui[class*="pointing above"].label{margin-top:1em}.ui.pointing.label:before,.ui[class*="pointing above"].label:before{border-width:1px 0 0 1px;-webkit-transform:translateX(-50%) translateY(-50%) rotate(45deg);transform:translateX(-50%) translateY(-50%) rotate(45deg);top:0;left:50%}.ui[class*="bottom pointing"].label,.ui[class*="pointing below"].label{margin-top:0;margin-bottom:1em}.ui[class*="bottom pointing"].label:before,.ui[class*="pointing below"].label:before{border-width:0 1px 1px 0;top:auto;right:auto;-webkit-transform:translateX(-50%) translateY(-50%) rotate(45deg);transform:translateX(-50%) translateY(-50%) rotate(45deg);top:100%;left:50%}.ui[class*="left pointing"].label{margin-top:0;margin-left:.6666em}.ui[class*="left pointing"].label:before{border-width:0 0 1px 1px;-webkit-transform:translateX(-50%) translateY(-50%) rotate(45deg);transform:translateX(-50%) translateY(-50%) rotate(45deg);bottom:auto;right:auto;top:50%;left:0}.ui[class*="right pointing"].label{margin-top:0;margin-right:.6666em}.ui[class*="right pointing"].label:before{border-width:1px 1px 0 0;-webkit-transform:translateX(50%) translateY(-50%) rotate(45deg);transform:translateX(50%) translateY(-50%) rotate(45deg);top:50%;right:0;bottom:auto;left:auto}.ui.basic.pointing.label:before,.ui.basic[class*="pointing above"].label:before{margin-top:-1px}.ui.basic[class*="bottom pointing"].label:before,.ui.basic[class*="pointing below"].label:before{bottom:auto;top:100%;margin-top:1px}.ui.basic[class*="left pointing"].label:before{top:50%;left:-1px}.ui.basic[class*="right pointing"].label:before{top:50%;right:-1px}.ui.floating.label{position:absolute;z-index:100;top:-1em;left:100%;margin:0 0 0 -1.5em!important}.ui.mini.label,.ui.mini.labels .label{font-size:.64285714rem}.ui.tiny.label,.ui.tiny.labels .label{font-size:.71428571rem}.ui.small.label,.ui.small.labels .label{font-size:.78571429rem}.ui.label,.ui.labels .label{font-size:.85714286rem}.ui.large.label,.ui.large.labels .label{font-size:1rem}.ui.big.label,.ui.big.labels .label{font-size:1.28571429rem}.ui.huge.label,.ui.huge.labels .label{font-size:1.42857143rem}.ui.massive.label,.ui.massive.labels .label{font-size:1.71428571rem}/*! + * # Semantic UI 2.2.10 - List + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.list,ol.ui.list,ul.ui.list{list-style-type:none;margin:1em 0;padding:0 0}.ui.list:first-child,ol.ui.list:first-child,ul.ui.list:first-child{margin-top:0;padding-top:0}.ui.list:last-child,ol.ui.list:last-child,ul.ui.list:last-child{margin-bottom:0;padding-bottom:0}.ui.list .list>.item,.ui.list>.item,ol.ui.list li,ul.ui.list li{display:list-item;table-layout:fixed;list-style-type:none;list-style-position:outside;padding:.21428571em 0;line-height:1.14285714em}.ui.list>.item:after,.ui.list>.list>.item,ol.ui.list>li:first-child:after,ul.ui.list>li:first-child:after{content:'';display:block;height:0;clear:both;visibility:hidden}.ui.list .list>.item:first-child,.ui.list>.item:first-child,ol.ui.list li:first-child,ul.ui.list li:first-child{padding-top:0}.ui.list .list>.item:last-child,.ui.list>.item:last-child,ol.ui.list li:last-child,ul.ui.list li:last-child{padding-bottom:0}.ui.list .list,ol.ui.list ol,ul.ui.list ul{clear:both;margin:0;padding:.75em 0 .25em .5em}.ui.list .list>.item,ol.ui.list ol li,ul.ui.list ul li{padding:.14285714em 0;line-height:inherit}.ui.list .list>.item>i.icon,.ui.list>.item>i.icon{display:table-cell;margin:0;padding-top:.07142857em;padding-right:.28571429em;vertical-align:top;-webkit-transition:color .1s ease;transition:color .1s ease}.ui.list .list>.item>i.icon:only-child,.ui.list>.item>i.icon:only-child{display:inline-block;vertical-align:top}.ui.list .list>.item>.image,.ui.list>.item>.image{display:table-cell;background-color:transparent;margin:0;vertical-align:top}.ui.list .list>.item>.image:not(:only-child):not(img),.ui.list>.item>.image:not(:only-child):not(img){padding-right:.5em}.ui.list .list>.item>.image img,.ui.list>.item>.image img{vertical-align:top}.ui.list .list>.item>.image:only-child,.ui.list .list>.item>img.image,.ui.list>.item>.image:only-child,.ui.list>.item>img.image{display:inline-block}.ui.list .list>.item>.content,.ui.list>.item>.content{line-height:1.14285714em}.ui.list .list>.item>.icon+.content,.ui.list .list>.item>.image+.content,.ui.list>.item>.icon+.content,.ui.list>.item>.image+.content{display:table-cell;padding:0 0 0 .5em;vertical-align:top}.ui.list .list>.item>img.image+.content,.ui.list>.item>img.image+.content{display:inline-block}.ui.list .list>.item>.content>.list,.ui.list>.item>.content>.list{margin-left:0;padding-left:0}.ui.list .list>.item .header,.ui.list>.item .header{display:block;margin:0;font-family:HelveticaNeueLTStd-Lt,Helvetica,Arial,sans-serif;font-weight:700;color:rgba(0,0,0,.87)}.ui.list .list>.item .description,.ui.list>.item .description{display:block;color:rgba(0,0,0,.7)}.ui.list .list>.item a,.ui.list>.item a{cursor:pointer}.ui.list .list>a.item,.ui.list>a.item{cursor:pointer;color:#4183c4}.ui.list .list>a.item:hover,.ui.list>a.item:hover{color:#1e70bf}.ui.list .list>a.item i.icon,.ui.list>a.item i.icon{color:rgba(0,0,0,.4)}.ui.list .list>.item a.header,.ui.list>.item a.header{cursor:pointer;color:#4183c4!important}.ui.list .list>.item a.header:hover,.ui.list>.item a.header:hover{color:#1e70bf!important}.ui[class*="left floated"].list{float:left}.ui[class*="right floated"].list{float:right}.ui.list .list>.item [class*="left floated"],.ui.list>.item [class*="left floated"]{float:left;margin:0 1em 0 0}.ui.list .list>.item [class*="right floated"],.ui.list>.item [class*="right floated"]{float:right;margin:0 0 0 1em}.ui.menu .ui.list .list>.item,.ui.menu .ui.list>.item{display:list-item;table-layout:fixed;background-color:transparent;list-style-type:none;list-style-position:outside;padding:.21428571em 0;line-height:1.14285714em}.ui.menu .ui.list .list>.item:before,.ui.menu .ui.list>.item:before{border:none;background:0 0}.ui.menu .ui.list .list>.item:first-child,.ui.menu .ui.list>.item:first-child{padding-top:0}.ui.menu .ui.list .list>.item:last-child,.ui.menu .ui.list>.item:last-child{padding-bottom:0}.ui.horizontal.list{display:inline-block;font-size:0}.ui.horizontal.list>.item{display:inline-block;margin-left:1em;font-size:1rem}.ui.horizontal.list:not(.celled)>.item:first-child{margin-left:0!important;padding-left:0!important}.ui.horizontal.list .list{padding-left:0;padding-bottom:0}.ui.horizontal.list .list>.item>.content,.ui.horizontal.list .list>.item>.icon,.ui.horizontal.list .list>.item>.image,.ui.horizontal.list>.item>.content,.ui.horizontal.list>.item>.icon,.ui.horizontal.list>.item>.image{vertical-align:middle}.ui.horizontal.list>.item:first-child,.ui.horizontal.list>.item:last-child{padding-top:.21428571em;padding-bottom:.21428571em}.ui.horizontal.list>.item>i.icon{margin:0;padding:0 .25em 0 0}.ui.horizontal.list>.item>.icon,.ui.horizontal.list>.item>.icon+.content{float:none;display:inline-block}.ui.list .list>.disabled.item,.ui.list>.disabled.item{pointer-events:none;color:rgba(40,40,40,.3)!important}.ui.inverted.list .list>.disabled.item,.ui.inverted.list>.disabled.item{color:rgba(225,225,225,.3)!important}.ui.list .list>a.item:hover .icon,.ui.list>a.item:hover .icon{color:rgba(0,0,0,.87)}.ui.inverted.list .list>a.item>.icon,.ui.inverted.list>a.item>.icon{color:rgba(255,255,255,.7)}.ui.inverted.list .list>.item .header,.ui.inverted.list>.item .header{color:rgba(255,255,255,.9)}.ui.inverted.list .list>.item .description,.ui.inverted.list>.item .description{color:rgba(255,255,255,.7)}.ui.inverted.list .list>a.item,.ui.inverted.list>a.item{cursor:pointer;color:rgba(255,255,255,.9)}.ui.inverted.list .list>a.item:hover,.ui.inverted.list>a.item:hover{color:#1e70bf}.ui.inverted.list .item a:not(.ui){color:rgba(255,255,255,.9)!important}.ui.inverted.list .item a:not(.ui):hover{color:#1e70bf!important}.ui.list [class*="top aligned"],.ui.list[class*="top aligned"] .content,.ui.list[class*="top aligned"] .image{vertical-align:top!important}.ui.list [class*="middle aligned"],.ui.list[class*="middle aligned"] .content,.ui.list[class*="middle aligned"] .image{vertical-align:middle!important}.ui.list [class*="bottom aligned"],.ui.list[class*="bottom aligned"] .content,.ui.list[class*="bottom aligned"] .image{vertical-align:bottom!important}.ui.link.list .item,.ui.link.list .item a:not(.ui),.ui.link.list a.item{color:rgba(0,0,0,.4);-webkit-transition:.1s color ease;transition:.1s color ease}.ui.link.list .item a:not(.ui):hover,.ui.link.list a.item:hover{color:rgba(0,0,0,.8)}.ui.link.list .item a:not(.ui):active,.ui.link.list a.item:active{color:rgba(0,0,0,.9)}.ui.link.list .active.item,.ui.link.list .active.item a:not(.ui){color:rgba(0,0,0,.95)}.ui.inverted.link.list .item,.ui.inverted.link.list .item a:not(.ui),.ui.inverted.link.list a.item{color:rgba(255,255,255,.5)}.ui.inverted.link.list .item a:not(.ui):hover,.ui.inverted.link.list a.item:hover{color:#fff}.ui.inverted.link.list .item a:not(.ui):active,.ui.inverted.link.list a.item:active{color:#fff}.ui.inverted.link.list .active.item a:not(.ui),.ui.inverted.link.list a.active.item{color:#fff}.ui.selection.list .list>.item,.ui.selection.list>.item{cursor:pointer;background:0 0;padding:.5em .5em;margin:0;color:rgba(0,0,0,.4);border-radius:.5em;-webkit-transition:.1s color ease,.1s padding-left ease,.1s background-color ease;transition:.1s color ease,.1s padding-left ease,.1s background-color ease}.ui.selection.list .list>.item:last-child,.ui.selection.list>.item:last-child{margin-bottom:0}.ui.selection.list.list>.item:hover,.ui.selection.list>.item:hover{background:rgba(0,0,0,.03);color:rgba(0,0,0,.8)}.ui.selection.list .list>.item:active,.ui.selection.list>.item:active{background:rgba(0,0,0,.05);color:rgba(0,0,0,.9)}.ui.selection.list .list>.item.active,.ui.selection.list>.item.active{background:rgba(0,0,0,.05);color:rgba(0,0,0,.95)}.ui.inverted.selection.list>.item{background:0 0;color:rgba(255,255,255,.5)}.ui.inverted.selection.list>.item:hover{background:rgba(255,255,255,.02);color:#fff}.ui.inverted.selection.list>.item:active{background:rgba(255,255,255,.08);color:#fff}.ui.inverted.selection.list>.item.active{background:rgba(255,255,255,.08);color:#fff}.ui.celled.selection.list .list>.item,.ui.celled.selection.list>.item,.ui.divided.selection.list .list>.item,.ui.divided.selection.list>.item{border-radius:0}.ui.animated.list>.item{-webkit-transition:.25s color ease .1s,.25s padding-left ease .1s,.25s background-color ease .1s;transition:.25s color ease .1s,.25s padding-left ease .1s,.25s background-color ease .1s}.ui.animated.list:not(.horizontal)>.item:hover{padding-left:1em}.ui.fitted.list:not(.selection) .list>.item,.ui.fitted.list:not(.selection)>.item{padding-left:0;padding-right:0}.ui.fitted.selection.list .list>.item,.ui.fitted.selection.list>.item{margin-left:-.5em;margin-right:-.5em}.ui.bulleted.list,ul.ui.list{margin-left:1.25rem}.ui.bulleted.list .list>.item,.ui.bulleted.list>.item,ul.ui.list li{position:relative}.ui.bulleted.list .list>.item:before,.ui.bulleted.list>.item:before,ul.ui.list li:before{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;position:absolute;top:auto;left:auto;font-weight:400;margin-left:-1.25rem;content:'•';opacity:1;color:inherit;vertical-align:top}.ui.bulleted.list .list>a.item:before,.ui.bulleted.list>a.item:before,ul.ui.list li:before{color:rgba(0,0,0,.87)}.ui.bulleted.list .list,ul.ui.list ul{padding-left:1.25rem}.ui.horizontal.bulleted.list,ul.ui.horizontal.bulleted.list{margin-left:0}.ui.horizontal.bulleted.list>.item,ul.ui.horizontal.bulleted.list li{margin-left:1.75rem}.ui.horizontal.bulleted.list>.item:first-child,ul.ui.horizontal.bulleted.list li:first-child{margin-left:0}.ui.horizontal.bulleted.list>.item::before,ul.ui.horizontal.bulleted.list li::before{color:rgba(0,0,0,.87)}.ui.horizontal.bulleted.list>.item:first-child::before,ul.ui.horizontal.bulleted.list li:first-child::before{display:none}.ui.ordered.list,.ui.ordered.list .list,ol.ui.list,ol.ui.list ol{counter-reset:ordered;margin-left:1.25rem;list-style-type:none}.ui.ordered.list .list>.item,.ui.ordered.list>.item,ol.ui.list li{list-style-type:none;position:relative}.ui.ordered.list .list>.item:before,.ui.ordered.list>.item:before,ol.ui.list li:before{position:absolute;top:auto;left:auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none;margin-left:-1.25rem;counter-increment:ordered;content:counters(ordered, ".") " ";text-align:right;color:rgba(0,0,0,.87);vertical-align:middle;opacity:.8}.ui.ordered.inverted.list .list>.item:before,.ui.ordered.inverted.list>.item:before,ol.ui.inverted.list li:before{color:rgba(255,255,255,.7)}.ui.ordered.list>.item[data-value],.ui.ordered.list>.list>.item[data-value]{content:attr(data-value)}ol.ui.list li[value]:before{content:attr(value)}.ui.ordered.list .list,ol.ui.list ol{margin-left:1em}.ui.ordered.list .list>.item:before,ol.ui.list ol li:before{margin-left:-2em}.ui.ordered.horizontal.list,ol.ui.horizontal.list{margin-left:0}.ui.ordered.horizontal.list .list>.item:before,.ui.ordered.horizontal.list>.item:before,ol.ui.horizontal.list li:before{position:static;margin:0 .5em 0 0}.ui.divided.list>.item{border-top:1px solid rgba(34,36,38,.15)}.ui.divided.list .list>.item{border-top:none}.ui.divided.list .item .list>.item{border-top:none}.ui.divided.list .list>.item:first-child,.ui.divided.list>.item:first-child{border-top:none}.ui.divided.list:not(.horizontal) .list>.item:first-child{border-top-width:1px}.ui.divided.bulleted.list .list,.ui.divided.bulleted.list:not(.horizontal){margin-left:0;padding-left:0}.ui.divided.bulleted.list>.item:not(.horizontal){padding-left:1.25rem}.ui.divided.ordered.list{margin-left:0}.ui.divided.ordered.list .list>.item,.ui.divided.ordered.list>.item{padding-left:1.25rem}.ui.divided.ordered.list .item .list{margin-left:0;margin-right:0;padding-bottom:.21428571em}.ui.divided.ordered.list .item .list>.item{padding-left:1em}.ui.divided.selection.list .list>.item,.ui.divided.selection.list>.item{margin:0;border-radius:0}.ui.divided.horizontal.list{margin-left:0}.ui.divided.horizontal.list>.item:not(:first-child){padding-left:.5em}.ui.divided.horizontal.list>.item:not(:last-child){padding-right:.5em}.ui.divided.horizontal.list>.item{border-top:none;border-left:1px solid rgba(34,36,38,.15);margin:0;line-height:.6}.ui.horizontal.divided.list>.item:first-child{border-left:none}.ui.divided.inverted.horizontal.list>.item,.ui.divided.inverted.list>.item,.ui.divided.inverted.list>.list{border-color:rgba(255,255,255,.1)}.ui.celled.list>.item,.ui.celled.list>.list{border-top:1px solid rgba(34,36,38,.15);padding-left:.5em;padding-right:.5em}.ui.celled.list>.item:last-child{border-bottom:1px solid rgba(34,36,38,.15)}.ui.celled.list>.item:first-child,.ui.celled.list>.item:last-child{padding-top:.21428571em;padding-bottom:.21428571em}.ui.celled.list .item .list>.item{border-width:0}.ui.celled.list .list>.item:first-child{border-top-width:0}.ui.celled.bulleted.list{margin-left:0}.ui.celled.bulleted.list .list>.item,.ui.celled.bulleted.list>.item{padding-left:1.25rem}.ui.celled.bulleted.list .item .list{margin-left:-1.25rem;margin-right:-1.25rem;padding-bottom:.21428571em}.ui.celled.ordered.list{margin-left:0}.ui.celled.ordered.list .list>.item,.ui.celled.ordered.list>.item{padding-left:1.25rem}.ui.celled.ordered.list .item .list{margin-left:0;margin-right:0;padding-bottom:.21428571em}.ui.celled.ordered.list .list>.item{padding-left:1em}.ui.horizontal.celled.list{margin-left:0}.ui.horizontal.celled.list .list>.item,.ui.horizontal.celled.list>.item{border-top:none;border-left:1px solid rgba(34,36,38,.15);margin:0;padding-left:.5em;padding-right:.5em;line-height:.6}.ui.horizontal.celled.list .list>.item:last-child,.ui.horizontal.celled.list>.item:last-child{border-bottom:none;border-right:1px solid rgba(34,36,38,.15)}.ui.celled.inverted.list>.item,.ui.celled.inverted.list>.list{border-color:1px solid rgba(255,255,255,.1)}.ui.celled.inverted.horizontal.list .list>.item,.ui.celled.inverted.horizontal.list>.item{border-color:1px solid rgba(255,255,255,.1)}.ui.relaxed.list:not(.horizontal)>.item:not(:first-child){padding-top:.42857143em}.ui.relaxed.list:not(.horizontal)>.item:not(:last-child){padding-bottom:.42857143em}.ui.horizontal.relaxed.list .list>.item:not(:first-child),.ui.horizontal.relaxed.list>.item:not(:first-child){padding-left:1rem}.ui.horizontal.relaxed.list .list>.item:not(:last-child),.ui.horizontal.relaxed.list>.item:not(:last-child){padding-right:1rem}.ui[class*="very relaxed"].list:not(.horizontal)>.item:not(:first-child){padding-top:.85714286em}.ui[class*="very relaxed"].list:not(.horizontal)>.item:not(:last-child){padding-bottom:.85714286em}.ui.horizontal[class*="very relaxed"].list .list>.item:not(:first-child),.ui.horizontal[class*="very relaxed"].list>.item:not(:first-child){padding-left:1.5rem}.ui.horizontal[class*="very relaxed"].list .list>.item:not(:last-child),.ui.horizontal[class*="very relaxed"].list>.item:not(:last-child){padding-right:1.5rem}.ui.mini.list{font-size:.78571429em}.ui.tiny.list{font-size:.85714286em}.ui.small.list{font-size:.92857143em}.ui.list{font-size:1em}.ui.large.list{font-size:1.14285714em}.ui.big.list{font-size:1.28571429em}.ui.huge.list{font-size:1.42857143em}.ui.massive.list{font-size:1.71428571em}.ui.mini.horizontal.list .list>.item,.ui.mini.horizontal.list>.item{font-size:.78571429rem}.ui.tiny.horizontal.list .list>.item,.ui.tiny.horizontal.list>.item{font-size:.85714286rem}.ui.small.horizontal.list .list>.item,.ui.small.horizontal.list>.item{font-size:.92857143rem}.ui.horizontal.list .list>.item,.ui.horizontal.list>.item{font-size:1rem}.ui.large.horizontal.list .list>.item,.ui.large.horizontal.list>.item{font-size:1.14285714rem}.ui.big.horizontal.list .list>.item,.ui.big.horizontal.list>.item{font-size:1.28571429rem}.ui.huge.horizontal.list .list>.item,.ui.huge.horizontal.list>.item{font-size:1.42857143rem}.ui.massive.horizontal.list .list>.item,.ui.massive.horizontal.list>.item{font-size:1.71428571rem}/*! + * # Semantic UI 2.2.10 - Loader + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.loader{display:none;position:absolute;top:50%;left:50%;margin:0;text-align:center;z-index:1000;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.ui.loader:before{position:absolute;content:'';top:0;left:50%;width:100%;height:100%;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.loader:after{position:absolute;content:'';top:0;left:50%;width:100%;height:100%;-webkit-animation:loader .6s linear;animation:loader .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border-color:#767676 transparent transparent;border-style:solid;border-width:.2em;box-shadow:0 0 0 1px transparent}@-webkit-keyframes loader{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loader{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.ui.mini.loader:after,.ui.mini.loader:before{width:1rem;height:1rem;margin:0 0 0 -.5rem}.ui.tiny.loader:after,.ui.tiny.loader:before{width:1.14285714rem;height:1.14285714rem;margin:0 0 0 -.57142857rem}.ui.small.loader:after,.ui.small.loader:before{width:1.71428571rem;height:1.71428571rem;margin:0 0 0 -.85714286rem}.ui.loader:after,.ui.loader:before{width:2.28571429rem;height:2.28571429rem;margin:0 0 0 -1.14285714rem}.ui.large.loader:after,.ui.large.loader:before{width:3.42857143rem;height:3.42857143rem;margin:0 0 0 -1.71428571rem}.ui.big.loader:after,.ui.big.loader:before{width:3.71428571rem;height:3.71428571rem;margin:0 0 0 -1.85714286rem}.ui.huge.loader:after,.ui.huge.loader:before{width:4.14285714rem;height:4.14285714rem;margin:0 0 0 -2.07142857rem}.ui.massive.loader:after,.ui.massive.loader:before{width:4.57142857rem;height:4.57142857rem;margin:0 0 0 -2.28571429rem}.ui.dimmer .loader{display:block}.ui.dimmer .ui.loader{color:rgba(255,255,255,.9)}.ui.dimmer .ui.loader:before{border-color:rgba(255,255,255,.15)}.ui.dimmer .ui.loader:after{border-color:#fff transparent transparent}.ui.inverted.dimmer .ui.loader{color:rgba(0,0,0,.87)}.ui.inverted.dimmer .ui.loader:before{border-color:rgba(0,0,0,.1)}.ui.inverted.dimmer .ui.loader:after{border-color:#767676 transparent transparent}.ui.text.loader{width:auto!important;height:auto!important;text-align:center;font-style:normal}.ui.indeterminate.loader:after{-webkit-animation-direction:reverse;animation-direction:reverse;-webkit-animation-duration:1.2s;animation-duration:1.2s}.ui.loader.active,.ui.loader.visible{display:block}.ui.loader.disabled,.ui.loader.hidden{display:none}.ui.inverted.dimmer .ui.mini.loader,.ui.mini.loader{width:1rem;height:1rem;font-size:.78571429em}.ui.inverted.dimmer .ui.tiny.loader,.ui.tiny.loader{width:1.14285714rem;height:1.14285714rem;font-size:.85714286em}.ui.inverted.dimmer .ui.small.loader,.ui.small.loader{width:1.71428571rem;height:1.71428571rem;font-size:.92857143em}.ui.inverted.dimmer .ui.loader,.ui.loader{width:2.28571429rem;height:2.28571429rem;font-size:1em}.ui.inverted.dimmer .ui.large.loader,.ui.large.loader{width:3.42857143rem;height:3.42857143rem;font-size:1.14285714em}.ui.big.loader,.ui.inverted.dimmer .ui.big.loader{width:3.71428571rem;height:3.71428571rem;font-size:1.28571429em}.ui.huge.loader,.ui.inverted.dimmer .ui.huge.loader{width:4.14285714rem;height:4.14285714rem;font-size:1.42857143em}.ui.inverted.dimmer .ui.massive.loader,.ui.massive.loader{width:4.57142857rem;height:4.57142857rem;font-size:1.71428571em}.ui.mini.text.loader{min-width:1rem;padding-top:1.78571429rem}.ui.tiny.text.loader{min-width:1.14285714rem;padding-top:1.92857143rem}.ui.small.text.loader{min-width:1.71428571rem;padding-top:2.5rem}.ui.text.loader{min-width:2.28571429rem;padding-top:3.07142857rem}.ui.large.text.loader{min-width:3.42857143rem;padding-top:4.21428571rem}.ui.big.text.loader{min-width:3.71428571rem;padding-top:4.5rem}.ui.huge.text.loader{min-width:4.14285714rem;padding-top:4.92857143rem}.ui.massive.text.loader{min-width:4.57142857rem;padding-top:5.35714286rem}.ui.inverted.loader{color:rgba(255,255,255,.9)}.ui.inverted.loader:before{border-color:rgba(255,255,255,.15)}.ui.inverted.loader:after{border-top-color:#fff}.ui.inline.loader{position:relative;vertical-align:middle;margin:0;left:0;top:0;-webkit-transform:none;transform:none}.ui.inline.loader.active,.ui.inline.loader.visible{display:inline-block}.ui.centered.inline.loader.active,.ui.centered.inline.loader.visible{display:block;margin-left:auto;margin-right:auto}/*! + * # Semantic UI 2.2.10 - Rail + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.rail{position:absolute;top:0;width:300px;height:100%}.ui.left.rail{left:auto;right:100%;padding:0 2rem 0 0;margin:0 2rem 0 0}.ui.right.rail{left:100%;right:auto;padding:0 0 0 2rem;margin:0 0 0 2rem}.ui.left.internal.rail{left:0;right:auto;padding:0 0 0 2rem;margin:0 0 0 2rem}.ui.right.internal.rail{left:auto;right:0;padding:0 2rem 0 0;margin:0 2rem 0 0}.ui.dividing.rail{width:302.5px}.ui.left.dividing.rail{padding:0 2.5rem 0 0;margin:0 2.5rem 0 0;border-right:1px solid rgba(34,36,38,.15)}.ui.right.dividing.rail{border-left:1px solid rgba(34,36,38,.15);padding:0 0 0 2.5rem;margin:0 0 0 2.5rem}.ui.close.rail{width:calc(300px + 1em)}.ui.close.left.rail{padding:0 1em 0 0;margin:0 1em 0 0}.ui.close.right.rail{padding:0 0 0 1em;margin:0 0 0 1em}.ui.very.close.rail{width:calc(300px + .5em)}.ui.very.close.left.rail{padding:0 .5em 0 0;margin:0 .5em 0 0}.ui.very.close.right.rail{padding:0 0 0 .5em;margin:0 0 0 .5em}.ui.attached.left.rail,.ui.attached.right.rail{padding:0;margin:0}.ui.mini.rail{font-size:.78571429rem}.ui.tiny.rail{font-size:.85714286rem}.ui.small.rail{font-size:.92857143rem}.ui.rail{font-size:1rem}.ui.large.rail{font-size:1.14285714rem}.ui.big.rail{font-size:1.28571429rem}.ui.huge.rail{font-size:1.42857143rem}.ui.massive.rail{font-size:1.71428571rem}/*! + * # Semantic UI 2.2.10 - Reveal + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.reveal{display:inherit;position:relative!important;font-size:0!important}.ui.reveal>.visible.content{position:absolute!important;top:0!important;left:0!important;z-index:3!important;-webkit-transition:all .5s ease .1s;transition:all .5s ease .1s}.ui.reveal>.hidden.content{position:relative!important;z-index:2!important}.ui.active.reveal .visible.content,.ui.reveal:hover .visible.content{z-index:4!important}.ui.slide.reveal{position:relative!important;overflow:hidden!important;white-space:nowrap}.ui.slide.reveal>.content{display:block;width:100%;float:left;margin:0;-webkit-transition:-webkit-transform .5s ease .1s;transition:transform .5s ease .1s}.ui.slide.reveal>.visible.content{position:relative!important}.ui.slide.reveal>.hidden.content{position:absolute!important;left:0!important;width:100%!important;-webkit-transform:translateX(100%)!important;transform:translateX(100%)!important}.ui.slide.active.reveal>.visible.content,.ui.slide.reveal:hover>.visible.content{-webkit-transform:translateX(-100%)!important;transform:translateX(-100%)!important}.ui.slide.active.reveal>.hidden.content,.ui.slide.reveal:hover>.hidden.content{-webkit-transform:translateX(0)!important;transform:translateX(0)!important}.ui.slide.right.reveal>.visible.content{-webkit-transform:translateX(0)!important;transform:translateX(0)!important}.ui.slide.right.reveal>.hidden.content{-webkit-transform:translateX(-100%)!important;transform:translateX(-100%)!important}.ui.slide.right.active.reveal>.visible.content,.ui.slide.right.reveal:hover>.visible.content{-webkit-transform:translateX(100%)!important;transform:translateX(100%)!important}.ui.slide.right.active.reveal>.hidden.content,.ui.slide.right.reveal:hover>.hidden.content{-webkit-transform:translateX(0)!important;transform:translateX(0)!important}.ui.slide.up.reveal>.hidden.content{-webkit-transform:translateY(100%)!important;transform:translateY(100%)!important}.ui.slide.up.active.reveal>.visible.content,.ui.slide.up.reveal:hover>.visible.content{-webkit-transform:translateY(-100%)!important;transform:translateY(-100%)!important}.ui.slide.up.active.reveal>.hidden.content,.ui.slide.up.reveal:hover>.hidden.content{-webkit-transform:translateY(0)!important;transform:translateY(0)!important}.ui.slide.down.reveal>.hidden.content{-webkit-transform:translateY(-100%)!important;transform:translateY(-100%)!important}.ui.slide.down.active.reveal>.visible.content,.ui.slide.down.reveal:hover>.visible.content{-webkit-transform:translateY(100%)!important;transform:translateY(100%)!important}.ui.slide.down.active.reveal>.hidden.content,.ui.slide.down.reveal:hover>.hidden.content{-webkit-transform:translateY(0)!important;transform:translateY(0)!important}.ui.fade.reveal>.visible.content{opacity:1}.ui.fade.active.reveal>.visible.content,.ui.fade.reveal:hover>.visible.content{opacity:0}.ui.move.reveal{position:relative!important;overflow:hidden!important;white-space:nowrap}.ui.move.reveal>.content{display:block;float:left;margin:0;-webkit-transition:-webkit-transform .5s cubic-bezier(.175,.885,.32,1) .1s;transition:transform .5s cubic-bezier(.175,.885,.32,1) .1s}.ui.move.reveal>.visible.content{position:relative!important}.ui.move.reveal>.hidden.content{position:absolute!important;left:0!important;width:100%!important}.ui.move.active.reveal>.visible.content,.ui.move.reveal:hover>.visible.content{-webkit-transform:translateX(-100%)!important;transform:translateX(-100%)!important}.ui.move.right.active.reveal>.visible.content,.ui.move.right.reveal:hover>.visible.content{-webkit-transform:translateX(100%)!important;transform:translateX(100%)!important}.ui.move.up.active.reveal>.visible.content,.ui.move.up.reveal:hover>.visible.content{-webkit-transform:translateY(-100%)!important;transform:translateY(-100%)!important}.ui.move.down.active.reveal>.visible.content,.ui.move.down.reveal:hover>.visible.content{-webkit-transform:translateY(100%)!important;transform:translateY(100%)!important}.ui.rotate.reveal>.visible.content{-webkit-transition-duration:.5s;transition-duration:.5s;-webkit-transform:rotate(0);transform:rotate(0)}.ui.rotate.reveal>.visible.content,.ui.rotate.right.reveal>.visible.content{-webkit-transform-origin:bottom right;transform-origin:bottom right}.ui.rotate.active.reveal>.visible.content,.ui.rotate.reveal:hover>.visible.content,.ui.rotate.right.active.reveal>.visible.content,.ui.rotate.right.reveal:hover>.visible.content{-webkit-transform:rotate(110deg);transform:rotate(110deg)}.ui.rotate.left.reveal>.visible.content{-webkit-transform-origin:bottom left;transform-origin:bottom left}.ui.rotate.left.active.reveal>.visible.content,.ui.rotate.left.reveal:hover>.visible.content{-webkit-transform:rotate(-110deg);transform:rotate(-110deg)}.ui.disabled.reveal:hover>.visible.visible.content{position:static!important;display:block!important;opacity:1!important;top:0!important;left:0!important;right:auto!important;bottom:auto!important;-webkit-transform:none!important;transform:none!important}.ui.disabled.reveal:hover>.hidden.hidden.content{display:none!important}.ui.visible.reveal{overflow:visible}.ui.instant.reveal>.content{-webkit-transition-delay:0s!important;transition-delay:0s!important}.ui.reveal>.content{font-size:1rem!important}/*! + * # Semantic UI 2.2.10 - Segment + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.segment{position:relative;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.075);margin:1rem 0;padding:20px 20px;border-radius:4px;border:1px solid #d8dee2}.ui.segment:first-child{margin-top:0}.ui.segment:last-child{margin-bottom:0}.ui.vertical.segment{margin:0;padding-left:0;padding-right:0;background:none transparent;border-radius:0;box-shadow:none;border:none;border-bottom:1px solid rgba(0,0,0,.13)}.ui.vertical.segment:last-child{border-bottom:none}.ui.inverted.segment>.ui.header{color:#fff}.ui[class*="bottom attached"].segment>[class*="top attached"].label{border-top-left-radius:0;border-top-right-radius:0}.ui[class*="top attached"].segment>[class*="bottom attached"].label{border-bottom-left-radius:0;border-bottom-right-radius:0}.ui.attached.segment:not(.top):not(.bottom)>[class*="top attached"].label{border-top-left-radius:0;border-top-right-radius:0}.ui.attached.segment:not(.top):not(.bottom)>[class*="bottom attached"].label{border-bottom-left-radius:0;border-bottom-right-radius:0}.ui.grid>.row>.ui.segment.column,.ui.grid>.ui.segment.column,.ui.page.grid.segment{padding-top:40px;padding-bottom:40px}.ui.grid.segment{margin:1rem 0;border-radius:4px}.ui.basic.table.segment{background:#fff;border:1px solid #d8dee2;box-shadow:0 1px 3px rgba(0,0,0,.075)}.ui[class*="very basic"].table.segment{padding:20px 20px}.ui.piled.segment,.ui.piled.segments{margin:3em 0;box-shadow:'';z-index:auto}.ui.piled.segment:first-child{margin-top:0}.ui.piled.segment:last-child{margin-bottom:0}.ui.piled.segment:after,.ui.piled.segment:before,.ui.piled.segments:after,.ui.piled.segments:before{background-color:#fff;visibility:visible;content:'';display:block;height:100%;left:0;position:absolute;width:100%;border:1px solid #d8dee2;box-shadow:''}.ui.piled.segment:before,.ui.piled.segments:before{-webkit-transform:rotate(-1.2deg);transform:rotate(-1.2deg);top:0;z-index:-2}.ui.piled.segment:after,.ui.piled.segments:after{-webkit-transform:rotate(1.2deg);transform:rotate(1.2deg);top:0;z-index:-1}.ui[class*="top attached"].piled.segment{margin-top:3em;margin-bottom:0}.ui.piled.segment[class*="top attached"]:first-child{margin-top:0}.ui.piled.segment[class*="bottom attached"]{margin-top:0;margin-bottom:3em}.ui.piled.segment[class*="bottom attached"]:last-child{margin-bottom:0}.ui.stacked.segment{padding-bottom:20.4px}.ui.stacked.segment:after,.ui.stacked.segment:before,.ui.stacked.segments:after,.ui.stacked.segments:before{content:'';position:absolute;bottom:-3px;left:0;border-top:1px solid rgba(0,0,0,.13);background:rgba(0,0,0,.03);width:100%;height:6px;visibility:visible}.ui.stacked.segment:before,.ui.stacked.segments:before{display:none}.ui.tall.stacked.segment:before,.ui.tall.stacked.segments:before{display:block;bottom:0}.ui.stacked.inverted.segment:after,.ui.stacked.inverted.segment:before,.ui.stacked.inverted.segments:after,.ui.stacked.inverted.segments:before{background-color:rgba(0,0,0,.03);border-top:1px solid #51a7e8}.ui.padded.segment{padding:1.5em}.ui[class*="very padded"].segment{padding:3em}.ui.padded.segment.vertical.segment,.ui[class*="very padded"].vertical.segment{padding-left:0;padding-right:0}.ui.compact.segment{display:table}.ui.compact.segments{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.ui.compact.segments .segment,.ui.segments .compact.segment{display:block;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto}.ui.circular.segment{display:table-cell;padding:2em;text-align:center;vertical-align:middle;border-radius:500em}.ui.raised.segment,.ui.raised.segments{box-shadow:0 1px 3px rgba(0,0,0,.075)}.ui.segments{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;position:relative;margin:1rem 0;border:1px solid #d8dee2;box-shadow:0 1px 3px rgba(0,0,0,.075);border-radius:4px}.ui.segments:first-child{margin-top:0}.ui.segments:last-child{margin-bottom:0}.ui.segments>.segment{top:0;bottom:0;border-radius:0;margin:0;width:auto;box-shadow:none;border:none;border-top:1px solid #d8dee2}.ui.segments:not(.horizontal)>.segment:first-child{border-top:none;margin-top:0;bottom:0;margin-bottom:0;top:0;border-radius:4px 4px 0 0}.ui.segments:not(.horizontal)>.segment:last-child{top:0;bottom:0;margin-top:0;margin-bottom:0;box-shadow:0 1px 3px rgba(0,0,0,.075),none;border-radius:0 0 4px 4px}.ui.segments:not(.horizontal)>.segment:only-child{border-radius:4px}.ui.segments>.ui.segments{border-top:1px solid #d8dee2;margin:1rem 1rem}.ui.segments>.segments:first-child{border-top:none}.ui.segments>.segment+.segments:not(.horizontal){margin-top:0}.ui.horizontal.segments{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;background-color:transparent;border-radius:0;padding:0;background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.075);margin:1rem 0;border-radius:4px;border:1px solid #d8dee2}.ui.segments>.horizontal.segments{margin:0;background-color:transparent;border-radius:0;border:none;box-shadow:none;border-top:1px solid #d8dee2}.ui.horizontal.segments>.segment{-webkit-box-flex:1;flex:1 1 auto;-ms-flex:1 1 0px;margin:0;min-width:0;background-color:transparent;border-radius:0;border:none;box-shadow:none;border-left:1px solid rgba(0,0,0,.13)}.ui.segments>.horizontal.segments:first-child{border-top:none}.ui.horizontal.segments>.segment:first-child{border-left:none}.ui.disabled.segment{opacity:.3;color:rgba(40,40,40,.3)}.ui.loading.segment{position:relative;cursor:default;pointer-events:none;text-shadow:none!important;color:transparent!important;-webkit-transition:all 0s linear;transition:all 0s linear}.ui.loading.segment:before{position:absolute;content:'';top:0;left:0;background:rgba(255,255,255,.8);width:100%;height:100%;border-radius:4px;z-index:100}.ui.loading.segment:after{position:absolute;content:'';top:50%;left:50%;margin:-1.5em 0 0 -1.5em;width:3em;height:3em;-webkit-animation:segment-spin .6s linear;animation:segment-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border-color:#9e9e9e rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.1);border-style:solid;border-width:.2em;box-shadow:0 0 0 1px transparent;visibility:visible;z-index:101}@-webkit-keyframes segment-spin{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes segment-spin{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.ui.basic.segment{background:none transparent;box-shadow:none;border:none;border-radius:0}.ui.clearing.segment:after{content:".";display:block;height:0;clear:both;visibility:hidden}.ui.red.segment:not(.inverted){border-top:.5em solid #f44336}.ui.inverted.red.segment{background-color:#f44336!important;color:#fff!important}.ui.orange.segment:not(.inverted){border-top:.5em solid #d26911}.ui.inverted.orange.segment{background-color:#d26911!important;color:#fff!important}.ui.yellow.segment:not(.inverted){border-top:.5em solid #ffeb3b}.ui.inverted.yellow.segment{background-color:#ffeb3b!important;color:#fff!important}.ui.olive.segment:not(.inverted){border-top:.5em solid #b5cc18}.ui.inverted.olive.segment{background-color:#b5cc18!important;color:#fff!important}.ui.green.segment:not(.inverted){border-top:.5em solid #78cb5b}.ui.inverted.green.segment{background-color:#78cb5b!important;color:#fff!important}.ui.teal.segment:not(.inverted){border-top:.5em solid #1de9b6}.ui.inverted.teal.segment{background-color:#1de9b6!important;color:#fff!important}.ui.blue.segment:not(.inverted){border-top:.5em solid #80a6cd}.ui.inverted.blue.segment{background-color:#80a6cd!important;color:#fff!important}.ui.violet.segment:not(.inverted){border-top:.5em solid #6435c9}.ui.inverted.violet.segment{background-color:#6435c9!important;color:#fff!important}.ui.purple.segment:not(.inverted){border-top:.5em solid #9c27b0}.ui.inverted.purple.segment{background-color:#9c27b0!important;color:#fff!important}.ui.pink.segment:not(.inverted){border-top:.5em solid #e91e63}.ui.inverted.pink.segment{background-color:#e91e63!important;color:#fff!important}.ui.brown.segment:not(.inverted){border-top:.5em solid #a5673f}.ui.inverted.brown.segment{background-color:#a5673f!important;color:#fff!important}.ui.grey.segment:not(.inverted){border-top:.5em solid #9e9e9e}.ui.inverted.grey.segment{background-color:#9e9e9e!important;color:#fff!important}.ui.black.segment:not(.inverted){border-top:.5em solid #333}.ui.inverted.black.segment{background-color:#333!important;color:#fff!important}.ui[class*="left aligned"].segment{text-align:left}.ui[class*="right aligned"].segment{text-align:right}.ui[class*="center aligned"].segment{text-align:center}.ui.floated.segment,.ui[class*="left floated"].segment{float:left;margin-right:1em}.ui[class*="right floated"].segment{float:right;margin-left:1em}.ui.inverted.segment{border:none;box-shadow:none}.ui.inverted.segment,.ui.primary.inverted.segment{background:#333;color:rgba(255,255,255,.9)}.ui.inverted.segment .segment{color:#212121}.ui.inverted.segment .inverted.segment{color:rgba(255,255,255,.9)}.ui.inverted.attached.segment{border-color:#555}.ui.secondary.segment{background:#f9f9f9;color:#212121}.ui.secondary.inverted.segment{background:#555;color:#212121}.ui.tertiary.segment{background:#f0f0f0;color:#212121}.ui.tertiary.inverted.segment{background:#333;color:#212121}.ui.attached.segment{top:0;bottom:0;border-radius:0;margin:0 -1px;width:calc(100% + 2px);max-width:calc(100% + 2px);box-shadow:none;border:1px solid #ddd}.ui.attached:not(.message)+.ui.attached.segment:not(.top){border-top:none}.ui[class*="top attached"].segment{bottom:0;margin-bottom:0;top:0;margin-top:1rem;border-radius:4px 4px 0 0}.ui.segment[class*="top attached"]:first-child{margin-top:0}.ui.segment[class*="bottom attached"]{bottom:0;margin-top:0;top:0;margin-bottom:1rem;box-shadow:0 1px 3px rgba(0,0,0,.075),none;border-radius:0 0 4px 4px}.ui.segment[class*="bottom attached"]:last-child{margin-bottom:0}.ui.mini.segment,.ui.mini.segments .segment{font-size:.76923077rem}.ui.tiny.segment,.ui.tiny.segments .segment{font-size:.84615385rem}.ui.small.segment,.ui.small.segments .segment{font-size:.92307692rem}.ui.segment,.ui.segments .segment{font-size:1rem}.ui.large.segment,.ui.large.segments .segment{font-size:1.15384615rem}.ui.big.segment,.ui.big.segments .segment{font-size:1.30769231rem}.ui.huge.segment,.ui.huge.segments .segment{font-size:1.46153846rem}.ui.massive.segment,.ui.massive.segments .segment{font-size:1.69230769rem}/*! + * # Semantic UI 2.2.10 - Step + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.steps{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;margin:1em 0;background:'';box-shadow:none;line-height:1.14285714em;border-radius:.28571429rem;border:1px solid rgba(34,36,38,.15)}.ui.steps:first-child{margin-top:0}.ui.steps:last-child{margin-bottom:0}.ui.steps .step{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;vertical-align:middle;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;margin:0 0;padding:1.14285714em 2em;background:#fff;color:rgba(0,0,0,.87);box-shadow:none;border-radius:0;border:none;border-right:1px solid rgba(34,36,38,.15);-webkit-transition:background-color .1s ease,opacity .1s ease,color .1s ease,box-shadow .1s ease;transition:background-color .1s ease,opacity .1s ease,color .1s ease,box-shadow .1s ease}.ui.steps .step:after{display:none;position:absolute;z-index:2;content:'';top:50%;right:0;border:medium none;background-color:#fff;width:1.14285714em;height:1.14285714em;border-style:solid;border-color:rgba(34,36,38,.15);border-width:0 1px 1px 0;-webkit-transition:background-color .1s ease,opacity .1s ease,color .1s ease,box-shadow .1s ease;transition:background-color .1s ease,opacity .1s ease,color .1s ease,box-shadow .1s ease;-webkit-transform:translateY(-50%) translateX(50%) rotate(-45deg);transform:translateY(-50%) translateX(50%) rotate(-45deg)}.ui.steps .step:first-child{padding-left:2em;border-radius:.28571429rem 0 0 .28571429rem}.ui.steps .step:last-child{border-radius:0 .28571429rem .28571429rem 0}.ui.steps .step:last-child{border-right:none;margin-right:0}.ui.steps .step:only-child{border-radius:.28571429rem}.ui.steps .step .title{font-family:HelveticaNeueLTStd-Lt,Helvetica,Arial,sans-serif;font-size:1.14285714em;font-weight:700}.ui.steps .step>.title{width:100%}.ui.steps .step .description{font-weight:400;font-size:.92857143em;color:rgba(0,0,0,.87)}.ui.steps .step>.description{width:100%}.ui.steps .step .title~.description{margin-top:.25em}.ui.steps .step>.icon{line-height:1;font-size:2.5em;margin:0 1rem 0 0}.ui.steps .step>.icon,.ui.steps .step>.icon~.content{display:block;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;-ms-flex-item-align:middle;align-self:middle}.ui.steps .step>.icon~.content{-webkit-box-flex:1 0 auto;-ms-flex-positive:1 0 auto;flex-grow:1 0 auto}.ui.steps:not(.vertical) .step>.icon{width:auto}.ui.steps .link.step,.ui.steps a.step{cursor:pointer}.ui.ordered.steps{counter-reset:ordered}.ui.ordered.steps .step:before{display:block;position:static;text-align:center;content:counters(ordered, ".");-ms-flex-item-align:middle;align-self:middle;margin-right:1rem;font-size:2.5em;counter-increment:ordered;font-family:inherit;font-weight:700}.ui.ordered.steps .step>*{display:block;-ms-flex-item-align:middle;align-self:middle}.ui.vertical.steps{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;overflow:visible}.ui.vertical.steps .step{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;border-radius:0;padding:1.14285714em 2em;border-right:none;border-bottom:1px solid rgba(34,36,38,.15)}.ui.vertical.steps .step:first-child{padding:1.14285714em 2em;border-radius:.28571429rem .28571429rem 0 0}.ui.vertical.steps .step:last-child{border-bottom:none;border-radius:0 0 .28571429rem .28571429rem}.ui.vertical.steps .step:only-child{border-radius:.28571429rem}.ui.vertical.steps .step:after{display:none}.ui.vertical.steps .step:after{top:50%;right:0;border-width:0 1px 1px 0}.ui.vertical.steps .step:after{display:none}.ui.vertical.steps .active.step:after{display:block}.ui.vertical.steps .step:last-child:after{display:none}.ui.vertical.steps .active.step:last-child:after{display:block}@media only screen and (max-width:767px){.ui.steps{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;overflow:visible;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.ui.steps .step{width:100%!important;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;border-radius:0;padding:1.14285714em 2em}.ui.steps .step:first-child{padding:1.14285714em 2em;border-radius:.28571429rem .28571429rem 0 0}.ui.steps .step:last-child{border-radius:0 0 .28571429rem .28571429rem}.ui.steps .step:after{display:none!important}.ui.steps .step .content{text-align:center}.ui.ordered.steps .step:before,.ui.steps .step>.icon{margin:0 0 1rem 0}}.ui.steps .link.step:hover,.ui.steps .link.step:hover::after,.ui.steps a.step:hover,.ui.steps a.step:hover::after{background:#f9fafb;color:rgba(0,0,0,.8)}.ui.steps .link.step:active,.ui.steps .link.step:active::after,.ui.steps a.step:active,.ui.steps a.step:active::after{background:#f3f4f5;color:rgba(0,0,0,.9)}.ui.steps .step.active{cursor:auto;background:#f3f4f5}.ui.steps .step.active:after{background:#f3f4f5}.ui.steps .step.active .title{color:#4183c4}.ui.ordered.steps .step.active:before,.ui.steps .active.step .icon{color:rgba(0,0,0,.85)}.ui.steps .step:after{display:block}.ui.steps .active.step:after{display:block}.ui.steps .step:last-child:after{display:none}.ui.steps .active.step:last-child:after{display:none}.ui.steps .link.active.step:hover,.ui.steps .link.active.step:hover::after,.ui.steps a.active.step:hover,.ui.steps a.active.step:hover::after{cursor:pointer;background:#dcddde;color:rgba(0,0,0,.87)}.ui.ordered.steps .step.completed:before,.ui.steps .step.completed>.icon:before{color:#21ba45}.ui.steps .disabled.step{cursor:auto;background:#fff;pointer-events:none}.ui.steps .disabled.step,.ui.steps .disabled.step .description,.ui.steps .disabled.step .title{color:rgba(40,40,40,.3)}.ui.steps .disabled.step:after{background:#fff}@media only screen and (max-width:991px){.ui[class*="tablet stackable"].steps{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;overflow:visible;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.ui[class*="tablet stackable"].steps .step{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;border-radius:0;padding:1.14285714em 2em}.ui[class*="tablet stackable"].steps .step:first-child{padding:1.14285714em 2em;border-radius:.28571429rem .28571429rem 0 0}.ui[class*="tablet stackable"].steps .step:last-child{border-radius:0 0 .28571429rem .28571429rem}.ui[class*="tablet stackable"].steps .step:after{display:none!important}.ui[class*="tablet stackable"].steps .step .content{text-align:center}.ui[class*="tablet stackable"].ordered.steps .step:before,.ui[class*="tablet stackable"].steps .step>.icon{margin:0 0 1rem 0}}.ui.fluid.steps{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%}.ui.attached.steps{width:calc(100% + 2px)!important;margin:0 -1px 0;max-width:calc(100% + 2px);border-radius:.28571429rem .28571429rem 0 0}.ui.attached.steps .step:first-child{border-radius:.28571429rem 0 0 0}.ui.attached.steps .step:last-child{border-radius:0 .28571429rem 0 0}.ui.bottom.attached.steps{margin:0 -1px 0;border-radius:0 0 .28571429rem .28571429rem}.ui.bottom.attached.steps .step:first-child{border-radius:0 0 0 .28571429rem}.ui.bottom.attached.steps .step:last-child{border-radius:0 0 .28571429rem 0}.ui.eight.steps,.ui.five.steps,.ui.four.steps,.ui.one.steps,.ui.seven.steps,.ui.six.steps,.ui.three.steps,.ui.two.steps{width:100%}.ui.eight.steps>.step,.ui.five.steps>.step,.ui.four.steps>.step,.ui.one.steps>.step,.ui.seven.steps>.step,.ui.six.steps>.step,.ui.three.steps>.step,.ui.two.steps>.step{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.ui.one.steps>.step{width:100%}.ui.two.steps>.step{width:50%}.ui.three.steps>.step{width:33.333%}.ui.four.steps>.step{width:25%}.ui.five.steps>.step{width:20%}.ui.six.steps>.step{width:16.666%}.ui.seven.steps>.step{width:14.285%}.ui.eight.steps>.step{width:12.5%}.ui.mini.step,.ui.mini.steps .step{font-size:.78571429rem}.ui.tiny.step,.ui.tiny.steps .step{font-size:.85714286rem}.ui.small.step,.ui.small.steps .step{font-size:.92857143rem}.ui.step,.ui.steps .step{font-size:1rem}.ui.large.step,.ui.large.steps .step{font-size:1.14285714rem}.ui.big.step,.ui.big.steps .step{font-size:1.28571429rem}.ui.huge.step,.ui.huge.steps .step{font-size:1.42857143rem}.ui.massive.step,.ui.massive.steps .step{font-size:1.71428571rem}@font-face{font-family:Step;src:url(data:application/x-font-ttf;charset=utf-8;;base64,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) format('truetype'),url(data:application/font-woff;charset=utf-8;base64,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) format('woff')}.ui.ordered.steps .step.completed:before,.ui.steps .step.completed>.icon:before{font-family:Step;content:'\e800'}/*! + * # Semantic UI 2.2.10 - Breadcrumb + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.breadcrumb{line-height:1;display:inline-block;margin:0 0;vertical-align:middle}.ui.breadcrumb:first-child{margin-top:0}.ui.breadcrumb:last-child{margin-bottom:0}.ui.breadcrumb .divider{display:inline-block;opacity:.7;margin:0 .21428571rem 0;font-size:.92857143em;color:rgba(0,0,0,.4);vertical-align:baseline}.ui.breadcrumb a{color:#4183c4}.ui.breadcrumb a:hover{color:#1e70bf}.ui.breadcrumb .icon.divider{font-size:.85714286em;vertical-align:baseline}.ui.breadcrumb a.section{cursor:pointer}.ui.breadcrumb .section{display:inline-block;margin:0;padding:0}.ui.breadcrumb.segment{display:inline-block;padding:.78571429em 1em}.ui.breadcrumb .active.section{font-weight:700}.ui.mini.breadcrumb{font-size:.78571429rem}.ui.tiny.breadcrumb{font-size:.85714286rem}.ui.small.breadcrumb{font-size:.92857143rem}.ui.breadcrumb{font-size:1rem}.ui.large.breadcrumb{font-size:1.14285714rem}.ui.big.breadcrumb{font-size:1.28571429rem}.ui.huge.breadcrumb{font-size:1.42857143rem}.ui.massive.breadcrumb{font-size:1.71428571rem}/*! + * # Semantic UI 2.2.10 - Form + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.form{position:relative;max-width:100%}.ui.form>p{margin:1em 0}.ui.form .field{clear:both;margin:0 0 1em}.ui.form .field:last-child,.ui.form .fields:last-child .field{margin-bottom:0}.ui.form .fields .field{clear:both;margin:0}.ui.form .field>label{display:block;margin:0 0 .28571429rem 0;color:rgba(0,0,0,.87);font-size:.92857143em;font-weight:700;text-transform:none}.ui.form input:not([type]),.ui.form input[type=date],.ui.form input[type=datetime-local],.ui.form input[type=email],.ui.form input[type=file],.ui.form input[type=number],.ui.form input[type=password],.ui.form input[type=search],.ui.form input[type=tel],.ui.form input[type=text],.ui.form input[type=time],.ui.form input[type=url],.ui.form textarea{width:100%;vertical-align:top}.ui.form ::-webkit-datetime-edit,.ui.form ::-webkit-inner-spin-button{height:1.21428571em}.ui.form input:not([type]),.ui.form input[type=date],.ui.form input[type=datetime-local],.ui.form input[type=email],.ui.form input[type=file],.ui.form input[type=number],.ui.form input[type=password],.ui.form input[type=search],.ui.form input[type=tel],.ui.form input[type=text],.ui.form input[type=time],.ui.form input[type=url]{font-family:HelveticaNeueLTStd-Lt,Helvetica,Arial,sans-serif;margin:0;outline:0;-webkit-appearance:none;tap-highlight-color:rgba(255,255,255,0);line-height:1.21428571em;padding:.67857143em 1em;font-size:1em;background:#fff;border:1px solid rgba(34,36,38,.15);color:rgba(0,0,0,.87);border-radius:.28571429rem;box-shadow:0 0 0 0 transparent inset;-webkit-transition:color .1s ease,border-color .1s ease;transition:color .1s ease,border-color .1s ease}.ui.form textarea{margin:0;-webkit-appearance:none;tap-highlight-color:rgba(255,255,255,0);padding:.78571429em 1em;background:#fff;border:1px solid rgba(34,36,38,.15);outline:0;color:rgba(0,0,0,.87);border-radius:.28571429rem;box-shadow:0 0 0 0 transparent inset;-webkit-transition:color .1s ease,border-color .1s ease;transition:color .1s ease,border-color .1s ease;font-size:1em;line-height:1.2857;resize:vertical}.ui.form textarea:not([rows]){height:12em;min-height:8em;max-height:24em}.ui.form input[type=checkbox],.ui.form textarea{vertical-align:top}.ui.form input.attached{width:auto}.ui.form select{display:block;height:auto;width:100%;background:#fff;border:1px solid rgba(34,36,38,.15);border-radius:.28571429rem;box-shadow:0 0 0 0 transparent inset;padding:.62em 1em;color:rgba(0,0,0,.87);-webkit-transition:color .1s ease,border-color .1s ease;transition:color .1s ease,border-color .1s ease}.ui.form .field>.selection.dropdown{width:100%}.ui.form .field>.selection.dropdown>.dropdown.icon{float:right}.ui.form .inline.field>.selection.dropdown,.ui.form .inline.fields .field>.selection.dropdown{width:auto}.ui.form .inline.field>.selection.dropdown>.dropdown.icon,.ui.form .inline.fields .field>.selection.dropdown>.dropdown.icon{float:none}.ui.form .field .ui.input,.ui.form .fields .field .ui.input,.ui.form .wide.field .ui.input{width:100%}.ui.form .inline.field:not(.wide) .ui.input,.ui.form .inline.fields .field:not(.wide) .ui.input{width:auto;vertical-align:middle}.ui.form .field .ui.input input,.ui.form .fields .field .ui.input input{width:auto}.ui.form .eight.fields .ui.input input,.ui.form .five.fields .ui.input input,.ui.form .four.fields .ui.input input,.ui.form .nine.fields .ui.input input,.ui.form .seven.fields .ui.input input,.ui.form .six.fields .ui.input input,.ui.form .ten.fields .ui.input input,.ui.form .three.fields .ui.input input,.ui.form .two.fields .ui.input input,.ui.form .wide.field .ui.input input{-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;width:0}.ui.form .error.message,.ui.form .success.message,.ui.form .warning.message{display:none}.ui.form .message:first-child{margin-top:0}.ui.form .field .prompt.label{white-space:normal;background:#fff!important;border:1px solid #e0b4b4!important;color:#9f3a38!important}.ui.form .inline.field .prompt,.ui.form .inline.fields .field .prompt{vertical-align:top;margin:-.25em 0 -.5em .5em}.ui.form .inline.field .prompt:before,.ui.form .inline.fields .field .prompt:before{border-width:0 0 1px 1px;bottom:auto;right:auto;top:50%;left:0}.ui.form .field.field input:-webkit-autofill{box-shadow:0 0 0 100px ivory inset!important;border-color:#e5dfa1!important}.ui.form .field.field input:-webkit-autofill:focus{box-shadow:0 0 0 100px ivory inset!important;border-color:#d5c315!important}.ui.form .error.error input:-webkit-autofill{box-shadow:0 0 0 100px #fffaf0 inset!important;border-color:#e0b4b4!important}.ui.form ::-webkit-input-placeholder{color:rgba(191,191,191,.87)}.ui.form :-ms-input-placeholder{color:rgba(191,191,191,.87)}.ui.form ::-moz-placeholder{color:rgba(191,191,191,.87)}.ui.form :focus::-webkit-input-placeholder{color:rgba(115,115,115,.87)}.ui.form :focus:-ms-input-placeholder{color:rgba(115,115,115,.87)}.ui.form :focus::-moz-placeholder{color:rgba(115,115,115,.87)}.ui.form .error ::-webkit-input-placeholder{color:#e7bdbc}.ui.form .error :-ms-input-placeholder{color:#e7bdbc!important}.ui.form .error ::-moz-placeholder{color:#e7bdbc}.ui.form .error :focus::-webkit-input-placeholder{color:#da9796}.ui.form .error :focus:-ms-input-placeholder{color:#da9796!important}.ui.form .error :focus::-moz-placeholder{color:#da9796}.ui.form input:not([type]):focus,.ui.form input[type=date]:focus,.ui.form input[type=datetime-local]:focus,.ui.form input[type=email]:focus,.ui.form input[type=file]:focus,.ui.form input[type=number]:focus,.ui.form input[type=password]:focus,.ui.form input[type=search]:focus,.ui.form input[type=tel]:focus,.ui.form input[type=text]:focus,.ui.form input[type=time]:focus,.ui.form input[type=url]:focus{color:rgba(0,0,0,.95);border-color:#85b7d9;border-radius:.28571429rem;background:#fff;box-shadow:0 0 0 0 rgba(34,36,38,.35) inset}.ui.form textarea:focus{color:rgba(0,0,0,.95);border-color:#85b7d9;border-radius:.28571429rem;background:#fff;box-shadow:0 0 0 0 rgba(34,36,38,.35) inset;-webkit-appearance:none}.ui.form.success .success.message:not(:empty){display:block}.ui.form.success .compact.success.message:not(:empty){display:inline-block}.ui.form.success .icon.success.message:not(:empty){display:-webkit-box;display:-ms-flexbox;display:flex}.ui.form.warning .warning.message:not(:empty){display:block}.ui.form.warning .compact.warning.message:not(:empty){display:inline-block}.ui.form.warning .icon.warning.message:not(:empty){display:-webkit-box;display:-ms-flexbox;display:flex}.ui.form.error .error.message:not(:empty){display:block}.ui.form.error .compact.error.message:not(:empty){display:inline-block}.ui.form.error .icon.error.message:not(:empty){display:-webkit-box;display:-ms-flexbox;display:flex}.ui.form .field.error .input,.ui.form .field.error label,.ui.form .fields.error .field .input,.ui.form .fields.error .field label{color:#9f3a38}.ui.form .field.error .corner.label,.ui.form .fields.error .field .corner.label{border-color:#9f3a38;color:#fff}.ui.form .field.error input:not([type]),.ui.form .field.error input[type=date],.ui.form .field.error input[type=datetime-local],.ui.form .field.error input[type=email],.ui.form .field.error input[type=file],.ui.form .field.error input[type=number],.ui.form .field.error input[type=password],.ui.form .field.error input[type=search],.ui.form .field.error input[type=tel],.ui.form .field.error input[type=text],.ui.form .field.error input[type=time],.ui.form .field.error input[type=url],.ui.form .field.error select,.ui.form .field.error textarea,.ui.form .fields.error .field input:not([type]),.ui.form .fields.error .field input[type=date],.ui.form .fields.error .field input[type=datetime-local],.ui.form .fields.error .field input[type=email],.ui.form .fields.error .field input[type=file],.ui.form .fields.error .field input[type=number],.ui.form .fields.error .field input[type=password],.ui.form .fields.error .field input[type=search],.ui.form .fields.error .field input[type=tel],.ui.form .fields.error .field input[type=text],.ui.form .fields.error .field input[type=time],.ui.form .fields.error .field input[type=url],.ui.form .fields.error .field select,.ui.form .fields.error .field textarea{background:#fff6f6;border-color:#e0b4b4;color:#9f3a38;border-radius:'';box-shadow:none}.ui.form .field.error input:not([type]):focus,.ui.form .field.error input[type=date]:focus,.ui.form .field.error input[type=datetime-local]:focus,.ui.form .field.error input[type=email]:focus,.ui.form .field.error input[type=file]:focus,.ui.form .field.error input[type=number]:focus,.ui.form .field.error input[type=password]:focus,.ui.form .field.error input[type=search]:focus,.ui.form .field.error input[type=tel]:focus,.ui.form .field.error input[type=text]:focus,.ui.form .field.error input[type=time]:focus,.ui.form .field.error input[type=url]:focus,.ui.form .field.error select:focus,.ui.form .field.error textarea:focus{background:#fff6f6;border-color:#e0b4b4;color:#9f3a38;-webkit-appearance:none;box-shadow:none}.ui.form .field.error select{-webkit-appearance:menulist-button}.ui.form .field.error .ui.dropdown,.ui.form .field.error .ui.dropdown .item,.ui.form .field.error .ui.dropdown .text,.ui.form .fields.error .field .ui.dropdown,.ui.form .fields.error .field .ui.dropdown .item{background:#fff6f6;color:#9f3a38}.ui.form .field.error .ui.dropdown,.ui.form .fields.error .field .ui.dropdown{border-color:#e0b4b4!important}.ui.form .field.error .ui.dropdown:hover,.ui.form .fields.error .field .ui.dropdown:hover{border-color:#e0b4b4!important}.ui.form .field.error .ui.dropdown:hover .menu,.ui.form .fields.error .field .ui.dropdown:hover .menu{border-color:#e0b4b4}.ui.form .field.error .ui.multiple.selection.dropdown>.label,.ui.form .fields.error .field .ui.multiple.selection.dropdown>.label{background-color:#eacbcb;color:#9f3a38}.ui.form .field.error .ui.dropdown .menu .item:hover,.ui.form .fields.error .field .ui.dropdown .menu .item:hover{background-color:#fbe7e7}.ui.form .field.error .ui.dropdown .menu .selected.item,.ui.form .fields.error .field .ui.dropdown .menu .selected.item{background-color:#fbe7e7}.ui.form .field.error .ui.dropdown .menu .active.item,.ui.form .fields.error .field .ui.dropdown .menu .active.item{background-color:#fdcfcf!important}.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box,.ui.form .field.error .checkbox:not(.toggle):not(.slider) label,.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box,.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label{color:#9f3a38}.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box:before,.ui.form .field.error .checkbox:not(.toggle):not(.slider) label:before,.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box:before,.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label:before{background:#fff6f6;border-color:#e0b4b4}.ui.form .field.error .checkbox .box:after,.ui.form .field.error .checkbox label:after,.ui.form .fields.error .field .checkbox .box:after,.ui.form .fields.error .field .checkbox label:after{color:#9f3a38}.ui.form .disabled.field,.ui.form .disabled.fields .field,.ui.form .field :disabled{pointer-events:none;opacity:.45}.ui.form .field.disabled>label,.ui.form .fields.disabled>label{opacity:.45}.ui.form .field.disabled :disabled{opacity:1}.ui.loading.form{position:relative;cursor:default;pointer-events:none}.ui.loading.form:before{position:absolute;content:'';top:0;left:0;background:rgba(255,255,255,.8);width:100%;height:100%;z-index:100}.ui.loading.form:after{position:absolute;content:'';top:50%;left:50%;margin:-1.5em 0 0 -1.5em;width:3em;height:3em;-webkit-animation:form-spin .6s linear;animation:form-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border-color:#767676 rgba(0,0,0,.1) rgba(0,0,0,.1) rgba(0,0,0,.1);border-style:solid;border-width:.2em;box-shadow:0 0 0 1px transparent;visibility:visible;z-index:101}@-webkit-keyframes form-spin{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes form-spin{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.ui.form .required.field>.checkbox:after,.ui.form .required.field>label:after,.ui.form .required.fields.grouped>label:after,.ui.form .required.fields:not(.grouped)>.field>.checkbox:after,.ui.form .required.fields:not(.grouped)>.field>label:after{margin:-.2em 0 0 .2em;content:'*';color:#db2828}.ui.form .required.field>label:after,.ui.form .required.fields.grouped>label:after,.ui.form .required.fields:not(.grouped)>.field>label:after{display:inline-block;vertical-align:top}.ui.form .required.field>.checkbox:after,.ui.form .required.fields:not(.grouped)>.field>.checkbox:after{position:absolute;top:0;left:100%}.ui.form .inverted.segment .ui.checkbox .box,.ui.form .inverted.segment .ui.checkbox label,.ui.form .inverted.segment label,.ui.inverted.form .inline.field>label,.ui.inverted.form .inline.field>p,.ui.inverted.form .inline.fields .field>label,.ui.inverted.form .inline.fields .field>p,.ui.inverted.form .inline.fields>label,.ui.inverted.form .ui.checkbox .box,.ui.inverted.form .ui.checkbox label,.ui.inverted.form label{color:rgba(255,255,255,.9)}.ui.inverted.form input:not([type]),.ui.inverted.form input[type=date],.ui.inverted.form input[type=datetime-local],.ui.inverted.form input[type=email],.ui.inverted.form input[type=file],.ui.inverted.form input[type=number],.ui.inverted.form input[type=password],.ui.inverted.form input[type=search],.ui.inverted.form input[type=tel],.ui.inverted.form input[type=text],.ui.inverted.form input[type=time],.ui.inverted.form input[type=url]{background:#fff;border-color:rgba(255,255,255,.1);color:rgba(0,0,0,.87);box-shadow:none}.ui.form .grouped.fields{display:block;margin:0 0 1em}.ui.form .grouped.fields:last-child{margin-bottom:0}.ui.form .grouped.fields>label{margin:0 0 .28571429rem 0;color:rgba(0,0,0,.87);font-size:.92857143em;font-weight:700;text-transform:none}.ui.form .grouped.fields .field,.ui.form .grouped.inline.fields .field{display:block;margin:.5em 0;padding:0}.ui.form .fields{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;margin:0 -.5em 1em}.ui.form .fields>.field{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;padding-left:.5em;padding-right:.5em}.ui.form .fields>.field:first-child{border-left:none;box-shadow:none}.ui.form .two.fields>.field,.ui.form .two.fields>.fields{width:50%}.ui.form .three.fields>.field,.ui.form .three.fields>.fields{width:33.33333333%}.ui.form .four.fields>.field,.ui.form .four.fields>.fields{width:25%}.ui.form .five.fields>.field,.ui.form .five.fields>.fields{width:20%}.ui.form .six.fields>.field,.ui.form .six.fields>.fields{width:16.66666667%}.ui.form .seven.fields>.field,.ui.form .seven.fields>.fields{width:14.28571429%}.ui.form .eight.fields>.field,.ui.form .eight.fields>.fields{width:12.5%}.ui.form .nine.fields>.field,.ui.form .nine.fields>.fields{width:11.11111111%}.ui.form .ten.fields>.field,.ui.form .ten.fields>.fields{width:10%}@media only screen and (max-width:767px){.ui.form .fields{-ms-flex-wrap:wrap;flex-wrap:wrap}.ui.form .eight.fields>.field,.ui.form .eight.fields>.fields,.ui.form .five.fields>.field,.ui.form .five.fields>.fields,.ui.form .four.fields>.field,.ui.form .four.fields>.fields,.ui.form .nine.fields>.field,.ui.form .nine.fields>.fields,.ui.form .seven.fields>.field,.ui.form .seven.fields>.fields,.ui.form .six.fields>.field,.ui.form .six.fields>.fields,.ui.form .ten.fields>.field,.ui.form .ten.fields>.fields,.ui.form .three.fields>.field,.ui.form .three.fields>.fields,.ui.form .two.fields>.field,.ui.form .two.fields>.fields,.ui.form [class*="equal width"].fields>.field,.ui[class*="equal width"].form .fields>.field{width:100%!important;margin:0 0 1em}}.ui.form .fields .wide.field{width:8.33333333%;padding-left:.5em;padding-right:.5em}.ui.form .one.wide.field{width:8.33333333%!important}.ui.form .two.wide.field{width:16.66666667%!important}.ui.form .three.wide.field{width:25%!important}.ui.form .four.wide.field{width:33.33333333%!important}.ui.form .five.wide.field{width:41.66666667%!important}.ui.form .six.wide.field{width:50%!important}.ui.form .seven.wide.field{width:58.33333333%!important}.ui.form .eight.wide.field{width:66.66666667%!important}.ui.form .nine.wide.field{width:75%!important}.ui.form .ten.wide.field{width:83.33333333%!important}.ui.form .eleven.wide.field{width:91.66666667%!important}.ui.form .twelve.wide.field{width:100%!important}.ui.form .thirteen.wide.field{width:108.33333333%!important}.ui.form .fourteen.wide.field{width:116.66666667%!important}.ui.form .fifteen.wide.field{width:125%!important}.ui.form .sixteen.wide.field{width:133.33333333%!important}@media only screen and (max-width:767px){.ui.form .fields>.eight.wide.field,.ui.form .fields>.eleven.wide.field,.ui.form .fields>.fifteen.wide.field,.ui.form .fields>.five.wide.field,.ui.form .fields>.four.wide.field,.ui.form .fields>.fourteen.wide.field,.ui.form .fields>.nine.wide.field,.ui.form .fields>.seven.wide.field,.ui.form .fields>.six.wide.field,.ui.form .fields>.sixteen.wide.field,.ui.form .fields>.ten.wide.field,.ui.form .fields>.thirteen.wide.field,.ui.form .fields>.three.wide.field,.ui.form .fields>.twelve.wide.field,.ui.form .fields>.two.wide.field,.ui.form .five.fields>.field,.ui.form .five.fields>.fields,.ui.form .four.fields>.field,.ui.form .four.fields>.fields,.ui.form .three.fields>.field,.ui.form .three.fields>.fields,.ui.form .two.fields>.field,.ui.form .two.fields>.fields{width:100%!important}.ui.form .fields{margin-bottom:0}}.ui.form [class*="equal width"].fields>.field,.ui[class*="equal width"].form .fields>.field{width:100%;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.ui.form .inline.fields{margin:0 0 1em;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ui.form .inline.fields .field{margin:0;padding:0 1em 0 0}.ui.form .inline.field>label,.ui.form .inline.field>p,.ui.form .inline.fields .field>label,.ui.form .inline.fields .field>p,.ui.form .inline.fields>label{display:inline-block;width:auto;margin-top:0;margin-bottom:0;vertical-align:baseline;font-size:.92857143em;font-weight:700;color:rgba(0,0,0,.87);text-transform:none}.ui.form .inline.fields>label{margin:.035714em 1em 0 0}.ui.form .inline.field>input,.ui.form .inline.field>select,.ui.form .inline.fields .field>input,.ui.form .inline.fields .field>select{display:inline-block;width:auto;margin-top:0;margin-bottom:0;vertical-align:middle;font-size:1em}.ui.form .inline.field>:first-child,.ui.form .inline.fields .field>:first-child{margin:0 .85714286em 0 0}.ui.form .inline.field>:only-child,.ui.form .inline.fields .field>:only-child{margin:0}.ui.form .inline.fields .wide.field{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ui.form .inline.fields .wide.field>input,.ui.form .inline.fields .wide.field>select{width:100%}.ui.mini.form{font-size:.78571429rem}.ui.tiny.form{font-size:.85714286rem}.ui.small.form{font-size:.92857143rem}.ui.form{font-size:1rem}.ui.large.form{font-size:1.14285714rem}.ui.big.form{font-size:1.28571429rem}.ui.huge.form{font-size:1.42857143rem}.ui.massive.form{font-size:1.71428571rem}/*! + * # Semantic UI 2.2.10 - Grid + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.grid{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;padding:0}.ui.grid{margin-top:-1rem;margin-bottom:-1rem;margin-left:-1rem;margin-right:-1rem}.ui.relaxed.grid{margin-left:-1.5rem;margin-right:-1.5rem}.ui[class*="very relaxed"].grid{margin-left:-2.5rem;margin-right:-2.5rem}.ui.grid+.grid{margin-top:1rem}.ui.grid>.column:not(.row),.ui.grid>.row>.column{position:relative;display:inline-block;width:8.33333333%;padding-left:1rem;padding-right:1rem;vertical-align:top}.ui.grid>*{padding-left:1rem;padding-right:1rem}.ui.grid>.row{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:inherit;-ms-flex-pack:inherit;justify-content:inherit;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%!important;padding:0;padding-top:1rem;padding-bottom:1rem}.ui.grid>.column:not(.row){padding-top:1rem;padding-bottom:1rem}.ui.grid>.row>.column{margin-top:0;margin-bottom:0}.ui.grid>.row>.column>img,.ui.grid>.row>img{max-width:100%}.ui.grid>.ui.grid:first-child{margin-top:0}.ui.grid>.ui.grid:last-child{margin-bottom:0}.ui.aligned.grid .column>.segment:not(.compact):not(.attached),.ui.grid .aligned.row>.column>.segment:not(.compact):not(.attached){width:100%}.ui.grid .row+.ui.divider{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;margin:1rem 1rem}.ui.grid .column+.ui.vertical.divider{height:calc(50% - 1rem)}.ui.grid>.column:last-child>.horizontal.segment,.ui.grid>.row>.column:last-child>.horizontal.segment{box-shadow:none}@media only screen and (max-width:767px){.ui.page.grid{width:auto;padding-left:0;padding-right:0;margin-left:0;margin-right:0}}@media only screen and (min-width:768px) and (max-width:991px){.ui.page.grid{width:auto;margin-left:0;margin-right:0;padding-left:2em;padding-right:2em}}@media only screen and (min-width:992px) and (max-width:1199px){.ui.page.grid{width:auto;margin-left:0;margin-right:0;padding-left:3%;padding-right:3%}}@media only screen and (min-width:1200px) and (max-width:1919px){.ui.page.grid{width:auto;margin-left:0;margin-right:0;padding-left:15%;padding-right:15%}}@media only screen and (min-width:1920px){.ui.page.grid{width:auto;margin-left:0;margin-right:0;padding-left:23%;padding-right:23%}}.ui.grid>.column:only-child,.ui.grid>.row>.column:only-child{width:100%}.ui[class*="one column"].grid>.column:not(.row),.ui[class*="one column"].grid>.row>.column{width:100%}.ui[class*="two column"].grid>.column:not(.row),.ui[class*="two column"].grid>.row>.column{width:50%}.ui[class*="three column"].grid>.column:not(.row),.ui[class*="three column"].grid>.row>.column{width:33.33333333%}.ui[class*="four column"].grid>.column:not(.row),.ui[class*="four column"].grid>.row>.column{width:25%}.ui[class*="five column"].grid>.column:not(.row),.ui[class*="five column"].grid>.row>.column{width:20%}.ui[class*="six column"].grid>.column:not(.row),.ui[class*="six column"].grid>.row>.column{width:16.66666667%}.ui[class*="seven column"].grid>.column:not(.row),.ui[class*="seven column"].grid>.row>.column{width:14.28571429%}.ui[class*="eight column"].grid>.column:not(.row),.ui[class*="eight column"].grid>.row>.column{width:12.5%}.ui[class*="nine column"].grid>.column:not(.row),.ui[class*="nine column"].grid>.row>.column{width:11.11111111%}.ui[class*="ten column"].grid>.column:not(.row),.ui[class*="ten column"].grid>.row>.column{width:10%}.ui[class*="eleven column"].grid>.column:not(.row),.ui[class*="eleven column"].grid>.row>.column{width:9.09090909%}.ui[class*="twelve column"].grid>.column:not(.row),.ui[class*="twelve column"].grid>.row>.column{width:8.33333333%}.ui[class*="thirteen column"].grid>.column:not(.row),.ui[class*="thirteen column"].grid>.row>.column{width:7.69230769%}.ui[class*="fourteen column"].grid>.column:not(.row),.ui[class*="fourteen column"].grid>.row>.column{width:7.14285714%}.ui[class*="fifteen column"].grid>.column:not(.row),.ui[class*="fifteen column"].grid>.row>.column{width:6.66666667%}.ui[class*="sixteen column"].grid>.column:not(.row),.ui[class*="sixteen column"].grid>.row>.column{width:6.25%}.ui.grid>[class*="one column"].row>.column{width:100%!important}.ui.grid>[class*="two column"].row>.column{width:50%!important}.ui.grid>[class*="three column"].row>.column{width:33.33333333%!important}.ui.grid>[class*="four column"].row>.column{width:25%!important}.ui.grid>[class*="five column"].row>.column{width:20%!important}.ui.grid>[class*="six column"].row>.column{width:16.66666667%!important}.ui.grid>[class*="seven column"].row>.column{width:14.28571429%!important}.ui.grid>[class*="eight column"].row>.column{width:12.5%!important}.ui.grid>[class*="nine column"].row>.column{width:11.11111111%!important}.ui.grid>[class*="ten column"].row>.column{width:10%!important}.ui.grid>[class*="eleven column"].row>.column{width:9.09090909%!important}.ui.grid>[class*="twelve column"].row>.column{width:8.33333333%!important}.ui.grid>[class*="thirteen column"].row>.column{width:7.69230769%!important}.ui.grid>[class*="fourteen column"].row>.column{width:7.14285714%!important}.ui.grid>[class*="fifteen column"].row>.column{width:6.66666667%!important}.ui.grid>[class*="sixteen column"].row>.column{width:6.25%!important}.ui.celled.page.grid{box-shadow:none}.ui.column.grid>[class*="one wide"].column,.ui.grid>.column.row>[class*="one wide"].column,.ui.grid>.row>[class*="one wide"].column,.ui.grid>[class*="one wide"].column{width:8.33333333%!important}.ui.column.grid>[class*="two wide"].column,.ui.grid>.column.row>[class*="two wide"].column,.ui.grid>.row>[class*="two wide"].column,.ui.grid>[class*="two wide"].column{width:16.66666667%!important}.ui.column.grid>[class*="three wide"].column,.ui.grid>.column.row>[class*="three wide"].column,.ui.grid>.row>[class*="three wide"].column,.ui.grid>[class*="three wide"].column{width:25%!important}.ui.column.grid>[class*="four wide"].column,.ui.grid>.column.row>[class*="four wide"].column,.ui.grid>.row>[class*="four wide"].column,.ui.grid>[class*="four wide"].column{width:33.33333333%!important}.ui.column.grid>[class*="five wide"].column,.ui.grid>.column.row>[class*="five wide"].column,.ui.grid>.row>[class*="five wide"].column,.ui.grid>[class*="five wide"].column{width:41.66666667%!important}.ui.column.grid>[class*="six wide"].column,.ui.grid>.column.row>[class*="six wide"].column,.ui.grid>.row>[class*="six wide"].column,.ui.grid>[class*="six wide"].column{width:50%!important}.ui.column.grid>[class*="seven wide"].column,.ui.grid>.column.row>[class*="seven wide"].column,.ui.grid>.row>[class*="seven wide"].column,.ui.grid>[class*="seven wide"].column{width:58.33333333%!important}.ui.column.grid>[class*="eight wide"].column,.ui.grid>.column.row>[class*="eight wide"].column,.ui.grid>.row>[class*="eight wide"].column,.ui.grid>[class*="eight wide"].column{width:66.66666667%!important}.ui.column.grid>[class*="nine wide"].column,.ui.grid>.column.row>[class*="nine wide"].column,.ui.grid>.row>[class*="nine wide"].column,.ui.grid>[class*="nine wide"].column{width:75%!important}.ui.column.grid>[class*="ten wide"].column,.ui.grid>.column.row>[class*="ten wide"].column,.ui.grid>.row>[class*="ten wide"].column,.ui.grid>[class*="ten wide"].column{width:83.33333333%!important}.ui.column.grid>[class*="eleven wide"].column,.ui.grid>.column.row>[class*="eleven wide"].column,.ui.grid>.row>[class*="eleven wide"].column,.ui.grid>[class*="eleven wide"].column{width:91.66666667%!important}.ui.column.grid>[class*="twelve wide"].column,.ui.grid>.column.row>[class*="twelve wide"].column,.ui.grid>.row>[class*="twelve wide"].column,.ui.grid>[class*="twelve wide"].column{width:100%!important}.ui.column.grid>[class*="thirteen wide"].column,.ui.grid>.column.row>[class*="thirteen wide"].column,.ui.grid>.row>[class*="thirteen wide"].column,.ui.grid>[class*="thirteen wide"].column{width:108.33333333%!important}.ui.column.grid>[class*="fourteen wide"].column,.ui.grid>.column.row>[class*="fourteen wide"].column,.ui.grid>.row>[class*="fourteen wide"].column,.ui.grid>[class*="fourteen wide"].column{width:116.66666667%!important}.ui.column.grid>[class*="fifteen wide"].column,.ui.grid>.column.row>[class*="fifteen wide"].column,.ui.grid>.row>[class*="fifteen wide"].column,.ui.grid>[class*="fifteen wide"].column{width:125%!important}.ui.column.grid>[class*="sixteen wide"].column,.ui.grid>.column.row>[class*="sixteen wide"].column,.ui.grid>.row>[class*="sixteen wide"].column,.ui.grid>[class*="sixteen wide"].column{width:133.33333333%!important}@media only screen and (min-width:320px) and (max-width:767px){.ui.column.grid>[class*="one wide mobile"].column,.ui.grid>.column.row>[class*="one wide mobile"].column,.ui.grid>.row>[class*="one wide mobile"].column,.ui.grid>[class*="one wide mobile"].column{width:8.33333333%!important}.ui.column.grid>[class*="two wide mobile"].column,.ui.grid>.column.row>[class*="two wide mobile"].column,.ui.grid>.row>[class*="two wide mobile"].column,.ui.grid>[class*="two wide mobile"].column{width:16.66666667%!important}.ui.column.grid>[class*="three wide mobile"].column,.ui.grid>.column.row>[class*="three wide mobile"].column,.ui.grid>.row>[class*="three wide mobile"].column,.ui.grid>[class*="three wide mobile"].column{width:25%!important}.ui.column.grid>[class*="four wide mobile"].column,.ui.grid>.column.row>[class*="four wide mobile"].column,.ui.grid>.row>[class*="four wide mobile"].column,.ui.grid>[class*="four wide mobile"].column{width:33.33333333%!important}.ui.column.grid>[class*="five wide mobile"].column,.ui.grid>.column.row>[class*="five wide mobile"].column,.ui.grid>.row>[class*="five wide mobile"].column,.ui.grid>[class*="five wide mobile"].column{width:41.66666667%!important}.ui.column.grid>[class*="six wide mobile"].column,.ui.grid>.column.row>[class*="six wide mobile"].column,.ui.grid>.row>[class*="six wide mobile"].column,.ui.grid>[class*="six wide mobile"].column{width:50%!important}.ui.column.grid>[class*="seven wide mobile"].column,.ui.grid>.column.row>[class*="seven wide mobile"].column,.ui.grid>.row>[class*="seven wide mobile"].column,.ui.grid>[class*="seven wide mobile"].column{width:58.33333333%!important}.ui.column.grid>[class*="eight wide mobile"].column,.ui.grid>.column.row>[class*="eight wide mobile"].column,.ui.grid>.row>[class*="eight wide mobile"].column,.ui.grid>[class*="eight wide mobile"].column{width:66.66666667%!important}.ui.column.grid>[class*="nine wide mobile"].column,.ui.grid>.column.row>[class*="nine wide mobile"].column,.ui.grid>.row>[class*="nine wide mobile"].column,.ui.grid>[class*="nine wide mobile"].column{width:75%!important}.ui.column.grid>[class*="ten wide mobile"].column,.ui.grid>.column.row>[class*="ten wide mobile"].column,.ui.grid>.row>[class*="ten wide mobile"].column,.ui.grid>[class*="ten wide mobile"].column{width:83.33333333%!important}.ui.column.grid>[class*="eleven wide mobile"].column,.ui.grid>.column.row>[class*="eleven wide mobile"].column,.ui.grid>.row>[class*="eleven wide mobile"].column,.ui.grid>[class*="eleven wide mobile"].column{width:91.66666667%!important}.ui.column.grid>[class*="twelve wide mobile"].column,.ui.grid>.column.row>[class*="twelve wide mobile"].column,.ui.grid>.row>[class*="twelve wide mobile"].column,.ui.grid>[class*="twelve wide mobile"].column{width:100%!important}.ui.column.grid>[class*="thirteen wide mobile"].column,.ui.grid>.column.row>[class*="thirteen wide mobile"].column,.ui.grid>.row>[class*="thirteen wide mobile"].column,.ui.grid>[class*="thirteen wide mobile"].column{width:108.33333333%!important}.ui.column.grid>[class*="fourteen wide mobile"].column,.ui.grid>.column.row>[class*="fourteen wide mobile"].column,.ui.grid>.row>[class*="fourteen wide mobile"].column,.ui.grid>[class*="fourteen wide mobile"].column{width:116.66666667%!important}.ui.column.grid>[class*="fifteen wide mobile"].column,.ui.grid>.column.row>[class*="fifteen wide mobile"].column,.ui.grid>.row>[class*="fifteen wide mobile"].column,.ui.grid>[class*="fifteen wide mobile"].column{width:125%!important}.ui.column.grid>[class*="sixteen wide mobile"].column,.ui.grid>.column.row>[class*="sixteen wide mobile"].column,.ui.grid>.row>[class*="sixteen wide mobile"].column,.ui.grid>[class*="sixteen wide mobile"].column{width:133.33333333%!important}}@media only screen and (min-width:768px) and (max-width:991px){.ui.column.grid>[class*="one wide tablet"].column,.ui.grid>.column.row>[class*="one wide tablet"].column,.ui.grid>.row>[class*="one wide tablet"].column,.ui.grid>[class*="one wide tablet"].column{width:8.33333333%!important}.ui.column.grid>[class*="two wide tablet"].column,.ui.grid>.column.row>[class*="two wide tablet"].column,.ui.grid>.row>[class*="two wide tablet"].column,.ui.grid>[class*="two wide tablet"].column{width:16.66666667%!important}.ui.column.grid>[class*="three wide tablet"].column,.ui.grid>.column.row>[class*="three wide tablet"].column,.ui.grid>.row>[class*="three wide tablet"].column,.ui.grid>[class*="three wide tablet"].column{width:25%!important}.ui.column.grid>[class*="four wide tablet"].column,.ui.grid>.column.row>[class*="four wide tablet"].column,.ui.grid>.row>[class*="four wide tablet"].column,.ui.grid>[class*="four wide tablet"].column{width:33.33333333%!important}.ui.column.grid>[class*="five wide tablet"].column,.ui.grid>.column.row>[class*="five wide tablet"].column,.ui.grid>.row>[class*="five wide tablet"].column,.ui.grid>[class*="five wide tablet"].column{width:41.66666667%!important}.ui.column.grid>[class*="six wide tablet"].column,.ui.grid>.column.row>[class*="six wide tablet"].column,.ui.grid>.row>[class*="six wide tablet"].column,.ui.grid>[class*="six wide tablet"].column{width:50%!important}.ui.column.grid>[class*="seven wide tablet"].column,.ui.grid>.column.row>[class*="seven wide tablet"].column,.ui.grid>.row>[class*="seven wide tablet"].column,.ui.grid>[class*="seven wide tablet"].column{width:58.33333333%!important}.ui.column.grid>[class*="eight wide tablet"].column,.ui.grid>.column.row>[class*="eight wide tablet"].column,.ui.grid>.row>[class*="eight wide tablet"].column,.ui.grid>[class*="eight wide tablet"].column{width:66.66666667%!important}.ui.column.grid>[class*="nine wide tablet"].column,.ui.grid>.column.row>[class*="nine wide tablet"].column,.ui.grid>.row>[class*="nine wide tablet"].column,.ui.grid>[class*="nine wide tablet"].column{width:75%!important}.ui.column.grid>[class*="ten wide tablet"].column,.ui.grid>.column.row>[class*="ten wide tablet"].column,.ui.grid>.row>[class*="ten wide tablet"].column,.ui.grid>[class*="ten wide tablet"].column{width:83.33333333%!important}.ui.column.grid>[class*="eleven wide tablet"].column,.ui.grid>.column.row>[class*="eleven wide tablet"].column,.ui.grid>.row>[class*="eleven wide tablet"].column,.ui.grid>[class*="eleven wide tablet"].column{width:91.66666667%!important}.ui.column.grid>[class*="twelve wide tablet"].column,.ui.grid>.column.row>[class*="twelve wide tablet"].column,.ui.grid>.row>[class*="twelve wide tablet"].column,.ui.grid>[class*="twelve wide tablet"].column{width:100%!important}.ui.column.grid>[class*="thirteen wide tablet"].column,.ui.grid>.column.row>[class*="thirteen wide tablet"].column,.ui.grid>.row>[class*="thirteen wide tablet"].column,.ui.grid>[class*="thirteen wide tablet"].column{width:108.33333333%!important}.ui.column.grid>[class*="fourteen wide tablet"].column,.ui.grid>.column.row>[class*="fourteen wide tablet"].column,.ui.grid>.row>[class*="fourteen wide tablet"].column,.ui.grid>[class*="fourteen wide tablet"].column{width:116.66666667%!important}.ui.column.grid>[class*="fifteen wide tablet"].column,.ui.grid>.column.row>[class*="fifteen wide tablet"].column,.ui.grid>.row>[class*="fifteen wide tablet"].column,.ui.grid>[class*="fifteen wide tablet"].column{width:125%!important}.ui.column.grid>[class*="sixteen wide tablet"].column,.ui.grid>.column.row>[class*="sixteen wide tablet"].column,.ui.grid>.row>[class*="sixteen wide tablet"].column,.ui.grid>[class*="sixteen wide tablet"].column{width:133.33333333%!important}}@media only screen and (min-width:992px){.ui.column.grid>[class*="one wide computer"].column,.ui.grid>.column.row>[class*="one wide computer"].column,.ui.grid>.row>[class*="one wide computer"].column,.ui.grid>[class*="one wide computer"].column{width:8.33333333%!important}.ui.column.grid>[class*="two wide computer"].column,.ui.grid>.column.row>[class*="two wide computer"].column,.ui.grid>.row>[class*="two wide computer"].column,.ui.grid>[class*="two wide computer"].column{width:16.66666667%!important}.ui.column.grid>[class*="three wide computer"].column,.ui.grid>.column.row>[class*="three wide computer"].column,.ui.grid>.row>[class*="three wide computer"].column,.ui.grid>[class*="three wide computer"].column{width:25%!important}.ui.column.grid>[class*="four wide computer"].column,.ui.grid>.column.row>[class*="four wide computer"].column,.ui.grid>.row>[class*="four wide computer"].column,.ui.grid>[class*="four wide computer"].column{width:33.33333333%!important}.ui.column.grid>[class*="five wide computer"].column,.ui.grid>.column.row>[class*="five wide computer"].column,.ui.grid>.row>[class*="five wide computer"].column,.ui.grid>[class*="five wide computer"].column{width:41.66666667%!important}.ui.column.grid>[class*="six wide computer"].column,.ui.grid>.column.row>[class*="six wide computer"].column,.ui.grid>.row>[class*="six wide computer"].column,.ui.grid>[class*="six wide computer"].column{width:50%!important}.ui.column.grid>[class*="seven wide computer"].column,.ui.grid>.column.row>[class*="seven wide computer"].column,.ui.grid>.row>[class*="seven wide computer"].column,.ui.grid>[class*="seven wide computer"].column{width:58.33333333%!important}.ui.column.grid>[class*="eight wide computer"].column,.ui.grid>.column.row>[class*="eight wide computer"].column,.ui.grid>.row>[class*="eight wide computer"].column,.ui.grid>[class*="eight wide computer"].column{width:66.66666667%!important}.ui.column.grid>[class*="nine wide computer"].column,.ui.grid>.column.row>[class*="nine wide computer"].column,.ui.grid>.row>[class*="nine wide computer"].column,.ui.grid>[class*="nine wide computer"].column{width:75%!important}.ui.column.grid>[class*="ten wide computer"].column,.ui.grid>.column.row>[class*="ten wide computer"].column,.ui.grid>.row>[class*="ten wide computer"].column,.ui.grid>[class*="ten wide computer"].column{width:83.33333333%!important}.ui.column.grid>[class*="eleven wide computer"].column,.ui.grid>.column.row>[class*="eleven wide computer"].column,.ui.grid>.row>[class*="eleven wide computer"].column,.ui.grid>[class*="eleven wide computer"].column{width:91.66666667%!important}.ui.column.grid>[class*="twelve wide computer"].column,.ui.grid>.column.row>[class*="twelve wide computer"].column,.ui.grid>.row>[class*="twelve wide computer"].column,.ui.grid>[class*="twelve wide computer"].column{width:100%!important}.ui.column.grid>[class*="thirteen wide computer"].column,.ui.grid>.column.row>[class*="thirteen wide computer"].column,.ui.grid>.row>[class*="thirteen wide computer"].column,.ui.grid>[class*="thirteen wide computer"].column{width:108.33333333%!important}.ui.column.grid>[class*="fourteen wide computer"].column,.ui.grid>.column.row>[class*="fourteen wide computer"].column,.ui.grid>.row>[class*="fourteen wide computer"].column,.ui.grid>[class*="fourteen wide computer"].column{width:116.66666667%!important}.ui.column.grid>[class*="fifteen wide computer"].column,.ui.grid>.column.row>[class*="fifteen wide computer"].column,.ui.grid>.row>[class*="fifteen wide computer"].column,.ui.grid>[class*="fifteen wide computer"].column{width:125%!important}.ui.column.grid>[class*="sixteen wide computer"].column,.ui.grid>.column.row>[class*="sixteen wide computer"].column,.ui.grid>.row>[class*="sixteen wide computer"].column,.ui.grid>[class*="sixteen wide computer"].column{width:133.33333333%!important}}@media only screen and (min-width:1200px) and (max-width:1919px){.ui.column.grid>[class*="one wide large screen"].column,.ui.grid>.column.row>[class*="one wide large screen"].column,.ui.grid>.row>[class*="one wide large screen"].column,.ui.grid>[class*="one wide large screen"].column{width:8.33333333%!important}.ui.column.grid>[class*="two wide large screen"].column,.ui.grid>.column.row>[class*="two wide large screen"].column,.ui.grid>.row>[class*="two wide large screen"].column,.ui.grid>[class*="two wide large screen"].column{width:16.66666667%!important}.ui.column.grid>[class*="three wide large screen"].column,.ui.grid>.column.row>[class*="three wide large screen"].column,.ui.grid>.row>[class*="three wide large screen"].column,.ui.grid>[class*="three wide large screen"].column{width:25%!important}.ui.column.grid>[class*="four wide large screen"].column,.ui.grid>.column.row>[class*="four wide large screen"].column,.ui.grid>.row>[class*="four wide large screen"].column,.ui.grid>[class*="four wide large screen"].column{width:33.33333333%!important}.ui.column.grid>[class*="five wide large screen"].column,.ui.grid>.column.row>[class*="five wide large screen"].column,.ui.grid>.row>[class*="five wide large screen"].column,.ui.grid>[class*="five wide large screen"].column{width:41.66666667%!important}.ui.column.grid>[class*="six wide large screen"].column,.ui.grid>.column.row>[class*="six wide large screen"].column,.ui.grid>.row>[class*="six wide large screen"].column,.ui.grid>[class*="six wide large screen"].column{width:50%!important}.ui.column.grid>[class*="seven wide large screen"].column,.ui.grid>.column.row>[class*="seven wide large screen"].column,.ui.grid>.row>[class*="seven wide large screen"].column,.ui.grid>[class*="seven wide large screen"].column{width:58.33333333%!important}.ui.column.grid>[class*="eight wide large screen"].column,.ui.grid>.column.row>[class*="eight wide large screen"].column,.ui.grid>.row>[class*="eight wide large screen"].column,.ui.grid>[class*="eight wide large screen"].column{width:66.66666667%!important}.ui.column.grid>[class*="nine wide large screen"].column,.ui.grid>.column.row>[class*="nine wide large screen"].column,.ui.grid>.row>[class*="nine wide large screen"].column,.ui.grid>[class*="nine wide large screen"].column{width:75%!important}.ui.column.grid>[class*="ten wide large screen"].column,.ui.grid>.column.row>[class*="ten wide large screen"].column,.ui.grid>.row>[class*="ten wide large screen"].column,.ui.grid>[class*="ten wide large screen"].column{width:83.33333333%!important}.ui.column.grid>[class*="eleven wide large screen"].column,.ui.grid>.column.row>[class*="eleven wide large screen"].column,.ui.grid>.row>[class*="eleven wide large screen"].column,.ui.grid>[class*="eleven wide large screen"].column{width:91.66666667%!important}.ui.column.grid>[class*="twelve wide large screen"].column,.ui.grid>.column.row>[class*="twelve wide large screen"].column,.ui.grid>.row>[class*="twelve wide large screen"].column,.ui.grid>[class*="twelve wide large screen"].column{width:100%!important}.ui.column.grid>[class*="thirteen wide large screen"].column,.ui.grid>.column.row>[class*="thirteen wide large screen"].column,.ui.grid>.row>[class*="thirteen wide large screen"].column,.ui.grid>[class*="thirteen wide large screen"].column{width:108.33333333%!important}.ui.column.grid>[class*="fourteen wide large screen"].column,.ui.grid>.column.row>[class*="fourteen wide large screen"].column,.ui.grid>.row>[class*="fourteen wide large screen"].column,.ui.grid>[class*="fourteen wide large screen"].column{width:116.66666667%!important}.ui.column.grid>[class*="fifteen wide large screen"].column,.ui.grid>.column.row>[class*="fifteen wide large screen"].column,.ui.grid>.row>[class*="fifteen wide large screen"].column,.ui.grid>[class*="fifteen wide large screen"].column{width:125%!important}.ui.column.grid>[class*="sixteen wide large screen"].column,.ui.grid>.column.row>[class*="sixteen wide large screen"].column,.ui.grid>.row>[class*="sixteen wide large screen"].column,.ui.grid>[class*="sixteen wide large screen"].column{width:133.33333333%!important}}@media only screen and (min-width:1920px){.ui.column.grid>[class*="one wide widescreen"].column,.ui.grid>.column.row>[class*="one wide widescreen"].column,.ui.grid>.row>[class*="one wide widescreen"].column,.ui.grid>[class*="one wide widescreen"].column{width:8.33333333%!important}.ui.column.grid>[class*="two wide widescreen"].column,.ui.grid>.column.row>[class*="two wide widescreen"].column,.ui.grid>.row>[class*="two wide widescreen"].column,.ui.grid>[class*="two wide widescreen"].column{width:16.66666667%!important}.ui.column.grid>[class*="three wide widescreen"].column,.ui.grid>.column.row>[class*="three wide widescreen"].column,.ui.grid>.row>[class*="three wide widescreen"].column,.ui.grid>[class*="three wide widescreen"].column{width:25%!important}.ui.column.grid>[class*="four wide widescreen"].column,.ui.grid>.column.row>[class*="four wide widescreen"].column,.ui.grid>.row>[class*="four wide widescreen"].column,.ui.grid>[class*="four wide widescreen"].column{width:33.33333333%!important}.ui.column.grid>[class*="five wide widescreen"].column,.ui.grid>.column.row>[class*="five wide widescreen"].column,.ui.grid>.row>[class*="five wide widescreen"].column,.ui.grid>[class*="five wide widescreen"].column{width:41.66666667%!important}.ui.column.grid>[class*="six wide widescreen"].column,.ui.grid>.column.row>[class*="six wide widescreen"].column,.ui.grid>.row>[class*="six wide widescreen"].column,.ui.grid>[class*="six wide widescreen"].column{width:50%!important}.ui.column.grid>[class*="seven wide widescreen"].column,.ui.grid>.column.row>[class*="seven wide widescreen"].column,.ui.grid>.row>[class*="seven wide widescreen"].column,.ui.grid>[class*="seven wide widescreen"].column{width:58.33333333%!important}.ui.column.grid>[class*="eight wide widescreen"].column,.ui.grid>.column.row>[class*="eight wide widescreen"].column,.ui.grid>.row>[class*="eight wide widescreen"].column,.ui.grid>[class*="eight wide widescreen"].column{width:66.66666667%!important}.ui.column.grid>[class*="nine wide widescreen"].column,.ui.grid>.column.row>[class*="nine wide widescreen"].column,.ui.grid>.row>[class*="nine wide widescreen"].column,.ui.grid>[class*="nine wide widescreen"].column{width:75%!important}.ui.column.grid>[class*="ten wide widescreen"].column,.ui.grid>.column.row>[class*="ten wide widescreen"].column,.ui.grid>.row>[class*="ten wide widescreen"].column,.ui.grid>[class*="ten wide widescreen"].column{width:83.33333333%!important}.ui.column.grid>[class*="eleven wide widescreen"].column,.ui.grid>.column.row>[class*="eleven wide widescreen"].column,.ui.grid>.row>[class*="eleven wide widescreen"].column,.ui.grid>[class*="eleven wide widescreen"].column{width:91.66666667%!important}.ui.column.grid>[class*="twelve wide widescreen"].column,.ui.grid>.column.row>[class*="twelve wide widescreen"].column,.ui.grid>.row>[class*="twelve wide widescreen"].column,.ui.grid>[class*="twelve wide widescreen"].column{width:100%!important}.ui.column.grid>[class*="thirteen wide widescreen"].column,.ui.grid>.column.row>[class*="thirteen wide widescreen"].column,.ui.grid>.row>[class*="thirteen wide widescreen"].column,.ui.grid>[class*="thirteen wide widescreen"].column{width:108.33333333%!important}.ui.column.grid>[class*="fourteen wide widescreen"].column,.ui.grid>.column.row>[class*="fourteen wide widescreen"].column,.ui.grid>.row>[class*="fourteen wide widescreen"].column,.ui.grid>[class*="fourteen wide widescreen"].column{width:116.66666667%!important}.ui.column.grid>[class*="fifteen wide widescreen"].column,.ui.grid>.column.row>[class*="fifteen wide widescreen"].column,.ui.grid>.row>[class*="fifteen wide widescreen"].column,.ui.grid>[class*="fifteen wide widescreen"].column{width:125%!important}.ui.column.grid>[class*="sixteen wide widescreen"].column,.ui.grid>.column.row>[class*="sixteen wide widescreen"].column,.ui.grid>.row>[class*="sixteen wide widescreen"].column,.ui.grid>[class*="sixteen wide widescreen"].column{width:133.33333333%!important}}.ui.centered.grid,.ui.centered.grid>.row,.ui.grid>.centered.row{text-align:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.ui.centered.grid>.column:not(.aligned):not(.justified):not(.row),.ui.centered.grid>.row>.column:not(.aligned):not(.justified),.ui.grid .centered.row>.column:not(.aligned):not(.justified){text-align:left}.ui.grid>.centered.column,.ui.grid>.row>.centered.column{display:block;margin-left:auto;margin-right:auto}.ui.grid>.relaxed.row>.column,.ui.relaxed.grid>.column:not(.row),.ui.relaxed.grid>.row>.column{padding-left:1.5rem;padding-right:1.5rem}.ui.grid>[class*="very relaxed"].row>.column,.ui[class*="very relaxed"].grid>.column:not(.row),.ui[class*="very relaxed"].grid>.row>.column{padding-left:2.5rem;padding-right:2.5rem}.ui.grid .relaxed.row+.ui.divider,.ui.relaxed.grid .row+.ui.divider{margin-left:1.5rem;margin-right:1.5rem}.ui.grid [class*="very relaxed"].row+.ui.divider,.ui[class*="very relaxed"].grid .row+.ui.divider{margin-left:2.5rem;margin-right:2.5rem}.ui.padded.grid:not(.vertically):not(.horizontally){margin:0!important}[class*="horizontally padded"].ui.grid{margin-left:0!important;margin-right:0!important}[class*="vertically padded"].ui.grid{margin-top:0!important;margin-bottom:0!important}.ui.grid [class*="left floated"].column{margin-right:auto}.ui.grid [class*="right floated"].column{margin-left:auto}.ui.divided.grid:not([class*="vertically divided"])>.column:not(.row),.ui.divided.grid:not([class*="vertically divided"])>.row>.column{box-shadow:-1px 0 0 0 rgba(34,36,38,.15)}.ui[class*="vertically divided"].grid>.column:not(.row),.ui[class*="vertically divided"].grid>.row>.column{margin-top:1rem;margin-bottom:1rem;padding-top:0;padding-bottom:0}.ui[class*="vertically divided"].grid>.row{margin-top:0;margin-bottom:0}.ui.divided.grid:not([class*="vertically divided"])>.column:first-child,.ui.divided.grid:not([class*="vertically divided"])>.row>.column:first-child{box-shadow:none}.ui[class*="vertically divided"].grid>.row:first-child>.column{margin-top:0}.ui.grid>.divided.row>.column{box-shadow:-1px 0 0 0 rgba(34,36,38,.15)}.ui.grid>.divided.row>.column:first-child{box-shadow:none}.ui[class*="vertically divided"].grid>.row{position:relative}.ui[class*="vertically divided"].grid>.row:before{position:absolute;content:"";top:0;left:0;width:calc(100% - 2rem);height:1px;margin:0 1rem;box-shadow:0 -1px 0 0 rgba(34,36,38,.15)}.ui.padded.divided.grid:not(.vertically):not(.horizontally),[class*="horizontally padded"].ui.divided.grid{width:100%}.ui[class*="vertically divided"].grid>.row:first-child:before{box-shadow:none}.ui.inverted.divided.grid:not([class*="vertically divided"])>.column:not(.row),.ui.inverted.divided.grid:not([class*="vertically divided"])>.row>.column{box-shadow:-1px 0 0 0 rgba(255,255,255,.1)}.ui.inverted.divided.grid:not([class*="vertically divided"])>.column:not(.row):first-child,.ui.inverted.divided.grid:not([class*="vertically divided"])>.row>.column:first-child{box-shadow:none}.ui.inverted[class*="vertically divided"].grid>.row:before{box-shadow:0 -1px 0 0 rgba(255,255,255,.1)}.ui.relaxed[class*="vertically divided"].grid>.row:before{margin-left:1.5rem;margin-right:1.5rem;width:calc(100% - 3rem)}.ui[class*="very relaxed"][class*="vertically divided"].grid>.row:before{margin-left:5rem;margin-right:5rem;width:calc(100% - 5rem)}.ui.celled.grid{width:100%;margin:1em 0;box-shadow:0 0 0 1px #d4d4d5}.ui.celled.grid>.row{width:100%!important;margin:0;padding:0;box-shadow:0 -1px 0 0 #d4d4d5}.ui.celled.grid>.column:not(.row),.ui.celled.grid>.row>.column{box-shadow:-1px 0 0 0 #d4d4d5}.ui.celled.grid>.column:first-child,.ui.celled.grid>.row>.column:first-child{box-shadow:none}.ui.celled.grid>.column:not(.row),.ui.celled.grid>.row>.column{padding:1em}.ui.relaxed.celled.grid>.column:not(.row),.ui.relaxed.celled.grid>.row>.column{padding:1.5em}.ui[class*="very relaxed"].celled.grid>.column:not(.row),.ui[class*="very relaxed"].celled.grid>.row>.column{padding:2em}.ui[class*="internally celled"].grid{box-shadow:none;margin:0}.ui[class*="internally celled"].grid>.row:first-child{box-shadow:none}.ui[class*="internally celled"].grid>.row>.column:first-child{box-shadow:none}.ui.grid>.row>[class*="top aligned"].column,.ui.grid>[class*="top aligned"].column:not(.row),.ui.grid>[class*="top aligned"].row>.column,.ui[class*="top aligned"].grid>.column:not(.row),.ui[class*="top aligned"].grid>.row>.column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;vertical-align:top;-ms-flex-item-align:start!important;align-self:flex-start!important}.ui.grid>.row>[class*="middle aligned"].column,.ui.grid>[class*="middle aligned"].column:not(.row),.ui.grid>[class*="middle aligned"].row>.column,.ui[class*="middle aligned"].grid>.column:not(.row),.ui[class*="middle aligned"].grid>.row>.column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;vertical-align:middle;-ms-flex-item-align:center!important;align-self:center!important}.ui.grid>.row>[class*="bottom aligned"].column,.ui.grid>[class*="bottom aligned"].column:not(.row),.ui.grid>[class*="bottom aligned"].row>.column,.ui[class*="bottom aligned"].grid>.column:not(.row),.ui[class*="bottom aligned"].grid>.row>.column{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;vertical-align:bottom;-ms-flex-item-align:end!important;align-self:flex-end!important}.ui.grid>.row>.stretched.column,.ui.grid>.stretched.column:not(.row),.ui.grid>.stretched.row>.column,.ui.stretched.grid>.column,.ui.stretched.grid>.row>.column{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important;-ms-flex-item-align:stretch;align-self:stretch;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.ui.grid>.row>.stretched.column>*,.ui.grid>.stretched.column:not(.row)>*,.ui.grid>.stretched.row>.column>*,.ui.stretched.grid>.column>*,.ui.stretched.grid>.row>.column>*{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.ui.grid>.row>[class*="left aligned"].column.column,.ui.grid>[class*="left aligned"].column.column,.ui.grid>[class*="left aligned"].row>.column,.ui[class*="left aligned"].grid>.column,.ui[class*="left aligned"].grid>.row>.column{text-align:left;-ms-flex-item-align:inherit;align-self:inherit}.ui.grid>.row>[class*="center aligned"].column.column,.ui.grid>[class*="center aligned"].column.column,.ui.grid>[class*="center aligned"].row>.column,.ui[class*="center aligned"].grid>.column,.ui[class*="center aligned"].grid>.row>.column{text-align:center;-ms-flex-item-align:inherit;align-self:inherit}.ui[class*="center aligned"].grid{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.ui.grid>.row>[class*="right aligned"].column.column,.ui.grid>[class*="right aligned"].column.column,.ui.grid>[class*="right aligned"].row>.column,.ui[class*="right aligned"].grid>.column,.ui[class*="right aligned"].grid>.row>.column{text-align:right;-ms-flex-item-align:inherit;align-self:inherit}.ui.grid>.justified.column.column,.ui.grid>.justified.row>.column,.ui.grid>.row>.justified.column.column,.ui.justified.grid>.column,.ui.justified.grid>.row>.column{text-align:justify;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto}.ui.grid>.row>.black.column,.ui.grid>.row>.blue.column,.ui.grid>.row>.brown.column,.ui.grid>.row>.green.column,.ui.grid>.row>.grey.column,.ui.grid>.row>.olive.column,.ui.grid>.row>.orange.column,.ui.grid>.row>.pink.column,.ui.grid>.row>.purple.column,.ui.grid>.row>.red.column,.ui.grid>.row>.teal.column,.ui.grid>.row>.violet.column,.ui.grid>.row>.yellow.column{margin-top:-1rem;margin-bottom:-1rem;padding-top:1rem;padding-bottom:1rem}.ui.grid>.red.column,.ui.grid>.red.row,.ui.grid>.row>.red.column{background-color:#db2828!important;color:#fff}.ui.grid>.orange.column,.ui.grid>.orange.row,.ui.grid>.row>.orange.column{background-color:#f2711c!important;color:#fff}.ui.grid>.row>.yellow.column,.ui.grid>.yellow.column,.ui.grid>.yellow.row{background-color:#fbbd08!important;color:#fff}.ui.grid>.olive.column,.ui.grid>.olive.row,.ui.grid>.row>.olive.column{background-color:#b5cc18!important;color:#fff}.ui.grid>.green.column,.ui.grid>.green.row,.ui.grid>.row>.green.column{background-color:#21ba45!important;color:#fff}.ui.grid>.row>.teal.column,.ui.grid>.teal.column,.ui.grid>.teal.row{background-color:#00b5ad!important;color:#fff}.ui.grid>.blue.column,.ui.grid>.blue.row,.ui.grid>.row>.blue.column{background-color:#2185d0!important;color:#fff}.ui.grid>.row>.violet.column,.ui.grid>.violet.column,.ui.grid>.violet.row{background-color:#6435c9!important;color:#fff}.ui.grid>.purple.column,.ui.grid>.purple.row,.ui.grid>.row>.purple.column{background-color:#a333c8!important;color:#fff}.ui.grid>.pink.column,.ui.grid>.pink.row,.ui.grid>.row>.pink.column{background-color:#e03997!important;color:#fff}.ui.grid>.brown.column,.ui.grid>.brown.row,.ui.grid>.row>.brown.column{background-color:#a5673f!important;color:#fff}.ui.grid>.grey.column,.ui.grid>.grey.row,.ui.grid>.row>.grey.column{background-color:#767676!important;color:#fff}.ui.grid>.black.column,.ui.grid>.black.row,.ui.grid>.row>.black.column{background-color:#1b1c1d!important;color:#fff}.ui.grid>[class*="equal width"].row>.column,.ui[class*="equal width"].grid>.column:not(.row),.ui[class*="equal width"].grid>.row>.column{display:inline-block;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.ui.grid>[class*="equal width"].row>.wide.column,.ui[class*="equal width"].grid>.row>.wide.column,.ui[class*="equal width"].grid>.wide.column{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}@media only screen and (max-width:767px){.ui.grid>[class*="mobile reversed"].row,.ui[class*="mobile reversed"].grid,.ui[class*="mobile reversed"].grid>.row{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ui.stackable[class*="mobile reversed"],.ui[class*="mobile vertically reversed"].grid{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.ui[class*="mobile reversed"].divided.grid:not([class*="vertically divided"])>.column:first-child,.ui[class*="mobile reversed"].divided.grid:not([class*="vertically divided"])>.row>.column:first-child{box-shadow:-1px 0 0 0 rgba(34,36,38,.15)}.ui[class*="mobile reversed"].divided.grid:not([class*="vertically divided"])>.column:last-child,.ui[class*="mobile reversed"].divided.grid:not([class*="vertically divided"])>.row>.column:last-child{box-shadow:none}.ui.grid[class*="vertically divided"][class*="mobile vertically reversed"]>.row:first-child:before{box-shadow:0 -1px 0 0 rgba(34,36,38,.15)}.ui.grid[class*="vertically divided"][class*="mobile vertically reversed"]>.row:last-child:before{box-shadow:none}.ui[class*="mobile reversed"].celled.grid>.row>.column:first-child{box-shadow:-1px 0 0 0 #d4d4d5}.ui[class*="mobile reversed"].celled.grid>.row>.column:last-child{box-shadow:none}}@media only screen and (min-width:768px) and (max-width:991px){.ui.grid>[class*="tablet reversed"].row,.ui[class*="tablet reversed"].grid,.ui[class*="tablet reversed"].grid>.row{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ui[class*="tablet vertically reversed"].grid{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.ui[class*="tablet reversed"].divided.grid:not([class*="vertically divided"])>.column:first-child,.ui[class*="tablet reversed"].divided.grid:not([class*="vertically divided"])>.row>.column:first-child{box-shadow:-1px 0 0 0 rgba(34,36,38,.15)}.ui[class*="tablet reversed"].divided.grid:not([class*="vertically divided"])>.column:last-child,.ui[class*="tablet reversed"].divided.grid:not([class*="vertically divided"])>.row>.column:last-child{box-shadow:none}.ui.grid[class*="vertically divided"][class*="tablet vertically reversed"]>.row:first-child:before{box-shadow:0 -1px 0 0 rgba(34,36,38,.15)}.ui.grid[class*="vertically divided"][class*="tablet vertically reversed"]>.row:last-child:before{box-shadow:none}.ui[class*="tablet reversed"].celled.grid>.row>.column:first-child{box-shadow:-1px 0 0 0 #d4d4d5}.ui[class*="tablet reversed"].celled.grid>.row>.column:last-child{box-shadow:none}}@media only screen and (min-width:992px){.ui.grid>[class*="computer reversed"].row,.ui[class*="computer reversed"].grid,.ui[class*="computer reversed"].grid>.row{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.ui[class*="computer vertically reversed"].grid{-webkit-box-orient:vertical;-webkit-box-direction:reverse;-ms-flex-direction:column-reverse;flex-direction:column-reverse}.ui[class*="computer reversed"].divided.grid:not([class*="vertically divided"])>.column:first-child,.ui[class*="computer reversed"].divided.grid:not([class*="vertically divided"])>.row>.column:first-child{box-shadow:-1px 0 0 0 rgba(34,36,38,.15)}.ui[class*="computer reversed"].divided.grid:not([class*="vertically divided"])>.column:last-child,.ui[class*="computer reversed"].divided.grid:not([class*="vertically divided"])>.row>.column:last-child{box-shadow:none}.ui.grid[class*="vertically divided"][class*="computer vertically reversed"]>.row:first-child:before{box-shadow:0 -1px 0 0 rgba(34,36,38,.15)}.ui.grid[class*="vertically divided"][class*="computer vertically reversed"]>.row:last-child:before{box-shadow:none}.ui[class*="computer reversed"].celled.grid>.row>.column:first-child{box-shadow:-1px 0 0 0 #d4d4d5}.ui[class*="computer reversed"].celled.grid>.row>.column:last-child{box-shadow:none}}@media only screen and (min-width:768px) and (max-width:991px){.ui.doubling.grid{width:auto}.ui.doubling.grid>.row,.ui.grid>.doubling.row{margin:0!important;padding:0!important}.ui.doubling.grid>.row>.column,.ui.grid>.doubling.row>.column{display:inline-block!important;padding-top:1rem!important;padding-bottom:1rem!important;box-shadow:none!important;margin:0}.ui.grid>[class*="two column"].doubling.row.row>.column,.ui[class*="two column"].doubling.grid>.column:not(.row),.ui[class*="two column"].doubling.grid>.row>.column{width:100%!important}.ui.grid>[class*="three column"].doubling.row.row>.column,.ui[class*="three column"].doubling.grid>.column:not(.row),.ui[class*="three column"].doubling.grid>.row>.column{width:50%!important}.ui.grid>[class*="four column"].doubling.row.row>.column,.ui[class*="four column"].doubling.grid>.column:not(.row),.ui[class*="four column"].doubling.grid>.row>.column{width:50%!important}.ui.grid>[class*="five column"].doubling.row.row>.column,.ui[class*="five column"].doubling.grid>.column:not(.row),.ui[class*="five column"].doubling.grid>.row>.column{width:33.33333333%!important}.ui.grid>[class*="six column"].doubling.row.row>.column,.ui[class*="six column"].doubling.grid>.column:not(.row),.ui[class*="six column"].doubling.grid>.row>.column{width:33.33333333%!important}.ui.grid>[class*="seven column"].doubling.row.row>.column,.ui[class*="seven column"].doubling.grid>.column:not(.row),.ui[class*="seven column"].doubling.grid>.row>.column{width:33.33333333%!important}.ui.grid>[class*="eight column"].doubling.row.row>.column,.ui[class*="eight column"].doubling.grid>.column:not(.row),.ui[class*="eight column"].doubling.grid>.row>.column{width:25%!important}.ui.grid>[class*="nine column"].doubling.row.row>.column,.ui[class*="nine column"].doubling.grid>.column:not(.row),.ui[class*="nine column"].doubling.grid>.row>.column{width:25%!important}.ui.grid>[class*="ten column"].doubling.row.row>.column,.ui[class*="ten column"].doubling.grid>.column:not(.row),.ui[class*="ten column"].doubling.grid>.row>.column{width:20%!important}.ui.grid>[class*="eleven column"].doubling.row.row>.column,.ui[class*="eleven column"].doubling.grid>.column:not(.row),.ui[class*="eleven column"].doubling.grid>.row>.column{width:20%!important}.ui.grid>[class*="twelve column"].doubling.row.row>.column,.ui[class*="twelve column"].doubling.grid>.column:not(.row),.ui[class*="twelve column"].doubling.grid>.row>.column{width:16.66666667%!important}.ui.grid>[class*="thirteen column"].doubling.row.row>.column,.ui[class*="thirteen column"].doubling.grid>.column:not(.row),.ui[class*="thirteen column"].doubling.grid>.row>.column{width:16.66666667%!important}.ui.grid>[class*="fourteen column"].doubling.row.row>.column,.ui[class*="fourteen column"].doubling.grid>.column:not(.row),.ui[class*="fourteen column"].doubling.grid>.row>.column{width:14.28571429%!important}.ui.grid>[class*="fifteen column"].doubling.row.row>.column,.ui[class*="fifteen column"].doubling.grid>.column:not(.row),.ui[class*="fifteen column"].doubling.grid>.row>.column{width:14.28571429%!important}.ui.grid>[class*="sixteen column"].doubling.row.row>.column,.ui[class*="sixteen column"].doubling.grid>.column:not(.row),.ui[class*="sixteen column"].doubling.grid>.row>.column{width:12.5%!important}}@media only screen and (max-width:767px){.ui.doubling.grid>.row,.ui.grid>.doubling.row{margin:0!important;padding:0!important}.ui.doubling.grid>.row>.column,.ui.grid>.doubling.row>.column{padding-top:1rem!important;padding-bottom:1rem!important;margin:0!important;box-shadow:none!important}.ui.grid>[class*="two column"].doubling:not(.stackable).row.row>.column,.ui[class*="two column"].doubling:not(.stackable).grid>.column:not(.row),.ui[class*="two column"].doubling:not(.stackable).grid>.row>.column{width:100%!important}.ui.grid>[class*="three column"].doubling:not(.stackable).row.row>.column,.ui[class*="three column"].doubling:not(.stackable).grid>.column:not(.row),.ui[class*="three column"].doubling:not(.stackable).grid>.row>.column{width:50%!important}.ui.grid>[class*="four column"].doubling:not(.stackable).row.row>.column,.ui[class*="four column"].doubling:not(.stackable).grid>.column:not(.row),.ui[class*="four column"].doubling:not(.stackable).grid>.row>.column{width:50%!important}.ui.grid>[class*="five column"].doubling:not(.stackable).row.row>.column,.ui[class*="five column"].doubling:not(.stackable).grid>.column:not(.row),.ui[class*="five column"].doubling:not(.stackable).grid>.row>.column{width:50%!important}.ui.grid>[class*="six column"].doubling:not(.stackable).row.row>.column,.ui[class*="six column"].doubling:not(.stackable).grid>.column:not(.row),.ui[class*="six column"].doubling:not(.stackable).grid>.row>.column{width:50%!important}.ui.grid>[class*="seven column"].doubling:not(.stackable).row.row>.column,.ui[class*="seven column"].doubling:not(.stackable).grid>.column:not(.row),.ui[class*="seven column"].doubling:not(.stackable).grid>.row>.column{width:50%!important}.ui.grid>[class*="eight column"].doubling:not(.stackable).row.row>.column,.ui[class*="eight column"].doubling:not(.stackable).grid>.column:not(.row),.ui[class*="eight column"].doubling:not(.stackable).grid>.row>.column{width:50%!important}.ui.grid>[class*="nine column"].doubling:not(.stackable).row.row>.column,.ui[class*="nine column"].doubling:not(.stackable).grid>.column:not(.row),.ui[class*="nine column"].doubling:not(.stackable).grid>.row>.column{width:33.33333333%!important}.ui.grid>[class*="ten column"].doubling:not(.stackable).row.row>.column,.ui[class*="ten column"].doubling:not(.stackable).grid>.column:not(.row),.ui[class*="ten column"].doubling:not(.stackable).grid>.row>.column{width:33.33333333%!important}.ui.grid>[class*="eleven column"].doubling:not(.stackable).row.row>.column,.ui[class*="eleven column"].doubling:not(.stackable).grid>.column:not(.row),.ui[class*="eleven column"].doubling:not(.stackable).grid>.row>.column{width:33.33333333%!important}.ui.grid>[class*="twelve column"].doubling:not(.stackable).row.row>.column,.ui[class*="twelve column"].doubling:not(.stackable).grid>.column:not(.row),.ui[class*="twelve column"].doubling:not(.stackable).grid>.row>.column{width:33.33333333%!important}.ui.grid>[class*="thirteen column"].doubling:not(.stackable).row.row>.column,.ui[class*="thirteen column"].doubling:not(.stackable).grid>.column:not(.row),.ui[class*="thirteen column"].doubling:not(.stackable).grid>.row>.column{width:33.33333333%!important}.ui.grid>[class*="fourteen column"].doubling:not(.stackable).row.row>.column,.ui[class*="fourteen column"].doubling:not(.stackable).grid>.column:not(.row),.ui[class*="fourteen column"].doubling:not(.stackable).grid>.row>.column{width:25%!important}.ui.grid>[class*="fifteen column"].doubling:not(.stackable).row.row>.column,.ui[class*="fifteen column"].doubling:not(.stackable).grid>.column:not(.row),.ui[class*="fifteen column"].doubling:not(.stackable).grid>.row>.column{width:25%!important}.ui.grid>[class*="sixteen column"].doubling:not(.stackable).row.row>.column,.ui[class*="sixteen column"].doubling:not(.stackable).grid>.column:not(.row),.ui[class*="sixteen column"].doubling:not(.stackable).grid>.row>.column{width:25%!important}}@media only screen and (max-width:767px){.ui.stackable.grid{width:auto;margin-left:0!important;margin-right:0!important}.ui.grid>.stackable.stackable.row>.column,.ui.stackable.grid>.column.grid>.column,.ui.stackable.grid>.column.row>.column,.ui.stackable.grid>.column:not(.row),.ui.stackable.grid>.row>.column,.ui.stackable.grid>.row>.wide.column,.ui.stackable.grid>.wide.column{width:100%!important;margin:0 0!important;box-shadow:none!important;padding:1rem 1rem!important}.ui.stackable.grid:not(.vertically)>.row{margin:0;padding:0}.ui.container>.ui.stackable.grid>.column,.ui.container>.ui.stackable.grid>.row>.column{padding-left:0!important;padding-right:0!important}.ui.grid .ui.stackable.grid,.ui.segment:not(.vertical) .ui.stackable.page.grid{margin-left:-1rem!important;margin-right:-1rem!important}.ui.stackable.celled.grid>.column:not(.row):first-child,.ui.stackable.celled.grid>.row:first-child>.column:first-child,.ui.stackable.divided.grid>.column:not(.row):first-child,.ui.stackable.divided.grid>.row:first-child>.column:first-child{border-top:none!important}.ui.inverted.stackable.celled.grid>.column:not(.row),.ui.inverted.stackable.celled.grid>.row>.column,.ui.inverted.stackable.divided.grid>.column:not(.row),.ui.inverted.stackable.divided.grid>.row>.column{border-top:1px solid rgba(255,255,255,.1)}.ui.stackable.celled.grid>.column:not(.row),.ui.stackable.celled.grid>.row>.column,.ui.stackable.divided:not(.vertically).grid>.column:not(.row),.ui.stackable.divided:not(.vertically).grid>.row>.column{border-top:1px solid rgba(34,36,38,.15);box-shadow:none!important;padding-top:2rem!important;padding-bottom:2rem!important}.ui.stackable.celled.grid>.row{box-shadow:none!important}.ui.stackable.divided:not(.vertically).grid>.column:not(.row),.ui.stackable.divided:not(.vertically).grid>.row>.column{padding-left:0!important;padding-right:0!important}}@media only screen and (max-width:767px){.ui.grid.grid.grid>.row>[class*="tablet only"].column:not(.mobile),.ui.grid.grid.grid>[class*="tablet only"].column:not(.mobile),.ui.grid.grid.grid>[class*="tablet only"].row:not(.mobile),.ui[class*="tablet only"].grid.grid.grid:not(.mobile){display:none!important}.ui.grid.grid.grid>.row>[class*="computer only"].column:not(.mobile),.ui.grid.grid.grid>[class*="computer only"].column:not(.mobile),.ui.grid.grid.grid>[class*="computer only"].row:not(.mobile),.ui[class*="computer only"].grid.grid.grid:not(.mobile){display:none!important}.ui.grid.grid.grid>.row>[class*="large screen only"].column:not(.mobile),.ui.grid.grid.grid>[class*="large screen only"].column:not(.mobile),.ui.grid.grid.grid>[class*="large screen only"].row:not(.mobile),.ui[class*="large screen only"].grid.grid.grid:not(.mobile){display:none!important}.ui.grid.grid.grid>.row>[class*="widescreen only"].column:not(.mobile),.ui.grid.grid.grid>[class*="widescreen only"].column:not(.mobile),.ui.grid.grid.grid>[class*="widescreen only"].row:not(.mobile),.ui[class*="widescreen only"].grid.grid.grid:not(.mobile){display:none!important}}@media only screen and (min-width:768px) and (max-width:991px){.ui.grid.grid.grid>.row>[class*="mobile only"].column:not(.tablet),.ui.grid.grid.grid>[class*="mobile only"].column:not(.tablet),.ui.grid.grid.grid>[class*="mobile only"].row:not(.tablet),.ui[class*="mobile only"].grid.grid.grid:not(.tablet){display:none!important}.ui.grid.grid.grid>.row>[class*="computer only"].column:not(.tablet),.ui.grid.grid.grid>[class*="computer only"].column:not(.tablet),.ui.grid.grid.grid>[class*="computer only"].row:not(.tablet),.ui[class*="computer only"].grid.grid.grid:not(.tablet){display:none!important}.ui.grid.grid.grid>.row>[class*="large screen only"].column:not(.mobile),.ui.grid.grid.grid>[class*="large screen only"].column:not(.mobile),.ui.grid.grid.grid>[class*="large screen only"].row:not(.mobile),.ui[class*="large screen only"].grid.grid.grid:not(.mobile){display:none!important}.ui.grid.grid.grid>.row>[class*="widescreen only"].column:not(.mobile),.ui.grid.grid.grid>[class*="widescreen only"].column:not(.mobile),.ui.grid.grid.grid>[class*="widescreen only"].row:not(.mobile),.ui[class*="widescreen only"].grid.grid.grid:not(.mobile){display:none!important}}@media only screen and (min-width:992px) and (max-width:1199px){.ui.grid.grid.grid>.row>[class*="mobile only"].column:not(.computer),.ui.grid.grid.grid>[class*="mobile only"].column:not(.computer),.ui.grid.grid.grid>[class*="mobile only"].row:not(.computer),.ui[class*="mobile only"].grid.grid.grid:not(.computer){display:none!important}.ui.grid.grid.grid>.row>[class*="tablet only"].column:not(.computer),.ui.grid.grid.grid>[class*="tablet only"].column:not(.computer),.ui.grid.grid.grid>[class*="tablet only"].row:not(.computer),.ui[class*="tablet only"].grid.grid.grid:not(.computer){display:none!important}.ui.grid.grid.grid>.row>[class*="large screen only"].column:not(.mobile),.ui.grid.grid.grid>[class*="large screen only"].column:not(.mobile),.ui.grid.grid.grid>[class*="large screen only"].row:not(.mobile),.ui[class*="large screen only"].grid.grid.grid:not(.mobile){display:none!important}.ui.grid.grid.grid>.row>[class*="widescreen only"].column:not(.mobile),.ui.grid.grid.grid>[class*="widescreen only"].column:not(.mobile),.ui.grid.grid.grid>[class*="widescreen only"].row:not(.mobile),.ui[class*="widescreen only"].grid.grid.grid:not(.mobile){display:none!important}}@media only screen and (min-width:1200px) and (max-width:1919px){.ui.grid.grid.grid>.row>[class*="mobile only"].column:not(.computer),.ui.grid.grid.grid>[class*="mobile only"].column:not(.computer),.ui.grid.grid.grid>[class*="mobile only"].row:not(.computer),.ui[class*="mobile only"].grid.grid.grid:not(.computer){display:none!important}.ui.grid.grid.grid>.row>[class*="tablet only"].column:not(.computer),.ui.grid.grid.grid>[class*="tablet only"].column:not(.computer),.ui.grid.grid.grid>[class*="tablet only"].row:not(.computer),.ui[class*="tablet only"].grid.grid.grid:not(.computer){display:none!important}.ui.grid.grid.grid>.row>[class*="widescreen only"].column:not(.mobile),.ui.grid.grid.grid>[class*="widescreen only"].column:not(.mobile),.ui.grid.grid.grid>[class*="widescreen only"].row:not(.mobile),.ui[class*="widescreen only"].grid.grid.grid:not(.mobile){display:none!important}}@media only screen and (min-width:1920px){.ui.grid.grid.grid>.row>[class*="mobile only"].column:not(.computer),.ui.grid.grid.grid>[class*="mobile only"].column:not(.computer),.ui.grid.grid.grid>[class*="mobile only"].row:not(.computer),.ui[class*="mobile only"].grid.grid.grid:not(.computer){display:none!important}.ui.grid.grid.grid>.row>[class*="tablet only"].column:not(.computer),.ui.grid.grid.grid>[class*="tablet only"].column:not(.computer),.ui.grid.grid.grid>[class*="tablet only"].row:not(.computer),.ui[class*="tablet only"].grid.grid.grid:not(.computer){display:none!important}}.ui.menu{display:-webkit-box;display:-ms-flexbox;display:flex;margin:1rem 0;font-family:Roboto,Arial,sans-serif;background:#fff;font-weight:400;border:1px solid rgba(34,36,38,.15);box-shadow:0 1px 6px rgba(0,0,0,.2);border-radius:4px;min-height:3.28571429em}.ui.menu:after{content:'';display:block;height:0;clear:both;visibility:hidden}.ui.menu:first-child{margin-top:0}.ui.menu:last-child{margin-bottom:0}.ui.menu .menu{margin:0}.ui.menu:not(.vertical)>.menu{display:-webkit-box;display:-ms-flexbox;display:flex}.ui.menu:not(.vertical) .item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ui.menu .item{position:relative;vertical-align:middle;line-height:1;text-decoration:none;-webkit-tap-highlight-color:transparent;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background:0 0;padding:1.14285714em 1.14285714em;text-transform:none;color:#212121;font-weight:400;-webkit-transition:background .1s ease,box-shadow .1s ease,color .1s ease;transition:background .1s ease,box-shadow .1s ease,color .1s ease}.ui.menu>.item:first-child{border-radius:4px 0 0 4px}.ui.menu .item:before{position:absolute;content:'';top:0;right:0;height:100%;width:0;background:rgba(34,36,38,.1)}.ui.menu .item>a:not(.ui),.ui.menu .item>p:only-child,.ui.menu .text.item>*{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;line-height:1.3}.ui.menu .item>p:first-child{margin-top:0}.ui.menu .item>p:last-child{margin-bottom:0}.ui.menu .item>i.icon{opacity:.9;float:none;margin:0 .35714286em 0 0}.ui.menu:not(.vertical) .item>.button{position:relative;top:0;margin:-.5em 0;padding-bottom:.78571429em;padding-top:.78571429em;font-size:1em}.ui.menu>.container,.ui.menu>.grid{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:inherit;-ms-flex-align:inherit;align-items:inherit;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:inherit;flex-direction:inherit}.ui.menu .item>.input{width:100%}.ui.menu:not(.vertical) .item>.input{position:relative;top:0;margin:-.5em 0}.ui.menu .item>.input input{font-size:1em;padding-top:.57142857em;padding-bottom:.57142857em}.ui.menu .header.item,.ui.vertical.menu .header.item{margin:0;background:'';text-transform:normal;font-weight:700}.ui.vertical.menu .item>.header:not(.ui){margin:0 0 .5em;font-size:1em;font-weight:700}.ui.menu .item>i.dropdown.icon{padding:0;float:right;margin:0 0 0 1em}.ui.menu .dropdown.item .menu{left:0;min-width:calc(100% - 1px);border-radius:0 0 4px 4px;background:#fff;margin:0 0 0;box-shadow:0 1px 3px 0 rgba(0,0,0,.08);-webkit-box-orient:vertical!important;-webkit-box-direction:normal!important;-ms-flex-direction:column!important;flex-direction:column!important}.ui.menu .ui.dropdown .menu>.item{margin:0;text-align:left;font-size:1em!important;padding:.78571429em 1.14285714em!important;background:0 0!important;color:#212121!important;text-transform:none!important;font-weight:400!important;box-shadow:none!important;-webkit-transition:none!important;transition:none!important}.ui.menu .ui.dropdown .menu>.item:hover{background:rgba(0,0,0,.05)!important;color:rgba(0,0,0,.95)!important}.ui.menu .ui.dropdown .menu>.selected.item{background:rgba(0,0,0,.05)!important;color:rgba(0,0,0,.95)!important}.ui.menu .ui.dropdown .menu>.active.item{background:rgba(0,0,0,.03)!important;font-weight:700!important;color:rgba(0,0,0,.95)!important}.ui.menu .ui.dropdown.item .menu .item:not(.filtered){display:block}.ui.menu .ui.dropdown .menu>.item .icon:not(.dropdown){display:inline-block;font-size:1em!important;float:none;margin:0 .75em 0 0}.ui.secondary.menu .dropdown.item>.menu,.ui.text.menu .dropdown.item>.menu{border-radius:4px;margin-top:.35714286em}.ui.menu .pointing.dropdown.item .menu{margin-top:.75em}.ui.inverted.menu .search.dropdown.item>.search,.ui.inverted.menu .search.dropdown.item>.text{color:rgba(255,255,255,.9)}.ui.vertical.menu .dropdown.item>.icon{float:right;content:"\f0da";margin-left:1em}.ui.vertical.menu .dropdown.item .menu{left:100%;min-width:0;margin:0;box-shadow:0 1px 3px 0 rgba(0,0,0,.08);border-radius:0 4px 4px 4px}.ui.vertical.menu .dropdown.item.upward .menu{bottom:0}.ui.vertical.menu .dropdown.item:not(.upward) .menu{top:0}.ui.vertical.menu .active.dropdown.item{border-top-right-radius:0;border-bottom-right-radius:0}.ui.vertical.menu .dropdown.active.item{box-shadow:none}.ui.item.menu .dropdown .menu .item{width:100%}.ui.menu .item>.label{background:#999;color:#fff;margin-left:1em;padding:.3em .78571429em}.ui.vertical.menu .item>.label{background:#999;color:#fff;margin-top:-.15em;margin-bottom:-.15em;padding:.3em .78571429em}.ui.menu .item>.floating.label{padding:.3em .78571429em}.ui.menu .item>img:not(.ui){display:inline-block;vertical-align:middle;margin:-.3em 0;width:2.5em}.ui.vertical.menu .item>img:not(.ui):only-child{display:block;max-width:100%;width:auto}.ui.vertical.sidebar.menu>.item:first-child:before{display:block!important}.ui.vertical.sidebar.menu>.item::before{top:auto;bottom:0}@media only screen and (max-width:767px){.ui.menu>.ui.container{width:100%!important;margin-left:0!important;margin-right:0!important}}@media only screen and (min-width:768px){.ui.menu:not(.secondary):not(.text):not(.tabular):not(.borderless)>.container>.item:not(.right):not(.borderless):first-child{border-left:0 solid rgba(34,36,38,.1)}}.ui.link.menu .item:hover,.ui.menu .dropdown.item:hover,.ui.menu .link.item:hover,.ui.menu a.item:hover{cursor:pointer;background:rgba(0,0,0,.03);color:rgba(0,0,0,.95)}.ui.link.menu .item:active,.ui.menu .link.item:active,.ui.menu a.item:active{background:rgba(0,0,0,.03);color:rgba(0,0,0,.95)}.ui.menu .active.item{background:rgba(0,0,0,.05);color:rgba(0,0,0,.95);font-weight:400;box-shadow:none}.ui.menu .active.item>i.icon{opacity:1}.ui.menu .active.item:hover,.ui.vertical.menu .active.item:hover{background-color:rgba(0,0,0,.05);color:rgba(0,0,0,.95)}.ui.menu .item.disabled,.ui.menu .item.disabled:hover{cursor:default;background-color:transparent!important;color:rgba(40,40,40,.3)}.ui.menu:not(.vertical) .left.item,.ui.menu:not(.vertical) .left.menu{display:-webkit-box;display:-ms-flexbox;display:flex;margin-right:auto!important}.ui.menu:not(.vertical) .right.item,.ui.menu:not(.vertical) .right.menu{display:-webkit-box;display:-ms-flexbox;display:flex;margin-left:auto!important}.ui.menu .right.item::before,.ui.menu .right.menu>.item::before{right:auto;left:0}.ui.vertical.menu{display:block;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;background:#fff;box-shadow:0 1px 6px rgba(0,0,0,.2)}.ui.vertical.menu .item{display:block;background:0 0;border-top:none;border-right:none}.ui.vertical.menu>.item:first-child{border-radius:4px 4px 0 0}.ui.vertical.menu>.item:last-child{border-radius:0 0 4px 4px}.ui.vertical.menu .item>.label{float:right;text-align:center}.ui.vertical.menu .item>i.icon{width:1.18em;float:right;margin:0 0 0 .5em}.ui.vertical.menu .item>.label+i.icon{float:none;margin:0 .5em 0 0}.ui.vertical.menu .item:before{position:absolute;content:'';top:0;left:0;width:100%;height:0;background:rgba(34,36,38,.1)}.ui.vertical.menu .item:first-child:before{display:none!important}.ui.vertical.menu .item>.menu{margin:.5em -1.14285714em 0}.ui.vertical.menu .menu .item{background:0 0;padding:.5em 1.33333333em;font-size:.85714286em;color:rgba(0,0,0,.5)}.ui.vertical.menu .item .menu .link.item:hover,.ui.vertical.menu .item .menu a.item:hover{color:rgba(0,0,0,.85)}.ui.vertical.menu .menu .item:before{display:none}.ui.vertical.menu .active.item{background:rgba(0,0,0,.05);border-radius:0;box-shadow:none}.ui.vertical.menu>.active.item:first-child{border-radius:4px 4px 0 0}.ui.vertical.menu>.active.item:last-child{border-radius:0 0 4px 4px}.ui.vertical.menu>.active.item:only-child{border-radius:4px}.ui.vertical.menu .active.item .menu .active.item{border-left:none}.ui.vertical.menu .item .menu .active.item{background-color:transparent;font-weight:700;color:rgba(0,0,0,.95)}.ui.tabular.menu{border-radius:0;box-shadow:none!important;border:none;background:none transparent;border-bottom:1px solid #d4d4d5}.ui.tabular.fluid.menu{width:calc(100% + 2px)!important}.ui.tabular.menu .item{background:0 0;border-bottom:none;border-left:1px solid transparent;border-right:1px solid transparent;border-top:2px solid transparent;padding:1.14285714em 1.42857143em;color:#212121}.ui.tabular.menu .item:before{display:none}.ui.tabular.menu .item:hover{background-color:transparent;color:rgba(0,0,0,.8)}.ui.tabular.menu .active.item{background:none #fff;color:rgba(0,0,0,.95);border-top-width:1px;border-color:#d4d4d5;font-weight:700;margin-bottom:-1px;box-shadow:none;border-radius:4px 4px 0 0!important}.ui.tabular.menu+.attached:not(.top).segment,.ui.tabular.menu+.attached:not(.top).segment+.attached:not(.top).segment{border-top:none;margin-left:0;margin-top:0;margin-right:0;width:100%}.top.attached.segment+.ui.bottom.tabular.menu{position:relative;width:calc(100% + 2px);left:-1px}.ui.bottom.tabular.menu{background:none transparent;border-radius:0;box-shadow:none!important;border-bottom:none;border-top:1px solid #d4d4d5}.ui.bottom.tabular.menu .item{background:0 0;border-left:1px solid transparent;border-right:1px solid transparent;border-bottom:1px solid transparent;border-top:none}.ui.bottom.tabular.menu .active.item{background:none #fff;color:rgba(0,0,0,.95);border-color:#d4d4d5;margin:-1px 0 0 0;border-radius:0 0 4px 4px!important}.ui.vertical.tabular.menu{background:none transparent;border-radius:0;box-shadow:none!important;border-bottom:none;border-right:1px solid #d4d4d5}.ui.vertical.tabular.menu .item{background:0 0;border-left:1px solid transparent;border-bottom:1px solid transparent;border-top:1px solid transparent;border-right:none}.ui.vertical.tabular.menu .active.item{background:none #fff;color:rgba(0,0,0,.95);border-color:#d4d4d5;margin:0 -1px 0 0;border-radius:4px 0 0 4px!important}.ui.vertical.right.tabular.menu{background:none transparent;border-radius:0;box-shadow:none!important;border-bottom:none;border-right:none;border-left:1px solid #d4d4d5}.ui.vertical.right.tabular.menu .item{background:0 0;border-right:1px solid transparent;border-bottom:1px solid transparent;border-top:1px solid transparent;border-left:none}.ui.vertical.right.tabular.menu .active.item{background:none #fff;color:rgba(0,0,0,.95);border-color:#d4d4d5;margin:0 0 0 -1px;border-radius:0 4px 4px 0!important}.ui.tabular.menu .active.dropdown.item{margin-bottom:0;border-left:1px solid transparent;border-right:1px solid transparent;border-top:2px solid transparent;border-bottom:none}.ui.pagination.menu{margin:0;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.ui.pagination.menu .item:last-child{border-radius:0 4px 4px 0}.ui.compact.menu .item:last-child{border-radius:0 4px 4px 0}.ui.pagination.menu .item:last-child:before{display:none}.ui.pagination.menu .item{min-width:3em;text-align:center}.ui.pagination.menu .icon.item i.icon{vertical-align:top}.ui.pagination.menu .active.item{border-top:none;padding-top:1.14285714em;background-color:rgba(0,0,0,.05);color:rgba(0,0,0,.95);box-shadow:none}.ui.secondary.menu{background:0 0;margin-left:-.35714286em;margin-right:-.35714286em;border-radius:0;border:none;box-shadow:none}.ui.secondary.menu .item{-ms-flex-item-align:center;align-self:center;box-shadow:none;border:none;padding:.78571429em .92857143em;margin:0 .35714286em;background:0 0;-webkit-transition:color .1s ease;transition:color .1s ease;border-radius:4px}.ui.secondary.menu .item:before{display:none!important}.ui.secondary.menu .header.item{border-radius:0;border-right:none;background:none transparent}.ui.secondary.menu .item>img:not(.ui){margin:0}.ui.secondary.menu .dropdown.item:hover,.ui.secondary.menu .link.item:hover,.ui.secondary.menu a.item:hover{background:rgba(0,0,0,.05);color:rgba(0,0,0,.95)}.ui.secondary.menu .active.item{box-shadow:none;background:rgba(0,0,0,.05);color:rgba(0,0,0,.95);border-radius:4px}.ui.secondary.menu .active.item:hover{box-shadow:none;background:rgba(0,0,0,.05);color:rgba(0,0,0,.95)}.ui.secondary.inverted.menu .link.item,.ui.secondary.inverted.menu a.item{color:rgba(255,255,255,.7)!important}.ui.secondary.inverted.menu .dropdown.item:hover,.ui.secondary.inverted.menu .link.item:hover,.ui.secondary.inverted.menu a.item:hover{background:rgba(255,255,255,.08);color:#fff!important}.ui.secondary.inverted.menu .active.item{background:rgba(255,255,255,.15);color:#fff!important}.ui.secondary.item.menu{margin-left:0;margin-right:0}.ui.secondary.item.menu .item:last-child{margin-right:0}.ui.secondary.attached.menu{box-shadow:none}.ui.vertical.secondary.menu .item:not(.dropdown)>.menu{margin:0 -.92857143em}.ui.vertical.secondary.menu .item:not(.dropdown)>.menu>.item{margin:0;padding:.5em 1.33333333em}.ui.secondary.vertical.menu>.item{border:none;margin:0 0 .35714286em;border-radius:4px!important}.ui.secondary.vertical.menu>.header.item{border-radius:0}.ui.vertical.secondary.menu .item>.menu .item{background-color:transparent}.ui.secondary.inverted.menu{background-color:transparent}.ui.secondary.pointing.menu{margin-left:0;margin-right:0;border-bottom:2px solid rgba(34,36,38,.15)}.ui.secondary.pointing.menu .item{border-bottom-color:transparent;border-bottom-style:solid;border-radius:0;-ms-flex-item-align:end;align-self:flex-end;margin:0 0 -2px;padding:.85714286em 1.14285714em;border-bottom-width:2px;-webkit-transition:color .1s ease;transition:color .1s ease}.ui.secondary.pointing.menu .header.item{color:rgba(0,0,0,.85)!important}.ui.secondary.pointing.menu .text.item{box-shadow:none!important}.ui.secondary.pointing.menu .item:after{display:none}.ui.secondary.pointing.menu .dropdown.item:hover,.ui.secondary.pointing.menu .link.item:hover,.ui.secondary.pointing.menu a.item:hover{background-color:transparent;color:#212121}.ui.secondary.pointing.menu .dropdown.item:active,.ui.secondary.pointing.menu .link.item:active,.ui.secondary.pointing.menu a.item:active{background-color:transparent;border-color:rgba(34,36,38,.15)}.ui.secondary.pointing.menu .active.item{background-color:transparent;box-shadow:none;border-color:#1b1c1d;font-weight:700;color:rgba(0,0,0,.95)}.ui.secondary.pointing.menu .active.item:hover{border-color:#1b1c1d;color:rgba(0,0,0,.95)}.ui.secondary.pointing.menu .active.dropdown.item{border-color:transparent}.ui.secondary.vertical.pointing.menu{border-bottom-width:0;border-right-width:2px;border-right-style:solid;border-right-color:rgba(34,36,38,.15)}.ui.secondary.vertical.pointing.menu .item{border-bottom:none;border-right-style:solid;border-right-color:transparent;border-radius:0!important;margin:0 -2px 0 0;border-right-width:2px}.ui.secondary.vertical.pointing.menu .active.item{border-color:#1b1c1d}.ui.secondary.inverted.pointing.menu{border-color:rgba(255,255,255,.1)}.ui.secondary.inverted.pointing.menu{border-width:2px;border-color:rgba(34,36,38,.15)}.ui.secondary.inverted.pointing.menu .item{color:rgba(255,255,255,.9)}.ui.secondary.inverted.pointing.menu .header.item{color:#fff!important}.ui.secondary.inverted.pointing.menu .link.item:hover,.ui.secondary.inverted.pointing.menu a.item:hover{color:rgba(0,0,0,.95)}.ui.secondary.inverted.pointing.menu .active.item{border-color:#fff;color:#fff}.ui.text.menu{background:none transparent;border-radius:0;box-shadow:none;border:none;margin:1em -.5em}.ui.text.menu .item{border-radius:0;box-shadow:none;-ms-flex-item-align:center;align-self:center;margin:0 0;padding:.35714286em .5em;font-weight:400;color:rgba(0,0,0,.6);-webkit-transition:opacity .1s ease;transition:opacity .1s ease}.ui.text.menu .item:before,.ui.text.menu .menu .item:before{display:none!important}.ui.text.menu .header.item{background-color:transparent;opacity:1;color:rgba(0,0,0,.85);font-size:.92857143em;text-transform:uppercase;font-weight:700}.ui.text.menu .item>img:not(.ui){margin:0}.ui.text.item.menu .item{margin:0}.ui.vertical.text.menu{margin:1em 0}.ui.vertical.text.menu:first-child{margin-top:0}.ui.vertical.text.menu:last-child{margin-bottom:0}.ui.vertical.text.menu .item{margin:.57142857em 0;padding-left:0;padding-right:0}.ui.vertical.text.menu .item>i.icon{float:none;margin:0 .35714286em 0 0}.ui.vertical.text.menu .header.item{margin:.57142857em 0 .71428571em}.ui.vertical.text.menu .item:not(.dropdown)>.menu{margin:0}.ui.vertical.text.menu .item:not(.dropdown)>.menu>.item{margin:0;padding:.5em 0}.ui.text.menu .item:hover{opacity:1;background-color:transparent}.ui.text.menu .active.item{background-color:transparent;border:none;box-shadow:none;font-weight:400;color:rgba(0,0,0,.95)}.ui.text.menu .active.item:hover{background-color:transparent}.ui.text.pointing.menu .active.item:after{box-shadow:none}.ui.text.attached.menu{box-shadow:none}.ui.inverted.text.menu,.ui.inverted.text.menu .active.item,.ui.inverted.text.menu .item,.ui.inverted.text.menu .item:hover{background-color:transparent!important}.ui.fluid.text.menu{margin-left:0;margin-right:0}.ui.vertical.icon.menu{display:inline-block;width:auto}.ui.icon.menu .item{height:auto;text-align:center;color:#1b1c1d}.ui.icon.menu .item>.icon:not(.dropdown){margin:0;opacity:1}.ui.icon.menu .icon:before{opacity:1}.ui.menu .icon.item>.icon{width:auto;margin:0 auto}.ui.vertical.icon.menu .item>.icon:not(.dropdown){display:block;opacity:1;margin:0 auto;float:none}.ui.inverted.icon.menu .item{color:#fff}.ui.labeled.icon.menu{text-align:center}.ui.labeled.icon.menu .item{min-width:6em;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.ui.labeled.icon.menu .item>.icon:not(.dropdown){height:1em;display:block;font-size:1.71428571em!important;margin:0 auto .5rem!important}.ui.fluid.labeled.icon.menu>.item{min-width:0}@media only screen and (max-width:767px){.ui.stackable.menu{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.ui.stackable.menu .item{width:100%!important}.ui.stackable.menu .item:before{position:absolute;content:'';top:auto;bottom:0;left:0;width:100%;height:0;background:rgba(34,36,38,.1)}.ui.stackable.menu .left.item,.ui.stackable.menu .left.menu{margin-right:0!important}.ui.stackable.menu .right.item,.ui.stackable.menu .right.menu{margin-left:0!important}}.ui.menu .red.active.item,.ui.red.menu .active.item{border-color:#f44336!important;color:#f44336!important}.ui.menu .orange.active.item,.ui.orange.menu .active.item{border-color:#ff9800!important;color:#ff9800!important}.ui.menu .yellow.active.item,.ui.yellow.menu .active.item{border-color:#ffeb3b!important;color:#ffeb3b!important}.ui.menu .olive.active.item,.ui.olive.menu .active.item{border-color:#b5cc18!important;color:#b5cc18!important}.ui.green.menu .active.item,.ui.menu .green.active.item{border-color:#4caf50!important;color:#4caf50!important}.ui.menu .teal.active.item,.ui.teal.menu .active.item{border-color:#1de9b6!important;color:#1de9b6!important}.ui.blue.menu .active.item,.ui.menu .blue.active.item{border-color:#2196f3!important;color:#2196f3!important}.ui.menu .violet.active.item,.ui.violet.menu .active.item{border-color:#6435c9!important;color:#6435c9!important}.ui.menu .purple.active.item,.ui.purple.menu .active.item{border-color:#9c27b0!important;color:#9c27b0!important}.ui.menu .pink.active.item,.ui.pink.menu .active.item{border-color:#e91e63!important;color:#e91e63!important}.ui.brown.menu .active.item,.ui.menu .brown.active.item{border-color:#a5673f!important;color:#a5673f!important}.ui.grey.menu .active.item,.ui.menu .grey.active.item{border-color:#9e9e9e!important;color:#9e9e9e!important}.ui.inverted.menu{border:0 solid transparent;background:#1b1c1d;box-shadow:none}.ui.inverted.menu .item,.ui.inverted.menu .item>a:not(.ui){background:0 0;color:rgba(255,255,255,.9)}.ui.inverted.menu .item.menu{background:0 0}.ui.inverted.menu .item:before{background:rgba(255,255,255,.08)}.ui.vertical.inverted.menu .item:before{background:rgba(255,255,255,.08)}.ui.vertical.inverted.menu .menu .item,.ui.vertical.inverted.menu .menu .item a:not(.ui){color:rgba(255,255,255,.5)}.ui.inverted.menu .header.item{margin:0;background:0 0;box-shadow:none}.ui.inverted.menu .item.disabled,.ui.inverted.menu .item.disabled:hover{color:rgba(225,225,225,.3)}.ui.inverted.menu .dropdown.item:hover,.ui.inverted.menu .link.item:hover,.ui.inverted.menu a.item:hover,.ui.link.inverted.menu .item:hover{background:rgba(255,255,255,.08);color:#fff}.ui.vertical.inverted.menu .item .menu .link.item:hover,.ui.vertical.inverted.menu .item .menu a.item:hover{background:0 0;color:#fff}.ui.inverted.menu .link.item:active,.ui.inverted.menu a.item:active{background:rgba(255,255,255,.08);color:#fff}.ui.inverted.menu .active.item{background:rgba(255,255,255,.15);color:#fff!important}.ui.inverted.vertical.menu .item .menu .active.item{background:0 0;color:#fff}.ui.inverted.pointing.menu .active.item:after{background:#3d3e3f!important;margin:0!important;box-shadow:none!important;border:none!important}.ui.inverted.menu .active.item:hover{background:rgba(255,255,255,.15);color:#fff!important}.ui.inverted.pointing.menu .active.item:hover:after{background:#3d3e3f!important}.ui.floated.menu{float:left;margin:0 .5rem 0 0}.ui.floated.menu .item:last-child:before{display:none}.ui.right.floated.menu{float:right;margin:0 0 0 .5rem}.ui.inverted.menu .red.active.item,.ui.inverted.red.menu{background-color:#f44336}.ui.inverted.red.menu .item:before{background-color:rgba(34,36,38,.1)}.ui.inverted.red.menu .active.item{background-color:rgba(0,0,0,.1)!important}.ui.inverted.menu .orange.active.item,.ui.inverted.orange.menu{background-color:#ff9800}.ui.inverted.orange.menu .item:before{background-color:rgba(34,36,38,.1)}.ui.inverted.orange.menu .active.item{background-color:rgba(0,0,0,.1)!important}.ui.inverted.menu .yellow.active.item,.ui.inverted.yellow.menu{background-color:#ffeb3b}.ui.inverted.yellow.menu .item:before{background-color:rgba(34,36,38,.1)}.ui.inverted.yellow.menu .active.item{background-color:rgba(0,0,0,.1)!important}.ui.inverted.menu .olive.active.item,.ui.inverted.olive.menu{background-color:#b5cc18}.ui.inverted.olive.menu .item:before{background-color:rgba(34,36,38,.1)}.ui.inverted.olive.menu .active.item{background-color:rgba(0,0,0,.1)!important}.ui.inverted.green.menu,.ui.inverted.menu .green.active.item{background-color:#4caf50}.ui.inverted.green.menu .item:before{background-color:rgba(34,36,38,.1)}.ui.inverted.green.menu .active.item{background-color:rgba(0,0,0,.1)!important}.ui.inverted.menu .teal.active.item,.ui.inverted.teal.menu{background-color:#1de9b6}.ui.inverted.teal.menu .item:before{background-color:rgba(34,36,38,.1)}.ui.inverted.teal.menu .active.item{background-color:rgba(0,0,0,.1)!important}.ui.inverted.blue.menu,.ui.inverted.menu .blue.active.item{background-color:#2196f3}.ui.inverted.blue.menu .item:before{background-color:rgba(34,36,38,.1)}.ui.inverted.blue.menu .active.item{background-color:rgba(0,0,0,.1)!important}.ui.inverted.menu .violet.active.item,.ui.inverted.violet.menu{background-color:#6435c9}.ui.inverted.violet.menu .item:before{background-color:rgba(34,36,38,.1)}.ui.inverted.violet.menu .active.item{background-color:rgba(0,0,0,.1)!important}.ui.inverted.menu .purple.active.item,.ui.inverted.purple.menu{background-color:#9c27b0}.ui.inverted.purple.menu .item:before{background-color:rgba(34,36,38,.1)}.ui.inverted.purple.menu .active.item{background-color:rgba(0,0,0,.1)!important}.ui.inverted.menu .pink.active.item,.ui.inverted.pink.menu{background-color:#e91e63}.ui.inverted.pink.menu .item:before{background-color:rgba(34,36,38,.1)}.ui.inverted.pink.menu .active.item{background-color:rgba(0,0,0,.1)!important}.ui.inverted.brown.menu,.ui.inverted.menu .brown.active.item{background-color:#a5673f}.ui.inverted.brown.menu .item:before{background-color:rgba(34,36,38,.1)}.ui.inverted.brown.menu .active.item{background-color:rgba(0,0,0,.1)!important}.ui.inverted.grey.menu,.ui.inverted.menu .grey.active.item{background-color:#9e9e9e}.ui.inverted.grey.menu .item:before{background-color:rgba(34,36,38,.1)}.ui.inverted.grey.menu .active.item{background-color:rgba(0,0,0,.1)!important}.ui.fitted.menu .item,.ui.fitted.menu .item .menu .item,.ui.menu .fitted.item{padding:0}.ui.horizontally.fitted.menu .item,.ui.horizontally.fitted.menu .item .menu .item,.ui.menu .horizontally.fitted.item{padding-top:1.14285714em;padding-bottom:1.14285714em}.ui.menu .vertically.fitted.item,.ui.vertically.fitted.menu .item,.ui.vertically.fitted.menu .item .menu .item{padding-left:1.14285714em;padding-right:1.14285714em}.ui.borderless.menu .item .menu .item:before,.ui.borderless.menu .item:before,.ui.menu .borderless.item:before{background:0 0!important}.ui.compact.menu{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;margin:0;vertical-align:middle}.ui.compact.vertical.menu{display:inline-block}.ui.compact.menu .item:last-child{border-radius:0 4px 4px 0}.ui.compact.menu .item:last-child:before{display:none}.ui.compact.vertical.menu{width:auto!important}.ui.compact.vertical.menu .item:last-child::before{display:block}.ui.menu.fluid,.ui.vertical.menu.fluid{width:100%!important}.ui.item.menu,.ui.item.menu .item{width:100%;padding-left:0!important;padding-right:0!important;margin-left:0!important;margin-right:0!important;text-align:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.ui.item.menu .item:last-child:before{display:none}.ui.menu.two.item .item{width:50%}.ui.menu.three.item .item{width:33.333%}.ui.menu.four.item .item{width:25%}.ui.menu.five.item .item{width:20%}.ui.menu.six.item .item{width:16.666%}.ui.menu.seven.item .item{width:14.285%}.ui.menu.eight.item .item{width:12.5%}.ui.menu.nine.item .item{width:11.11%}.ui.menu.ten.item .item{width:10%}.ui.menu.eleven.item .item{width:9.09%}.ui.menu.twelve.item .item{width:8.333%}.ui.menu.fixed{position:fixed;z-index:101;margin:0;width:100%}.ui.menu.fixed,.ui.menu.fixed .item:first-child,.ui.menu.fixed .item:last-child{border-radius:0!important}.ui.fixed.menu,.ui[class*="top fixed"].menu{top:0;left:0;right:auto;bottom:auto}.ui[class*="top fixed"].menu{border-top:none;border-left:none;border-right:none}.ui[class*="right fixed"].menu{border-top:none;border-bottom:none;border-right:none;top:0;right:0;left:auto;bottom:auto;width:auto;height:100%}.ui[class*="bottom fixed"].menu{border-bottom:none;border-left:none;border-right:none;bottom:0;left:0;top:auto;right:auto}.ui[class*="left fixed"].menu{border-top:none;border-bottom:none;border-left:none;top:0;left:0;right:auto;bottom:auto;width:auto;height:100%}.ui.fixed.menu+.ui.grid{padding-top:2.75rem}.ui.pointing.menu .item:after{visibility:hidden;position:absolute;content:'';top:100%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%) rotate(45deg);transform:translateX(-50%) translateY(-50%) rotate(45deg);background:0 0;margin:.5px 0 0;width:.57142857em;height:.57142857em;border:none;border-bottom:1px solid #d4d4d5;border-right:1px solid #d4d4d5;z-index:2;-webkit-transition:background .1s ease;transition:background .1s ease}.ui.vertical.pointing.menu .item:after{position:absolute;top:50%;right:0;bottom:auto;left:auto;-webkit-transform:translateX(50%) translateY(-50%) rotate(45deg);transform:translateX(50%) translateY(-50%) rotate(45deg);margin:0 -.5px 0 0;border:none;border-top:1px solid #d4d4d5;border-right:1px solid #d4d4d5}.ui.pointing.menu .active.item:after{visibility:visible}.ui.pointing.menu .active.dropdown.item:after{visibility:hidden}.ui.pointing.menu .active.item .menu .active.item:after,.ui.pointing.menu .dropdown.active.item:after{display:none}.ui.pointing.menu .active.item:hover:after{background-color:#f2f2f2}.ui.pointing.menu .active.item:after{background-color:#f2f2f2}.ui.pointing.menu .active.item:hover:after{background-color:#f2f2f2}.ui.vertical.pointing.menu .active.item:hover:after{background-color:#f2f2f2}.ui.vertical.pointing.menu .active.item:after{background-color:#f2f2f2}.ui.vertical.pointing.menu .menu .active.item:after{background-color:#fff}.ui.attached.menu{top:0;bottom:0;border-radius:0;margin:0 -1px;width:calc(100% + 2px);max-width:calc(100% + 2px);box-shadow:none}.ui.attached+.ui.attached.menu:not(.top){border-top:none}.ui[class*="top attached"].menu{bottom:0;margin-bottom:0;top:0;margin-top:1rem;border-radius:4px 4px 0 0}.ui.menu[class*="top attached"]:first-child{margin-top:0}.ui[class*="bottom attached"].menu{bottom:0;margin-top:0;top:0;margin-bottom:1rem;box-shadow:0 1px 6px rgba(0,0,0,.2),none;border-radius:0 0 4px 4px}.ui[class*="bottom attached"].menu:last-child{margin-bottom:0}.ui.top.attached.menu>.item:first-child{border-radius:4px 0 0 0}.ui.bottom.attached.menu>.item:first-child{border-radius:0 0 0 4px}.ui.attached.menu:not(.tabular){border:1px solid #d4d4d5}.ui.attached.inverted.menu{border:none}.ui.attached.tabular.menu{margin-left:0;margin-right:0;width:100%}.ui.mini.menu{font-size:.78571429rem}.ui.mini.vertical.menu{width:9rem}.ui.tiny.menu{font-size:.85714286rem}.ui.tiny.vertical.menu{width:11rem}.ui.small.menu{font-size:.92857143rem}.ui.small.vertical.menu{width:13rem}.ui.menu{font-size:1rem}.ui.vertical.menu{width:15rem}.ui.large.menu{font-size:1.07142857rem}.ui.large.vertical.menu{width:18rem}.ui.huge.menu{font-size:1.14285714rem}.ui.huge.vertical.menu{width:20rem}.ui.big.menu{font-size:1.21428571rem}.ui.big.vertical.menu{width:22rem}.ui.massive.menu{font-size:1.28571429rem}.ui.massive.vertical.menu{width:25rem}/*! + * # Semantic UI 2.2.10 - Message + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.message{position:relative;min-height:1em;margin:1em 0;background:#f8f8f9;padding:1em 1.5em;line-height:1.4285em;color:rgba(0,0,0,.87);-webkit-transition:opacity .1s ease,color .1s ease,background .1s ease,box-shadow .1s ease;transition:opacity .1s ease,color .1s ease,background .1s ease,box-shadow .1s ease;border-radius:.28571429rem;box-shadow:0 0 0 1px rgba(34,36,38,.22) inset,0 0 0 0 transparent}.ui.message:first-child{margin-top:0}.ui.message:last-child{margin-bottom:0}.ui.message .header{display:block;font-family:HelveticaNeueLTStd-Lt,Helvetica,Arial,sans-serif;font-weight:700;margin:-.14285714em 0 0 0}.ui.message .header:not(.ui){font-size:1.14285714em}.ui.message p{opacity:.85;margin:.75em 0}.ui.message p:first-child{margin-top:0}.ui.message p:last-child{margin-bottom:0}.ui.message .header+p{margin-top:.25em}.ui.message .list:not(.ui){text-align:left;padding:0;opacity:.85;list-style-position:inside;margin:.5em 0 0}.ui.message .list:not(.ui):first-child{margin-top:0}.ui.message .list:not(.ui):last-child{margin-bottom:0}.ui.message .list:not(.ui) li{position:relative;list-style-type:none;margin:0 0 .3em 1em;padding:0}.ui.message .list:not(.ui) li:before{position:absolute;content:'•';left:-1em;height:100%;vertical-align:baseline}.ui.message .list:not(.ui) li:last-child{margin-bottom:0}.ui.message>.icon{margin-right:.6em}.ui.message>.close.icon{cursor:pointer;position:absolute;margin:0;top:.78575em;right:.5em;opacity:.7;-webkit-transition:opacity .1s ease;transition:opacity .1s ease}.ui.message>.close.icon:hover{opacity:1}.ui.message>:first-child{margin-top:0}.ui.message>:last-child{margin-bottom:0}.ui.dropdown .menu>.message{margin:0 -1px}.ui.visible.visible.visible.visible.message{display:block}.ui.icon.visible.visible.visible.visible.message{display:-webkit-box;display:-ms-flexbox;display:flex}.ui.hidden.hidden.hidden.hidden.message{display:none}.ui.compact.message{display:inline-block}.ui.attached.message{margin-bottom:-1px;border-radius:.28571429rem .28571429rem 0 0;box-shadow:0 0 0 1px rgba(34,36,38,.15) inset;margin-left:-1px;margin-right:-1px}.ui.attached+.ui.attached.message:not(.top):not(.bottom){margin-top:-1px;border-radius:0}.ui.bottom.attached.message{margin-top:-1px;border-radius:0 0 .28571429rem .28571429rem;box-shadow:0 0 0 1px rgba(34,36,38,.15) inset,0 1px 2px 0 rgba(34,36,38,.15)}.ui.bottom.attached.message:not(:last-child){margin-bottom:1em}.ui.attached.icon.message{width:auto}.ui.icon.message{display:-webkit-box;display:-ms-flexbox;display:flex;width:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ui.icon.message>.icon:not(.close){display:block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;line-height:1;vertical-align:middle;font-size:3em;opacity:.8}.ui.icon.message>.content{display:block;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;vertical-align:middle}.ui.icon.message .icon:not(.close)+.content{padding-left:0}.ui.icon.message .circular.icon{width:1em}.ui.floating.message{box-shadow:0 0 0 1px rgba(34,36,38,.22) inset,0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15)}.ui.black.message{background-color:#1b1c1d;color:rgba(255,255,255,.9)}.ui.positive.message{background-color:#fcfff5;color:#2c662d}.ui.attached.positive.message,.ui.positive.message{box-shadow:0 0 0 1px #a3c293 inset,0 0 0 0 transparent}.ui.positive.message .header{color:#1a531b}.ui.negative.message{background-color:#fff6f6;color:#9f3a38}.ui.attached.negative.message,.ui.negative.message{box-shadow:0 0 0 1px #e0b4b4 inset,0 0 0 0 transparent}.ui.negative.message .header{color:#912d2b}.ui.info.message{background-color:#f8ffff;color:#276f86}.ui.attached.info.message,.ui.info.message{box-shadow:0 0 0 1px #a9d5de inset,0 0 0 0 transparent}.ui.info.message .header{color:#0e566c}.ui.warning.message{background-color:#fffaf3;color:#573a08}.ui.attached.warning.message,.ui.warning.message{box-shadow:0 0 0 1px #c9ba9b inset,0 0 0 0 transparent}.ui.warning.message .header{color:#794b02}.ui.error.message{background-color:#fff6f6;color:#9f3a38}.ui.attached.error.message,.ui.error.message{box-shadow:0 0 0 1px #e0b4b4 inset,0 0 0 0 transparent}.ui.error.message .header{color:#912d2b}.ui.success.message{background-color:#fcfff5;color:#2c662d}.ui.attached.success.message,.ui.success.message{box-shadow:0 0 0 1px #a3c293 inset,0 0 0 0 transparent}.ui.success.message .header{color:#1a531b}.ui.black.message,.ui.inverted.message{background-color:#1b1c1d;color:rgba(255,255,255,.9)}.ui.red.message{background-color:#ffe8e6;color:#db2828;box-shadow:0 0 0 1px #db2828 inset,0 0 0 0 transparent}.ui.red.message .header{color:#c82121}.ui.orange.message{background-color:#ffedde;color:#f2711c;box-shadow:0 0 0 1px #f2711c inset,0 0 0 0 transparent}.ui.orange.message .header{color:#e7640d}.ui.yellow.message{background-color:#fff8db;color:#b58105;box-shadow:0 0 0 1px #b58105 inset,0 0 0 0 transparent}.ui.yellow.message .header{color:#9c6f04}.ui.olive.message{background-color:#fbfdef;color:#8abc1e;box-shadow:0 0 0 1px #8abc1e inset,0 0 0 0 transparent}.ui.olive.message .header{color:#7aa61a}.ui.green.message{background-color:#e5f9e7;color:#1ebc30;box-shadow:0 0 0 1px #1ebc30 inset,0 0 0 0 transparent}.ui.green.message .header{color:#1aa62a}.ui.teal.message{background-color:#e1f7f7;color:#10a3a3;box-shadow:0 0 0 1px #10a3a3 inset,0 0 0 0 transparent}.ui.teal.message .header{color:#0e8c8c}.ui.blue.message{background-color:#dff0ff;color:#2185d0;box-shadow:0 0 0 1px #2185d0 inset,0 0 0 0 transparent}.ui.blue.message .header{color:#1e77ba}.ui.violet.message{background-color:#eae7ff;color:#6435c9;box-shadow:0 0 0 1px #6435c9 inset,0 0 0 0 transparent}.ui.violet.message .header{color:#5a30b5}.ui.purple.message{background-color:#f6e7ff;color:#a333c8;box-shadow:0 0 0 1px #a333c8 inset,0 0 0 0 transparent}.ui.purple.message .header{color:#922eb4}.ui.pink.message{background-color:#ffe3fb;color:#e03997;box-shadow:0 0 0 1px #e03997 inset,0 0 0 0 transparent}.ui.pink.message .header{color:#dd238b}.ui.brown.message{background-color:#f1e2d3;color:#a5673f;box-shadow:0 0 0 1px #a5673f inset,0 0 0 0 transparent}.ui.brown.message .header{color:#935b38}.ui.mini.message{font-size:.78571429em}.ui.tiny.message{font-size:.85714286em}.ui.small.message{font-size:.92857143em}.ui.message{font-size:1em}.ui.large.message{font-size:1.14285714em}.ui.big.message{font-size:1.28571429em}.ui.huge.message{font-size:1.42857143em}.ui.massive.message{font-size:1.71428571em}/*! + * # Semantic UI 2.2.10 - Table + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.table{width:100%;background:#fff;margin:1em 0;border:1px solid rgba(34,36,38,.15);box-shadow:none;border-radius:.28571429rem;text-align:left;color:rgba(0,0,0,.87);border-collapse:separate;border-spacing:0}.ui.table:first-child{margin-top:0}.ui.table:last-child{margin-bottom:0}.ui.table td,.ui.table th{-webkit-transition:background .1s ease,color .1s ease;transition:background .1s ease,color .1s ease}.ui.table thead{box-shadow:none}.ui.table thead th{cursor:auto;background:#f9fafb;text-align:inherit;color:rgba(0,0,0,.87);padding:.92857143em .78571429em;vertical-align:inherit;font-style:none;font-weight:700;text-transform:none;border-bottom:1px solid rgba(34,36,38,.1);border-left:none}.ui.table thead tr>th:first-child{border-left:none}.ui.table thead tr:first-child>th:first-child{border-radius:.28571429rem 0 0 0}.ui.table thead tr:first-child>th:last-child{border-radius:0 .28571429rem 0 0}.ui.table thead tr:first-child>th:only-child{border-radius:.28571429rem .28571429rem 0 0}.ui.table tfoot{box-shadow:none}.ui.table tfoot th{cursor:auto;border-top:1px solid rgba(34,36,38,.15);background:#f9fafb;text-align:inherit;color:rgba(0,0,0,.87);padding:.78571429em .78571429em;vertical-align:middle;font-style:normal;font-weight:400;text-transform:none}.ui.table tfoot tr>th:first-child{border-left:none}.ui.table tfoot tr:first-child>th:first-child{border-radius:0 0 0 .28571429rem}.ui.table tfoot tr:first-child>th:last-child{border-radius:0 0 .28571429rem 0}.ui.table tfoot tr:first-child>th:only-child{border-radius:0 0 .28571429rem .28571429rem}.ui.table tr td{border-top:1px solid rgba(34,36,38,.1)}.ui.table tr:first-child td{border-top:none}.ui.table td{padding:.78571429em .78571429em;text-align:inherit}.ui.table>.icon{vertical-align:baseline}.ui.table>.icon:only-child{margin:0}.ui.table.segment{padding:0}.ui.table.segment:after{display:none}.ui.table.segment.stacked:after{display:block}@media only screen and (max-width:767px){.ui.table:not(.unstackable){width:100%}.ui.table:not(.unstackable) tbody,.ui.table:not(.unstackable) tr,.ui.table:not(.unstackable) tr>td,.ui.table:not(.unstackable) tr>th{width:auto!important;display:block!important}.ui.table:not(.unstackable){padding:0}.ui.table:not(.unstackable) thead{display:block}.ui.table:not(.unstackable) tfoot{display:block}.ui.table:not(.unstackable) tr{padding-top:1em;padding-bottom:1em;box-shadow:0 -1px 0 0 rgba(0,0,0,.1) inset!important}.ui.table:not(.unstackable) tr>td,.ui.table:not(.unstackable) tr>th{background:0 0;border:none!important;padding:.25em .75em!important;box-shadow:none!important}.ui.table:not(.unstackable) td:first-child,.ui.table:not(.unstackable) th:first-child{font-weight:700}.ui.definition.table:not(.unstackable) thead th:first-child{box-shadow:none!important}}.ui.table td .image,.ui.table td .image img,.ui.table th .image,.ui.table th .image img{max-width:none}.ui.structured.table{border-collapse:collapse}.ui.structured.table thead th{border-left:none;border-right:none}.ui.structured.sortable.table thead th{border-left:1px solid rgba(34,36,38,.15);border-right:1px solid rgba(34,36,38,.15)}.ui.structured.basic.table th{border-left:none;border-right:none}.ui.structured.celled.table tr td,.ui.structured.celled.table tr th{border-left:1px solid rgba(34,36,38,.1);border-right:1px solid rgba(34,36,38,.1)}.ui.definition.table thead:not(.full-width) th:first-child{pointer-events:none;background:0 0;font-weight:400;color:rgba(0,0,0,.4);box-shadow:-1px -1px 0 1px #fff}.ui.definition.table tfoot:not(.full-width) th:first-child{pointer-events:none;background:0 0;font-weight:rgba(0,0,0,.4);color:normal;box-shadow:1px 1px 0 1px #fff}.ui.celled.definition.table thead:not(.full-width) th:first-child{box-shadow:0 -1px 0 1px #fff}.ui.celled.definition.table tfoot:not(.full-width) th:first-child{box-shadow:0 1px 0 1px #fff}.ui.definition.table tr td.definition,.ui.definition.table tr td:first-child:not(.ignored){background:rgba(0,0,0,.03);font-weight:700;color:rgba(0,0,0,.95);text-transform:'';box-shadow:'';text-align:'';font-size:1em;padding-left:'';padding-right:''}.ui.definition.table thead:not(.full-width) th:nth-child(2){border-left:1px solid rgba(34,36,38,.15)}.ui.definition.table tfoot:not(.full-width) th:nth-child(2){border-left:1px solid rgba(34,36,38,.15)}.ui.definition.table td:nth-child(2){border-left:1px solid rgba(34,36,38,.15)}.ui.table td.positive,.ui.table tr.positive{box-shadow:0 0 0 #a3c293 inset}.ui.table td.positive,.ui.table tr.positive{background:#fcfff5!important;color:#2c662d!important}.ui.table td.negative,.ui.table tr.negative{box-shadow:0 0 0 #e0b4b4 inset}.ui.table td.negative,.ui.table tr.negative{background:#fff6f6!important;color:#9f3a38!important}.ui.table td.error,.ui.table tr.error{box-shadow:0 0 0 #e0b4b4 inset}.ui.table td.error,.ui.table tr.error{background:#fff6f6!important;color:#9f3a38!important}.ui.table td.warning,.ui.table tr.warning{box-shadow:0 0 0 #c9ba9b inset}.ui.table td.warning,.ui.table tr.warning{background:#fffaf3!important;color:#573a08!important}.ui.table td.active,.ui.table tr.active{box-shadow:0 0 0 rgba(0,0,0,.87) inset}.ui.table td.active,.ui.table tr.active{background:#e0e0e0!important;color:rgba(0,0,0,.87)!important}.ui.table tr td.disabled,.ui.table tr.disabled td,.ui.table tr.disabled:hover,.ui.table tr:hover td.disabled{pointer-events:none;color:rgba(40,40,40,.3)}@media only screen and (max-width:991px){.ui[class*="tablet stackable"].table,.ui[class*="tablet stackable"].table tbody,.ui[class*="tablet stackable"].table tr,.ui[class*="tablet stackable"].table tr>td,.ui[class*="tablet stackable"].table tr>th{width:100%!important;display:block!important}.ui[class*="tablet stackable"].table{padding:0}.ui[class*="tablet stackable"].table thead{display:block}.ui[class*="tablet stackable"].table tfoot{display:block}.ui[class*="tablet stackable"].table tr{padding-top:1em;padding-bottom:1em;box-shadow:0 -1px 0 0 rgba(0,0,0,.1) inset!important}.ui[class*="tablet stackable"].table tr>td,.ui[class*="tablet stackable"].table tr>th{background:0 0;border:none!important;padding:.25em .75em;box-shadow:none!important}.ui.definition[class*="tablet stackable"].table thead th:first-child{box-shadow:none!important}}.ui.table [class*="left aligned"],.ui.table[class*="left aligned"]{text-align:left}.ui.table [class*="center aligned"],.ui.table[class*="center aligned"]{text-align:center}.ui.table [class*="right aligned"],.ui.table[class*="right aligned"]{text-align:right}.ui.table [class*="top aligned"],.ui.table[class*="top aligned"]{vertical-align:top}.ui.table [class*="middle aligned"],.ui.table[class*="middle aligned"]{vertical-align:middle}.ui.table [class*="bottom aligned"],.ui.table[class*="bottom aligned"]{vertical-align:bottom}.ui.table td.collapsing,.ui.table th.collapsing{width:1px;white-space:nowrap}.ui.fixed.table{table-layout:fixed}.ui.fixed.table td,.ui.fixed.table th{overflow:hidden;text-overflow:ellipsis}.ui.selectable.table tbody tr:hover,.ui.table tbody tr td.selectable:hover{background:rgba(0,0,0,.05)!important;color:rgba(0,0,0,.95)!important}.ui.inverted.table tbody tr td.selectable:hover,.ui.selectable.inverted.table tbody tr:hover{background:rgba(255,255,255,.08)!important;color:#fff!important}.ui.table tbody tr td.selectable{padding:0}.ui.table tbody tr td.selectable>a:not(.ui){display:block;color:inherit;padding:.78571429em .78571429em}.ui.selectable.table tr.error:hover,.ui.selectable.table tr:hover td.error,.ui.table tr td.selectable.error:hover{background:#ffe7e7!important;color:#943634!important}.ui.selectable.table tr.warning:hover,.ui.selectable.table tr:hover td.warning,.ui.table tr td.selectable.warning:hover{background:#fff4e4!important;color:#493107!important}.ui.selectable.table tr.active:hover,.ui.selectable.table tr:hover td.active,.ui.table tr td.selectable.active:hover{background:#e0e0e0!important;color:rgba(0,0,0,.87)!important}.ui.selectable.table tr.positive:hover,.ui.selectable.table tr:hover td.positive,.ui.table tr td.selectable.positive:hover{background:#f7ffe6!important;color:#275b28!important}.ui.selectable.table tr.negative:hover,.ui.selectable.table tr:hover td.negative,.ui.table tr td.selectable.negative:hover{background:#ffe7e7!important;color:#943634!important}.ui.attached.table{top:0;bottom:0;border-radius:0;margin:0 -1px;width:calc(100% + 2px);max-width:calc(100% + 2px);box-shadow:none;border:1px solid #d4d4d5}.ui.attached+.ui.attached.table:not(.top){border-top:none}.ui[class*="top attached"].table{bottom:0;margin-bottom:0;top:0;margin-top:1em;border-radius:.28571429rem .28571429rem 0 0}.ui.table[class*="top attached"]:first-child{margin-top:0}.ui[class*="bottom attached"].table{bottom:0;margin-top:0;top:0;margin-bottom:1em;box-shadow:none,none;border-radius:0 0 .28571429rem .28571429rem}.ui[class*="bottom attached"].table:last-child{margin-bottom:0}.ui.striped.table tbody tr:nth-child(2n),.ui.striped.table>tr:nth-child(2n){background-color:rgba(0,0,50,.02)}.ui.inverted.striped.table tbody tr:nth-child(2n),.ui.inverted.striped.table>tr:nth-child(2n){background-color:rgba(255,255,255,.05)}.ui.striped.selectable.selectable.selectable.table tbody tr.active:hover{background:#efefef!important;color:rgba(0,0,0,.95)!important}.ui.table [class*="single line"],.ui.table[class*="single line"]{white-space:nowrap}.ui.table [class*="single line"],.ui.table[class*="single line"]{white-space:nowrap}.ui.red.table{border-top:.2em solid #db2828}.ui.inverted.red.table{background-color:#db2828!important;color:#fff!important}.ui.orange.table{border-top:.2em solid #f2711c}.ui.inverted.orange.table{background-color:#f2711c!important;color:#fff!important}.ui.yellow.table{border-top:.2em solid #fbbd08}.ui.inverted.yellow.table{background-color:#fbbd08!important;color:#fff!important}.ui.olive.table{border-top:.2em solid #b5cc18}.ui.inverted.olive.table{background-color:#b5cc18!important;color:#fff!important}.ui.green.table{border-top:.2em solid #21ba45}.ui.inverted.green.table{background-color:#21ba45!important;color:#fff!important}.ui.teal.table{border-top:.2em solid #00b5ad}.ui.inverted.teal.table{background-color:#00b5ad!important;color:#fff!important}.ui.blue.table{border-top:.2em solid #2185d0}.ui.inverted.blue.table{background-color:#2185d0!important;color:#fff!important}.ui.violet.table{border-top:.2em solid #6435c9}.ui.inverted.violet.table{background-color:#6435c9!important;color:#fff!important}.ui.purple.table{border-top:.2em solid #a333c8}.ui.inverted.purple.table{background-color:#a333c8!important;color:#fff!important}.ui.pink.table{border-top:.2em solid #e03997}.ui.inverted.pink.table{background-color:#e03997!important;color:#fff!important}.ui.brown.table{border-top:.2em solid #a5673f}.ui.inverted.brown.table{background-color:#a5673f!important;color:#fff!important}.ui.grey.table{border-top:.2em solid #767676}.ui.inverted.grey.table{background-color:#767676!important;color:#fff!important}.ui.black.table{border-top:.2em solid #1b1c1d}.ui.inverted.black.table{background-color:#1b1c1d!important;color:#fff!important}.ui.one.column.table td{width:100%}.ui.two.column.table td{width:50%}.ui.three.column.table td{width:33.33333333%}.ui.four.column.table td{width:25%}.ui.five.column.table td{width:20%}.ui.six.column.table td{width:16.66666667%}.ui.seven.column.table td{width:14.28571429%}.ui.eight.column.table td{width:12.5%}.ui.nine.column.table td{width:11.11111111%}.ui.ten.column.table td{width:10%}.ui.eleven.column.table td{width:9.09090909%}.ui.twelve.column.table td{width:8.33333333%}.ui.thirteen.column.table td{width:7.69230769%}.ui.fourteen.column.table td{width:7.14285714%}.ui.fifteen.column.table td{width:6.66666667%}.ui.sixteen.column.table td{width:6.25%}.ui.table td.one.wide,.ui.table th.one.wide{width:8.33333333%}.ui.table td.two.wide,.ui.table th.two.wide{width:16.66666667%}.ui.table td.three.wide,.ui.table th.three.wide{width:25%}.ui.table td.four.wide,.ui.table th.four.wide{width:33.33333333%}.ui.table td.five.wide,.ui.table th.five.wide{width:41.66666667%}.ui.table td.six.wide,.ui.table th.six.wide{width:50%}.ui.table td.seven.wide,.ui.table th.seven.wide{width:58.33333333%}.ui.table td.eight.wide,.ui.table th.eight.wide{width:66.66666667%}.ui.table td.nine.wide,.ui.table th.nine.wide{width:75%}.ui.table td.ten.wide,.ui.table th.ten.wide{width:83.33333333%}.ui.table td.eleven.wide,.ui.table th.eleven.wide{width:91.66666667%}.ui.table td.twelve.wide,.ui.table th.twelve.wide{width:100%}.ui.table td.thirteen.wide,.ui.table th.thirteen.wide{width:108.33333333%}.ui.table td.fourteen.wide,.ui.table th.fourteen.wide{width:116.66666667%}.ui.table td.fifteen.wide,.ui.table th.fifteen.wide{width:125%}.ui.table td.sixteen.wide,.ui.table th.sixteen.wide{width:133.33333333%}.ui.sortable.table thead th{cursor:pointer;white-space:nowrap;border-left:1px solid rgba(34,36,38,.15);color:rgba(0,0,0,.87)}.ui.sortable.table thead th:first-child{border-left:none}.ui.sortable.table thead th.sorted,.ui.sortable.table thead th.sorted:hover{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ui.sortable.table thead th:after{display:none;font-style:normal;font-weight:400;text-decoration:inherit;content:'';height:1em;width:auto;opacity:.8;margin:0 0 0 .5em;font-family:Icons}.ui.sortable.table thead th.ascending:after{content:'\f0d8'}.ui.sortable.table thead th.descending:after{content:'\f0d7'}.ui.sortable.table th.disabled:hover{cursor:auto;color:rgba(40,40,40,.3)}.ui.sortable.table thead th:hover{background:rgba(0,0,0,.05);color:rgba(0,0,0,.8)}.ui.sortable.table thead th.sorted{background:rgba(0,0,0,.05);color:rgba(0,0,0,.95)}.ui.sortable.table thead th.sorted:after{display:inline-block}.ui.sortable.table thead th.sorted:hover{background:rgba(0,0,0,.05);color:rgba(0,0,0,.95)}.ui.inverted.sortable.table thead th.sorted{background:rgba(255,255,255,.15) -webkit-linear-gradient(transparent,rgba(0,0,0,.05));background:rgba(255,255,255,.15) linear-gradient(transparent,rgba(0,0,0,.05));color:#fff}.ui.inverted.sortable.table thead th:hover{background:rgba(255,255,255,.08) -webkit-linear-gradient(transparent,rgba(0,0,0,.05));background:rgba(255,255,255,.08) linear-gradient(transparent,rgba(0,0,0,.05));color:#fff}.ui.inverted.sortable.table thead th{border-left-color:transparent;border-right-color:transparent}.ui.inverted.table{background:#333;color:rgba(255,255,255,.9);border:none}.ui.inverted.table th{background-color:rgba(0,0,0,.15);border-color:rgba(255,255,255,.1)!important;color:rgba(255,255,255,.9)}.ui.inverted.table tr td{border-color:rgba(255,255,255,.1)!important}.ui.inverted.table tr td.disabled,.ui.inverted.table tr.disabled td,.ui.inverted.table tr.disabled:hover td,.ui.inverted.table tr:hover td.disabled{pointer-events:none;color:rgba(225,225,225,.3)}.ui.inverted.definition.table tfoot:not(.full-width) th:first-child,.ui.inverted.definition.table thead:not(.full-width) th:first-child{background:#fff}.ui.inverted.definition.table tr td:first-child{background:rgba(255,255,255,.02);color:#fff}.ui.collapsing.table{width:auto}.ui.basic.table{background:0 0;border:1px solid rgba(34,36,38,.15);box-shadow:none}.ui.basic.table tfoot,.ui.basic.table thead{box-shadow:none}.ui.basic.table th{background:0 0;border-left:none}.ui.basic.table tbody tr{border-bottom:1px solid rgba(0,0,0,.1)}.ui.basic.table td{background:0 0}.ui.basic.striped.table tbody tr:nth-child(2n){background-color:rgba(0,0,0,.05)!important}.ui[class*="very basic"].table{border:none}.ui[class*="very basic"].table:not(.sortable):not(.striped) td,.ui[class*="very basic"].table:not(.sortable):not(.striped) th{padding:''}.ui[class*="very basic"].table:not(.sortable):not(.striped) td:first-child,.ui[class*="very basic"].table:not(.sortable):not(.striped) th:first-child{padding-left:0}.ui[class*="very basic"].table:not(.sortable):not(.striped) td:last-child,.ui[class*="very basic"].table:not(.sortable):not(.striped) th:last-child{padding-right:0}.ui[class*="very basic"].table:not(.sortable):not(.striped) thead tr:first-child th{padding-top:0}.ui.celled.table tr td,.ui.celled.table tr th{border-left:1px solid rgba(34,36,38,.1)}.ui.celled.table tr td:first-child,.ui.celled.table tr th:first-child{border-left:none}.ui.padded.table th{padding-left:1em;padding-right:1em}.ui.padded.table td,.ui.padded.table th{padding:1em 1em}.ui[class*="very padded"].table th{padding-left:1.5em;padding-right:1.5em}.ui[class*="very padded"].table td{padding:1.5em 1.5em}.ui.compact.table th{padding-left:.7em;padding-right:.7em}.ui.compact.table td{padding:.5em .7em}.ui[class*="very compact"].table th{padding-left:.6em;padding-right:.6em}.ui[class*="very compact"].table td{padding:.4em .6em}.ui.small.table{font-size:.9em}.ui.table{font-size:1em}.ui.large.table{font-size:1.1em}/*! + * # Semantic UI 2.2.10 - Ad + * http://github.com/semantic-org/semantic-ui/ + * + * + * Copyright 2013 Contributors + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.ad{display:block;overflow:hidden;margin:1em 0}.ui.ad:first-child{margin:0}.ui.ad:last-child{margin:0}.ui.ad iframe{margin:0;padding:0;border:none;overflow:hidden}.ui.leaderboard.ad{width:728px;height:90px}.ui[class*="medium rectangle"].ad{width:300px;height:250px}.ui[class*="large rectangle"].ad{width:336px;height:280px}.ui[class*="half page"].ad{width:300px;height:600px}.ui.square.ad{width:250px;height:250px}.ui[class*="small square"].ad{width:200px;height:200px}.ui[class*="small rectangle"].ad{width:180px;height:150px}.ui[class*="vertical rectangle"].ad{width:240px;height:400px}.ui.button.ad{width:120px;height:90px}.ui[class*="square button"].ad{width:125px;height:125px}.ui[class*="small button"].ad{width:120px;height:60px}.ui.skyscraper.ad{width:120px;height:600px}.ui[class*="wide skyscraper"].ad{width:160px}.ui.banner.ad{width:468px;height:60px}.ui[class*="vertical banner"].ad{width:120px;height:240px}.ui[class*="top banner"].ad{width:930px;height:180px}.ui[class*="half banner"].ad{width:234px;height:60px}.ui[class*="large leaderboard"].ad{width:970px;height:90px}.ui.billboard.ad{width:970px;height:250px}.ui.panorama.ad{width:980px;height:120px}.ui.netboard.ad{width:580px;height:400px}.ui[class*="large mobile banner"].ad{width:320px;height:100px}.ui[class*="mobile leaderboard"].ad{width:320px;height:50px}.ui.mobile.ad{display:none}@media only screen and (max-width:767px){.ui.mobile.ad{display:block}}.ui.centered.ad{margin-left:auto;margin-right:auto}.ui.test.ad{position:relative;background:#545454}.ui.test.ad:after{position:absolute;top:50%;left:50%;width:100%;text-align:center;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);content:'Ad';color:#fff;font-size:1em;font-weight:700}.ui.mobile.test.ad:after{font-size:.85714286em}.ui.test.ad[data-text]:after{content:attr(data-text)}/*! + * # Semantic UI 2.2.10 - Item + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.card,.ui.cards>.card{max-width:100%;position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:290px;min-height:0;background:#fff;padding:0;border:none;border-radius:.28571429rem;box-shadow:0 1px 3px 0 #d4d4d5,0 0 0 1px #d4d4d5;-webkit-transition:box-shadow .1s ease,-webkit-transform .1s ease;transition:box-shadow .1s ease,transform .1s ease;z-index:''}.ui.card{margin:1em 0}.ui.card a,.ui.cards>.card a{cursor:pointer}.ui.card:first-child{margin-top:0}.ui.card:last-child{margin-bottom:0}.ui.cards{display:-webkit-box;display:-ms-flexbox;display:flex;margin:-.875em -.5em;-ms-flex-wrap:wrap;flex-wrap:wrap}.ui.cards>.card{display:-webkit-box;display:-ms-flexbox;display:flex;margin:.875em .5em;float:none}.ui.card:after,.ui.cards:after{display:block;content:' ';height:0;clear:both;overflow:hidden;visibility:hidden}.ui.cards~.ui.cards{margin-top:.875em}.ui.card>:first-child,.ui.cards>.card>:first-child{border-radius:.28571429rem .28571429rem 0 0!important;border-top:none!important}.ui.card>:last-child,.ui.cards>.card>:last-child{border-radius:0 0 .28571429rem .28571429rem!important}.ui.card>:only-child,.ui.cards>.card>:only-child{border-radius:.28571429rem!important}.ui.card>.image,.ui.cards>.card>.image{position:relative;display:block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;padding:0;background:rgba(0,0,0,.05)}.ui.card>.image>img,.ui.cards>.card>.image>img{display:block;width:100%;height:auto;border-radius:inherit}.ui.card>.image:not(.ui)>img,.ui.cards>.card>.image:not(.ui)>img{border:none}.ui.card>.content,.ui.cards>.card>.content{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;border:none;border-top:1px solid rgba(34,36,38,.1);background:0 0;margin:0;padding:1em 1em;box-shadow:none;font-size:1em;border-radius:0}.ui.card>.content:after,.ui.cards>.card>.content:after{display:block;content:' ';height:0;clear:both;overflow:hidden;visibility:hidden}.ui.card>.content>.header,.ui.cards>.card>.content>.header{display:block;margin:'';font-family:HelveticaNeueLTStd-Lt,Helvetica,Arial,sans-serif;color:rgba(0,0,0,.85)}.ui.card>.content>.header:not(.ui),.ui.cards>.card>.content>.header:not(.ui){font-weight:700;font-size:1.28571429em;margin-top:-.21425em;line-height:1.28571429em}.ui.card>.content>.header+.description,.ui.card>.content>.meta+.description,.ui.cards>.card>.content>.header+.description,.ui.cards>.card>.content>.meta+.description{margin-top:.5em}.ui.card [class*="left floated"],.ui.cards>.card [class*="left floated"]{float:left}.ui.card [class*="right floated"],.ui.cards>.card [class*="right floated"]{float:right}.ui.card [class*="left aligned"],.ui.cards>.card [class*="left aligned"]{text-align:left}.ui.card [class*="center aligned"],.ui.cards>.card [class*="center aligned"]{text-align:center}.ui.card [class*="right aligned"],.ui.cards>.card [class*="right aligned"]{text-align:right}.ui.card .content img,.ui.cards>.card .content img{display:inline-block;vertical-align:middle;width:''}.ui.card .avatar img,.ui.card img.avatar,.ui.cards>.card .avatar img,.ui.cards>.card img.avatar{width:2em;height:2em;border-radius:500rem}.ui.card>.content>.description,.ui.cards>.card>.content>.description{clear:both;color:rgba(0,0,0,.68)}.ui.card>.content p,.ui.cards>.card>.content p{margin:0 0 .5em}.ui.card>.content p:last-child,.ui.cards>.card>.content p:last-child{margin-bottom:0}.ui.card .meta,.ui.cards>.card .meta{font-size:1em;color:rgba(0,0,0,.4)}.ui.card .meta *,.ui.cards>.card .meta *{margin-right:.3em}.ui.card .meta :last-child,.ui.cards>.card .meta :last-child{margin-right:0}.ui.card .meta [class*="right floated"],.ui.cards>.card .meta [class*="right floated"]{margin-right:0;margin-left:.3em}.ui.card>.content a:not(.ui),.ui.cards>.card>.content a:not(.ui){color:'';-webkit-transition:color .1s ease;transition:color .1s ease}.ui.card>.content a:not(.ui):hover,.ui.cards>.card>.content a:not(.ui):hover{color:''}.ui.card>.content>a.header,.ui.cards>.card>.content>a.header{color:rgba(0,0,0,.85)}.ui.card>.content>a.header:hover,.ui.cards>.card>.content>a.header:hover{color:#1e70bf}.ui.card .meta>a:not(.ui),.ui.cards>.card .meta>a:not(.ui){color:rgba(0,0,0,.4)}.ui.card .meta>a:not(.ui):hover,.ui.cards>.card .meta>a:not(.ui):hover{color:rgba(0,0,0,.87)}.ui.card>.button,.ui.card>.buttons,.ui.cards>.card>.button,.ui.cards>.card>.buttons{margin:0 -1px;width:calc(100% + 2px)}.ui.card .dimmer,.ui.cards>.card .dimmer{background-color:'';z-index:10}.ui.card>.content .star.icon,.ui.cards>.card>.content .star.icon{cursor:pointer;opacity:.75;-webkit-transition:color .1s ease;transition:color .1s ease}.ui.card>.content .star.icon:hover,.ui.cards>.card>.content .star.icon:hover{opacity:1;color:#ffb70a}.ui.card>.content .active.star.icon,.ui.cards>.card>.content .active.star.icon{color:#ffe623}.ui.card>.content .like.icon,.ui.cards>.card>.content .like.icon{cursor:pointer;opacity:.75;-webkit-transition:color .1s ease;transition:color .1s ease}.ui.card>.content .like.icon:hover,.ui.cards>.card>.content .like.icon:hover{opacity:1;color:#ff2733}.ui.card>.content .active.like.icon,.ui.cards>.card>.content .active.like.icon{color:#ff2733}.ui.card>.extra,.ui.cards>.card>.extra{max-width:100%;min-height:0!important;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;border-top:1px solid rgba(0,0,0,.05)!important;position:static;background:0 0;width:auto;margin:0 0;padding:.75em 1em;top:0;left:0;color:rgba(0,0,0,.4);box-shadow:none;-webkit-transition:color .1s ease;transition:color .1s ease}.ui.card>.extra a:not(.ui),.ui.cards>.card>.extra a:not(.ui){color:rgba(0,0,0,.4)}.ui.card>.extra a:not(.ui):hover,.ui.cards>.card>.extra a:not(.ui):hover{color:#1e70bf}.ui.raised.card,.ui.raised.cards>.card{box-shadow:0 0 0 1px #d4d4d5,0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15)}.ui.link.cards .raised.card:hover,.ui.link.raised.card:hover,.ui.raised.cards a.card:hover,a.ui.raised.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px 4px 0 rgba(34,36,38,.15),0 2px 10px 0 rgba(34,36,38,.25)}.ui.raised.card,.ui.raised.cards>.card{box-shadow:0 0 0 1px #d4d4d5,0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15)}.ui.centered.cards{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.ui.centered.card{margin-left:auto;margin-right:auto}.ui.fluid.card{width:100%;max-width:9999px}.ui.cards a.card,.ui.link.card,.ui.link.cards .card,a.ui.card{-webkit-transform:none;transform:none}.ui.cards a.card:hover,.ui.link.card:hover,.ui.link.cards .card:hover,a.ui.card:hover{cursor:pointer;z-index:5;background:#fff;border:none;box-shadow:0 1px 3px 0 #bcbdbd,0 0 0 1px #d4d4d5;-webkit-transform:translateY(-3px);transform:translateY(-3px)}.ui.cards>.red.card,.ui.red.card,.ui.red.cards>.card{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #db2828,0 1px 3px 0 #d4d4d5}.ui.cards>.red.card:hover,.ui.red.card:hover,.ui.red.cards>.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #d01919,0 1px 3px 0 #bcbdbd}.ui.cards>.orange.card,.ui.orange.card,.ui.orange.cards>.card{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #f2711c,0 1px 3px 0 #d4d4d5}.ui.cards>.orange.card:hover,.ui.orange.card:hover,.ui.orange.cards>.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #f26202,0 1px 3px 0 #bcbdbd}.ui.cards>.yellow.card,.ui.yellow.card,.ui.yellow.cards>.card{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #fbbd08,0 1px 3px 0 #d4d4d5}.ui.cards>.yellow.card:hover,.ui.yellow.card:hover,.ui.yellow.cards>.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #eaae00,0 1px 3px 0 #bcbdbd}.ui.cards>.olive.card,.ui.olive.card,.ui.olive.cards>.card{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #b5cc18,0 1px 3px 0 #d4d4d5}.ui.cards>.olive.card:hover,.ui.olive.card:hover,.ui.olive.cards>.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #a7bd0d,0 1px 3px 0 #bcbdbd}.ui.cards>.green.card,.ui.green.card,.ui.green.cards>.card{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #21ba45,0 1px 3px 0 #d4d4d5}.ui.cards>.green.card:hover,.ui.green.card:hover,.ui.green.cards>.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #16ab39,0 1px 3px 0 #bcbdbd}.ui.cards>.teal.card,.ui.teal.card,.ui.teal.cards>.card{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #00b5ad,0 1px 3px 0 #d4d4d5}.ui.cards>.teal.card:hover,.ui.teal.card:hover,.ui.teal.cards>.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #009c95,0 1px 3px 0 #bcbdbd}.ui.blue.card,.ui.blue.cards>.card,.ui.cards>.blue.card{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #2185d0,0 1px 3px 0 #d4d4d5}.ui.blue.card:hover,.ui.blue.cards>.card:hover,.ui.cards>.blue.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #1678c2,0 1px 3px 0 #bcbdbd}.ui.cards>.violet.card,.ui.violet.card,.ui.violet.cards>.card{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #6435c9,0 1px 3px 0 #d4d4d5}.ui.cards>.violet.card:hover,.ui.violet.card:hover,.ui.violet.cards>.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #5829bb,0 1px 3px 0 #bcbdbd}.ui.cards>.purple.card,.ui.purple.card,.ui.purple.cards>.card{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #a333c8,0 1px 3px 0 #d4d4d5}.ui.cards>.purple.card:hover,.ui.purple.card:hover,.ui.purple.cards>.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #9627ba,0 1px 3px 0 #bcbdbd}.ui.cards>.pink.card,.ui.pink.card,.ui.pink.cards>.card{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #e03997,0 1px 3px 0 #d4d4d5}.ui.cards>.pink.card:hover,.ui.pink.card:hover,.ui.pink.cards>.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #e61a8d,0 1px 3px 0 #bcbdbd}.ui.brown.card,.ui.brown.cards>.card,.ui.cards>.brown.card{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #a5673f,0 1px 3px 0 #d4d4d5}.ui.brown.card:hover,.ui.brown.cards>.card:hover,.ui.cards>.brown.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #975b33,0 1px 3px 0 #bcbdbd}.ui.cards>.grey.card,.ui.grey.card,.ui.grey.cards>.card{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #767676,0 1px 3px 0 #d4d4d5}.ui.cards>.grey.card:hover,.ui.grey.card:hover,.ui.grey.cards>.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #838383,0 1px 3px 0 #bcbdbd}.ui.black.card,.ui.black.cards>.card,.ui.cards>.black.card{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #1b1c1d,0 1px 3px 0 #d4d4d5}.ui.black.card:hover,.ui.black.cards>.card:hover,.ui.cards>.black.card:hover{box-shadow:0 0 0 1px #d4d4d5,0 2px 0 0 #27292a,0 1px 3px 0 #bcbdbd}.ui.one.cards{margin-left:0;margin-right:0}.ui.one.cards>.card{width:100%}.ui.two.cards{margin-left:-1em;margin-right:-1em}.ui.two.cards>.card{width:calc(50% - 2em);margin-left:1em;margin-right:1em}.ui.three.cards{margin-left:-1em;margin-right:-1em}.ui.three.cards>.card{width:calc(33.33333333% - 2em);margin-left:1em;margin-right:1em}.ui.four.cards{margin-left:-.75em;margin-right:-.75em}.ui.four.cards>.card{width:calc(25% - 1.5em);margin-left:.75em;margin-right:.75em}.ui.five.cards{margin-left:-.75em;margin-right:-.75em}.ui.five.cards>.card{width:calc(20% - 1.5em);margin-left:.75em;margin-right:.75em}.ui.six.cards{margin-left:-.75em;margin-right:-.75em}.ui.six.cards>.card{width:calc(16.66666667% - 1.5em);margin-left:.75em;margin-right:.75em}.ui.seven.cards{margin-left:-.5em;margin-right:-.5em}.ui.seven.cards>.card{width:calc(14.28571429% - 1em);margin-left:.5em;margin-right:.5em}.ui.eight.cards{margin-left:-.5em;margin-right:-.5em}.ui.eight.cards>.card{width:calc(12.5% - 1em);margin-left:.5em;margin-right:.5em;font-size:11px}.ui.nine.cards{margin-left:-.5em;margin-right:-.5em}.ui.nine.cards>.card{width:calc(11.11111111% - 1em);margin-left:.5em;margin-right:.5em;font-size:10px}.ui.ten.cards{margin-left:-.5em;margin-right:-.5em}.ui.ten.cards>.card{width:calc(10% - 1em);margin-left:.5em;margin-right:.5em}@media only screen and (max-width:767px){.ui.two.doubling.cards{margin-left:0;margin-right:0}.ui.two.doubling.cards>.card{width:100%;margin-left:0;margin-right:0}.ui.three.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.three.doubling.cards>.card{width:calc(50% - 2em);margin-left:1em;margin-right:1em}.ui.four.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.four.doubling.cards>.card{width:calc(50% - 2em);margin-left:1em;margin-right:1em}.ui.five.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.five.doubling.cards>.card{width:calc(50% - 2em);margin-left:1em;margin-right:1em}.ui.six.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.six.doubling.cards>.card{width:calc(50% - 2em);margin-left:1em;margin-right:1em}.ui.seven.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.seven.doubling.cards>.card{width:calc(33.33333333% - 2em);margin-left:1em;margin-right:1em}.ui.eight.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.eight.doubling.cards>.card{width:calc(33.33333333% - 2em);margin-left:1em;margin-right:1em}.ui.nine.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.nine.doubling.cards>.card{width:calc(33.33333333% - 2em);margin-left:1em;margin-right:1em}.ui.ten.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.ten.doubling.cards>.card{width:calc(33.33333333% - 2em);margin-left:1em;margin-right:1em}}@media only screen and (min-width:768px) and (max-width:991px){.ui.two.doubling.cards{margin-left:0;margin-right:0}.ui.two.doubling.cards>.card{width:100%;margin-left:0;margin-right:0}.ui.three.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.three.doubling.cards>.card{width:calc(50% - 2em);margin-left:1em;margin-right:1em}.ui.four.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.four.doubling.cards>.card{width:calc(50% - 2em);margin-left:1em;margin-right:1em}.ui.five.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.five.doubling.cards>.card{width:calc(33.33333333% - 2em);margin-left:1em;margin-right:1em}.ui.six.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.six.doubling.cards>.card{width:calc(33.33333333% - 2em);margin-left:1em;margin-right:1em}.ui.eight.doubling.cards{margin-left:-1em;margin-right:-1em}.ui.eight.doubling.cards>.card{width:calc(33.33333333% - 2em);margin-left:1em;margin-right:1em}.ui.eight.doubling.cards{margin-left:-.75em;margin-right:-.75em}.ui.eight.doubling.cards>.card{width:calc(25% - 1.5em);margin-left:.75em;margin-right:.75em}.ui.nine.doubling.cards{margin-left:-.75em;margin-right:-.75em}.ui.nine.doubling.cards>.card{width:calc(25% - 1.5em);margin-left:.75em;margin-right:.75em}.ui.ten.doubling.cards{margin-left:-.75em;margin-right:-.75em}.ui.ten.doubling.cards>.card{width:calc(20% - 1.5em);margin-left:.75em;margin-right:.75em}}@media only screen and (max-width:767px){.ui.stackable.cards{display:block!important}.ui.stackable.cards .card:first-child{margin-top:0!important}.ui.stackable.cards>.card{display:block!important;height:auto!important;margin:1em 1em;padding:0!important;width:calc(100% - 2em)!important}}.ui.cards>.card{font-size:1em}/*! + * # Semantic UI 2.2.10 - Comment + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.comments{margin:1.5em 0;max-width:650px}.ui.comments:first-child{margin-top:0}.ui.comments:last-child{margin-bottom:0}.ui.comments .comment{position:relative;background:0 0;margin:.5em 0 0;padding:.5em 0 0;border:none;border-top:none;line-height:1.2}.ui.comments .comment:first-child{margin-top:0;padding-top:0}.ui.comments .comment .comments{margin:0 0 .5em .5em;padding:1em 0 1em 1em}.ui.comments .comment .comments:before{position:absolute;top:0;left:0}.ui.comments .comment .comments .comment{border:none;border-top:none;background:0 0}.ui.comments .comment .avatar{display:block;width:2.5em;height:auto;float:left;margin:.2em 0 0}.ui.comments .comment .avatar img,.ui.comments .comment img.avatar{display:block;margin:0 auto;width:100%;height:100%;border-radius:.25rem}.ui.comments .comment>.content{display:block}.ui.comments .comment>.avatar~.content{margin-left:3.5em}.ui.comments .comment .author{font-size:1em;color:rgba(0,0,0,.87);font-weight:700}.ui.comments .comment a.author{cursor:pointer}.ui.comments .comment a.author:hover{color:#1e70bf}.ui.comments .comment .metadata{display:inline-block;margin-left:.5em;color:rgba(0,0,0,.4);font-size:.875em}.ui.comments .comment .metadata>*{display:inline-block;margin:0 .5em 0 0}.ui.comments .comment .metadata>:last-child{margin-right:0}.ui.comments .comment .text{margin:.25em 0 .5em;font-size:1em;word-wrap:break-word;color:rgba(0,0,0,.87);line-height:1.3}.ui.comments .comment .actions{font-size:.875em}.ui.comments .comment .actions a{cursor:pointer;display:inline-block;margin:0 .75em 0 0;color:rgba(0,0,0,.4)}.ui.comments .comment .actions a:last-child{margin-right:0}.ui.comments .comment .actions a.active,.ui.comments .comment .actions a:hover{color:rgba(0,0,0,.8)}.ui.comments>.reply.form{margin-top:1em}.ui.comments .comment .reply.form{width:100%;margin-top:1em}.ui.comments .reply.form textarea{font-size:1em;height:12em}.ui.collapsed.comments,.ui.comments .collapsed.comment,.ui.comments .collapsed.comments{display:none}.ui.threaded.comments .comment .comments{margin:-1.5em 0 -1em 1.25em;padding:3em 0 2em 2.25em;box-shadow:-1px 0 0 rgba(34,36,38,.15)}.ui.minimal.comments .comment .actions{opacity:0;position:absolute;top:0;right:0;left:auto;-webkit-transition:opacity .2s ease;transition:opacity .2s ease;-webkit-transition-delay:.1s;transition-delay:.1s}.ui.minimal.comments .comment>.content:hover>.actions{opacity:1}.ui.mini.comments{font-size:.78571429rem}.ui.tiny.comments{font-size:.85714286rem}.ui.small.comments{font-size:.92857143rem}.ui.comments{font-size:1rem}.ui.large.comments{font-size:1.14285714rem}.ui.big.comments{font-size:1.28571429rem}.ui.huge.comments{font-size:1.42857143rem}.ui.massive.comments{font-size:1.71428571rem}/*! + * # Semantic UI 2.2.10 - Feed + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.feed{margin:1em 0}.ui.feed:first-child{margin-top:0}.ui.feed:last-child{margin-bottom:0}.ui.feed>.event{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;width:100%;padding:.21428571rem 0;margin:0;background:0 0;border-top:none}.ui.feed>.event:first-child{border-top:0;padding-top:0}.ui.feed>.event:last-child{padding-bottom:0}.ui.feed>.event>.label{display:block;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:2.5em;height:auto;-ms-flex-item-align:stretch;align-self:stretch;text-align:left}.ui.feed>.event>.label .icon{opacity:1;font-size:1.5em;width:100%;padding:.25em;background:0 0;border:none;border-radius:none;color:rgba(0,0,0,.6)}.ui.feed>.event>.label img{width:100%;height:auto;border-radius:500rem}.ui.feed>.event>.label+.content{margin:.5em 0 .35714286em 1.14285714em}.ui.feed>.event>.content{display:block;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-item-align:stretch;align-self:stretch;text-align:left;word-wrap:break-word}.ui.feed>.event:last-child>.content{padding-bottom:0}.ui.feed>.event>.content a{cursor:pointer}.ui.feed>.event>.content .date{margin:-.5rem 0 0;padding:0;font-weight:400;font-size:1em;font-style:normal;color:rgba(0,0,0,.4)}.ui.feed>.event>.content .summary{margin:0;font-size:1em;font-weight:700;color:rgba(0,0,0,.87)}.ui.feed>.event>.content .summary img{display:inline-block;width:auto;height:10em;margin:-.25em .25em 0 0;border-radius:.25em;vertical-align:middle}.ui.feed>.event>.content .user{display:inline-block;font-weight:700;margin-right:0;vertical-align:baseline}.ui.feed>.event>.content .user img{margin:-.25em .25em 0 0;width:auto;height:10em;vertical-align:middle}.ui.feed>.event>.content .summary>.date{display:inline-block;float:none;font-weight:400;font-size:.85714286em;font-style:normal;margin:0 0 0 .5em;padding:0;color:rgba(0,0,0,.4)}.ui.feed>.event>.content .extra{margin:.5em 0 0;background:0 0;padding:0;color:rgba(0,0,0,.87)}.ui.feed>.event>.content .extra.images img{display:inline-block;margin:0 .25em 0 0;width:6em}.ui.feed>.event>.content .extra.text{padding:0;border-left:none;font-size:1em;max-width:500px;line-height:1.4285em}.ui.feed>.event>.content .meta{display:inline-block;font-size:.85714286em;margin:.5em 0 0;background:0 0;border:none;border-radius:0;box-shadow:none;padding:0;color:rgba(0,0,0,.6)}.ui.feed>.event>.content .meta>*{position:relative;margin-left:.75em}.ui.feed>.event>.content .meta>:after{content:'';color:rgba(0,0,0,.2);top:0;left:-1em;opacity:1;position:absolute;vertical-align:top}.ui.feed>.event>.content .meta .like{color:'';-webkit-transition:.2s color ease;transition:.2s color ease}.ui.feed>.event>.content .meta .like:hover .icon{color:#ff2733}.ui.feed>.event>.content .meta .active.like .icon{color:#ef404a}.ui.feed>.event>.content .meta>:first-child{margin-left:0}.ui.feed>.event>.content .meta>:first-child::after{display:none}.ui.feed>.event>.content .meta a,.ui.feed>.event>.content .meta>.icon{cursor:pointer;opacity:1;color:rgba(0,0,0,.5);-webkit-transition:color .1s ease;transition:color .1s ease}.ui.feed>.event>.content .meta a:hover,.ui.feed>.event>.content .meta a:hover .icon,.ui.feed>.event>.content .meta>.icon:hover{color:rgba(0,0,0,.95)}.ui.small.feed{font-size:.92857143rem}.ui.feed{font-size:1rem}.ui.large.feed{font-size:1.14285714rem}/*! + * # Semantic UI 2.2.10 - Item + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.items>.item{display:-webkit-box;display:-ms-flexbox;display:flex;margin:1em 0;width:100%;min-height:0;background:0 0;padding:0;border:none;border-radius:0;box-shadow:none;-webkit-transition:box-shadow .1s ease;transition:box-shadow .1s ease;z-index:''}.ui.items>.item a{cursor:pointer}.ui.items{margin:1.5em 0}.ui.items:first-child{margin-top:0!important}.ui.items:last-child{margin-bottom:0!important}.ui.items>.item:after{display:block;content:' ';height:0;clear:both;overflow:hidden;visibility:hidden}.ui.items>.item:first-child{margin-top:0}.ui.items>.item:last-child{margin-bottom:0}.ui.items>.item>.image{position:relative;-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;display:block;float:none;margin:0;padding:0;max-height:'';-ms-flex-item-align:top;align-self:top}.ui.items>.item>.image>img{display:block;width:100%;height:auto;border-radius:.125rem;border:none}.ui.items>.item>.image:only-child>img{border-radius:0}.ui.items>.item>.content{display:block;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;background:0 0;margin:0;padding:0;box-shadow:none;font-size:1em;border:none;border-radius:0}.ui.items>.item>.content:after{display:block;content:' ';height:0;clear:both;overflow:hidden;visibility:hidden}.ui.items>.item>.image+.content{min-width:0;width:auto;display:block;margin-left:0;-ms-flex-item-align:top;align-self:top;padding-left:1.5em}.ui.items>.item>.content>.header{display:inline-block;margin:-.21425em 0 0;font-family:HelveticaNeueLTStd-Lt,Helvetica,Arial,sans-serif;font-weight:700;color:rgba(0,0,0,.85)}.ui.items>.item>.content>.header:not(.ui){font-size:1.28571429em}.ui.items>.item [class*="left floated"]{float:left}.ui.items>.item [class*="right floated"]{float:right}.ui.items>.item .content img{-ms-flex-item-align:middle;align-self:middle;width:''}.ui.items>.item .avatar img,.ui.items>.item img.avatar{width:'';height:'';border-radius:500rem}.ui.items>.item>.content>.description{margin-top:.6em;max-width:auto;font-size:1em;line-height:1.4285em;color:rgba(0,0,0,.87)}.ui.items>.item>.content p{margin:0 0 .5em}.ui.items>.item>.content p:last-child{margin-bottom:0}.ui.items>.item .meta{margin:.5em 0 .5em;font-size:1em;line-height:1em;color:rgba(0,0,0,.6)}.ui.items>.item .meta *{margin-right:.3em}.ui.items>.item .meta :last-child{margin-right:0}.ui.items>.item .meta [class*="right floated"]{margin-right:0;margin-left:.3em}.ui.items>.item>.content a:not(.ui){color:'';-webkit-transition:color .1s ease;transition:color .1s ease}.ui.items>.item>.content a:not(.ui):hover{color:''}.ui.items>.item>.content>a.header{color:rgba(0,0,0,.85)}.ui.items>.item>.content>a.header:hover{color:#1e70bf}.ui.items>.item .meta>a:not(.ui){color:rgba(0,0,0,.4)}.ui.items>.item .meta>a:not(.ui):hover{color:rgba(0,0,0,.87)}.ui.items>.item>.content .favorite.icon{cursor:pointer;opacity:.75;-webkit-transition:color .1s ease;transition:color .1s ease}.ui.items>.item>.content .favorite.icon:hover{opacity:1;color:#ffb70a}.ui.items>.item>.content .active.favorite.icon{color:#ffe623}.ui.items>.item>.content .like.icon{cursor:pointer;opacity:.75;-webkit-transition:color .1s ease;transition:color .1s ease}.ui.items>.item>.content .like.icon:hover{opacity:1;color:#ff2733}.ui.items>.item>.content .active.like.icon{color:#ff2733}.ui.items>.item .extra{display:block;position:relative;background:0 0;margin:.5rem 0 0;width:100%;padding:0 0 0;top:0;left:0;color:rgba(0,0,0,.4);box-shadow:none;-webkit-transition:color .1s ease;transition:color .1s ease;border-top:none}.ui.items>.item .extra>*{margin:.25rem .5rem .25rem 0}.ui.items>.item .extra>[class*="right floated"]{margin:.25rem 0 .25rem .5rem}.ui.items>.item .extra:after{display:block;content:' ';height:0;clear:both;overflow:hidden;visibility:hidden}.ui.items>.item>.image:not(.ui){width:175px}@media only screen and (min-width:768px) and (max-width:991px){.ui.items>.item{margin:1em 0}.ui.items>.item>.image:not(.ui){width:150px}.ui.items>.item>.image+.content{display:block;padding:0 0 0 1em}}@media only screen and (max-width:767px){.ui.items:not(.unstackable)>.item{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:2em 0}.ui.items:not(.unstackable)>.item>.image{display:block;margin-left:auto;margin-right:auto}.ui.items:not(.unstackable)>.item>.image,.ui.items:not(.unstackable)>.item>.image>img{max-width:100%!important;width:auto!important;max-height:250px!important}.ui.items:not(.unstackable)>.item>.image+.content{display:block;padding:1.5em 0 0}}.ui.items>.item>.image+[class*="top aligned"].content{-ms-flex-item-align:start;align-self:flex-start}.ui.items>.item>.image+[class*="middle aligned"].content{-ms-flex-item-align:center;align-self:center}.ui.items>.item>.image+[class*="bottom aligned"].content{-ms-flex-item-align:end;align-self:flex-end}.ui.relaxed.items>.item{margin:1.5em 0}.ui[class*="very relaxed"].items>.item{margin:2em 0}.ui.divided.items>.item{border-top:1px solid rgba(34,36,38,.15);margin:0;padding:1em 0}.ui.divided.items>.item:first-child{border-top:none;margin-top:0!important;padding-top:0!important}.ui.divided.items>.item:last-child{margin-bottom:0!important;padding-bottom:0!important}.ui.relaxed.divided.items>.item{margin:0;padding:1.5em 0}.ui[class*="very relaxed"].divided.items>.item{margin:0;padding:2em 0}.ui.items a.item:hover,.ui.link.items>.item:hover{cursor:pointer}.ui.items a.item:hover .content .header,.ui.link.items>.item:hover .content .header{color:#1e70bf}.ui.items>.item{font-size:1em}@media only screen and (max-width:767px){.ui.unstackable.items>.item>.image,.ui.unstackable.items>.item>.image>img{width:125px!important}}/*! + * # Semantic UI 2.2.10 - Statistic + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.statistic{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:1em 0;max-width:auto}.ui.statistic+.ui.statistic{margin:0 0 0 1.5em}.ui.statistic:first-child{margin-top:0}.ui.statistic:last-child{margin-bottom:0}.ui.statistics{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap}.ui.statistics>.statistic{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0 1.5em 2em;max-width:auto}.ui.statistics{display:-webkit-box;display:-ms-flexbox;display:flex;margin:1em -1.5em -2em}.ui.statistics:after{display:block;content:' ';height:0;clear:both;overflow:hidden;visibility:hidden}.ui.statistics:first-child{margin-top:0}.ui.statistics:last-child{margin-bottom:0}.ui.statistic>.value,.ui.statistics .statistic>.value{font-family:HelveticaNeueLTStd-Lt,Helvetica,Arial,sans-serif;font-size:4rem;font-weight:400;line-height:1em;color:#1b1c1d;text-transform:uppercase;text-align:center}.ui.statistic>.label,.ui.statistics .statistic>.label{font-family:HelveticaNeueLTStd-Lt,Helvetica,Arial,sans-serif;font-size:1em;font-weight:700;color:rgba(0,0,0,.87);text-transform:uppercase;text-align:center}.ui.statistic>.label~.value,.ui.statistics .statistic>.label~.value{margin-top:0}.ui.statistic>.value~.label,.ui.statistics .statistic>.value~.label{margin-top:0}.ui.statistic>.value .icon,.ui.statistics .statistic>.value .icon{opacity:1;width:auto;margin:0}.ui.statistic>.text.value,.ui.statistics .statistic>.text.value{line-height:1em;min-height:2em;font-weight:700;text-align:center}.ui.statistic>.text.value+.label,.ui.statistics .statistic>.text.value+.label{text-align:center}.ui.statistic>.value img,.ui.statistics .statistic>.value img{max-height:3rem;vertical-align:baseline}.ui.ten.statistics{margin:0 0 -2em}.ui.ten.statistics .statistic{min-width:10%;margin:0 0 2em}.ui.nine.statistics{margin:0 0 -2em}.ui.nine.statistics .statistic{min-width:11.11111111%;margin:0 0 2em}.ui.eight.statistics{margin:0 0 -2em}.ui.eight.statistics .statistic{min-width:12.5%;margin:0 0 2em}.ui.seven.statistics{margin:0 0 -2em}.ui.seven.statistics .statistic{min-width:14.28571429%;margin:0 0 2em}.ui.six.statistics{margin:0 0 -2em}.ui.six.statistics .statistic{min-width:16.66666667%;margin:0 0 2em}.ui.five.statistics{margin:0 0 -2em}.ui.five.statistics .statistic{min-width:20%;margin:0 0 2em}.ui.four.statistics{margin:0 0 -2em}.ui.four.statistics .statistic{min-width:25%;margin:0 0 2em}.ui.three.statistics{margin:0 0 -2em}.ui.three.statistics .statistic{min-width:33.33333333%;margin:0 0 2em}.ui.two.statistics{margin:0 0 -2em}.ui.two.statistics .statistic{min-width:50%;margin:0 0 2em}.ui.one.statistics{margin:0 0 -2em}.ui.one.statistics .statistic{min-width:100%;margin:0 0 2em}.ui.horizontal.statistic{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.ui.horizontal.statistics{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;margin:0;max-width:none}.ui.horizontal.statistics .statistic{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:none;margin:1em 0}.ui.horizontal.statistic>.text.value,.ui.horizontal.statistics>.statistic>.text.value{min-height:0!important}.ui.horizontal.statistic>.value .icon,.ui.horizontal.statistics .statistic>.value .icon{width:1.18em}.ui.horizontal.statistic>.value,.ui.horizontal.statistics .statistic>.value{display:inline-block;vertical-align:middle}.ui.horizontal.statistic>.label,.ui.horizontal.statistics .statistic>.label{display:inline-block;vertical-align:middle;margin:0 0 0 .75em}.ui.red.statistic>.value,.ui.red.statistics .statistic>.value,.ui.statistics .red.statistic>.value{color:#db2828}.ui.orange.statistic>.value,.ui.orange.statistics .statistic>.value,.ui.statistics .orange.statistic>.value{color:#f2711c}.ui.statistics .yellow.statistic>.value,.ui.yellow.statistic>.value,.ui.yellow.statistics .statistic>.value{color:#fbbd08}.ui.olive.statistic>.value,.ui.olive.statistics .statistic>.value,.ui.statistics .olive.statistic>.value{color:#b5cc18}.ui.green.statistic>.value,.ui.green.statistics .statistic>.value,.ui.statistics .green.statistic>.value{color:#21ba45}.ui.statistics .teal.statistic>.value,.ui.teal.statistic>.value,.ui.teal.statistics .statistic>.value{color:#00b5ad}.ui.blue.statistic>.value,.ui.blue.statistics .statistic>.value,.ui.statistics .blue.statistic>.value{color:#2185d0}.ui.statistics .violet.statistic>.value,.ui.violet.statistic>.value,.ui.violet.statistics .statistic>.value{color:#6435c9}.ui.purple.statistic>.value,.ui.purple.statistics .statistic>.value,.ui.statistics .purple.statistic>.value{color:#a333c8}.ui.pink.statistic>.value,.ui.pink.statistics .statistic>.value,.ui.statistics .pink.statistic>.value{color:#e03997}.ui.brown.statistic>.value,.ui.brown.statistics .statistic>.value,.ui.statistics .brown.statistic>.value{color:#a5673f}.ui.grey.statistic>.value,.ui.grey.statistics .statistic>.value,.ui.statistics .grey.statistic>.value{color:#767676}.ui.inverted.statistic .value,.ui.inverted.statistics .statistic>.value{color:#fff}.ui.inverted.statistic .label,.ui.inverted.statistics .statistic>.label{color:rgba(255,255,255,.9)}.ui.inverted.red.statistic>.value,.ui.inverted.red.statistics .statistic>.value,.ui.statistics .inverted.red.statistic>.value{color:#ff695e}.ui.inverted.orange.statistic>.value,.ui.inverted.orange.statistics .statistic>.value,.ui.statistics .inverted.orange.statistic>.value{color:#ff851b}.ui.inverted.yellow.statistic>.value,.ui.inverted.yellow.statistics .statistic>.value,.ui.statistics .inverted.yellow.statistic>.value{color:#ffe21f}.ui.inverted.olive.statistic>.value,.ui.inverted.olive.statistics .statistic>.value,.ui.statistics .inverted.olive.statistic>.value{color:#d9e778}.ui.inverted.green.statistic>.value,.ui.inverted.green.statistics .statistic>.value,.ui.statistics .inverted.green.statistic>.value{color:#2ecc40}.ui.inverted.teal.statistic>.value,.ui.inverted.teal.statistics .statistic>.value,.ui.statistics .inverted.teal.statistic>.value{color:#6dffff}.ui.inverted.blue.statistic>.value,.ui.inverted.blue.statistics .statistic>.value,.ui.statistics .inverted.blue.statistic>.value{color:#54c8ff}.ui.inverted.violet.statistic>.value,.ui.inverted.violet.statistics .statistic>.value,.ui.statistics .inverted.violet.statistic>.value{color:#a291fb}.ui.inverted.purple.statistic>.value,.ui.inverted.purple.statistics .statistic>.value,.ui.statistics .inverted.purple.statistic>.value{color:#dc73ff}.ui.inverted.pink.statistic>.value,.ui.inverted.pink.statistics .statistic>.value,.ui.statistics .inverted.pink.statistic>.value{color:#ff8edf}.ui.inverted.brown.statistic>.value,.ui.inverted.brown.statistics .statistic>.value,.ui.statistics .inverted.brown.statistic>.value{color:#d67c1c}.ui.inverted.grey.statistic>.value,.ui.inverted.grey.statistics .statistic>.value,.ui.statistics .inverted.grey.statistic>.value{color:#dcddde}.ui[class*="left floated"].statistic{float:left;margin:0 2em 1em 0}.ui[class*="right floated"].statistic{float:right;margin:0 0 1em 2em}.ui.floated.statistic:last-child{margin-bottom:0}.ui.mini.statistic>.value,.ui.mini.statistics .statistic>.value{font-size:1.5rem!important}.ui.mini.horizontal.statistic>.value,.ui.mini.horizontal.statistics .statistic>.value{font-size:1.5rem!important}.ui.mini.statistic>.text.value,.ui.mini.statistics .statistic>.text.value{font-size:1rem!important}.ui.tiny.statistic>.value,.ui.tiny.statistics .statistic>.value{font-size:2rem!important}.ui.tiny.horizontal.statistic>.value,.ui.tiny.horizontal.statistics .statistic>.value{font-size:2rem!important}.ui.tiny.statistic>.text.value,.ui.tiny.statistics .statistic>.text.value{font-size:1rem!important}.ui.small.statistic>.value,.ui.small.statistics .statistic>.value{font-size:3rem!important}.ui.small.horizontal.statistic>.value,.ui.small.horizontal.statistics .statistic>.value{font-size:2rem!important}.ui.small.statistic>.text.value,.ui.small.statistics .statistic>.text.value{font-size:1rem!important}.ui.statistic>.value,.ui.statistics .statistic>.value{font-size:4rem!important}.ui.horizontal.statistic>.value,.ui.horizontal.statistics .statistic>.value{font-size:3rem!important}.ui.statistic>.text.value,.ui.statistics .statistic>.text.value{font-size:2rem!important}.ui.large.statistic>.value,.ui.large.statistics .statistic>.value{font-size:5rem!important}.ui.large.horizontal.statistic>.value,.ui.large.horizontal.statistics .statistic>.value{font-size:4rem!important}.ui.large.statistic>.text.value,.ui.large.statistics .statistic>.text.value{font-size:2.5rem!important}.ui.huge.statistic>.value,.ui.huge.statistics .statistic>.value{font-size:6rem!important}.ui.huge.horizontal.statistic>.value,.ui.huge.horizontal.statistics .statistic>.value{font-size:5rem!important}.ui.huge.statistic>.text.value,.ui.huge.statistics .statistic>.text.value{font-size:2.5rem!important}/*! + * # Semantic UI 2.2.10 - Accordion + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.accordion,.ui.accordion .accordion{max-width:100%}.ui.accordion .accordion{margin:1em 0 0;padding:0}.ui.accordion .accordion .title,.ui.accordion .title{cursor:pointer}.ui.accordion .title:not(.ui){padding:.5em 0;font-family:HelveticaNeueLTStd-Lt,Helvetica,Arial,sans-serif;font-size:1em;color:rgba(0,0,0,.87)}.ui.accordion .accordion .title~.content,.ui.accordion .title~.content{display:none}.ui.accordion:not(.styled) .accordion .title~.content:not(.ui),.ui.accordion:not(.styled) .title~.content:not(.ui){margin:'';padding:.5em 0 1em}.ui.accordion:not(.styled) .title~.content:not(.ui):last-child{padding-bottom:0}.ui.accordion .accordion .title .dropdown.icon,.ui.accordion .title .dropdown.icon{display:inline-block;float:none;opacity:1;width:1.25em;height:1em;margin:0 .25rem 0 0;padding:0;font-size:1em;-webkit-transition:-webkit-transform .1s ease,opacity .1s ease;transition:transform .1s ease,opacity .1s ease;vertical-align:baseline;-webkit-transform:none;transform:none}.ui.accordion.menu .item .title{display:block;padding:0}.ui.accordion.menu .item .title>.dropdown.icon{float:right;margin:.21425em 0 0 1em;-webkit-transform:rotate(180deg);transform:rotate(180deg)}.ui.accordion .ui.header .dropdown.icon{font-size:1em;margin:0 .25rem 0 0}.ui.accordion .accordion .active.title .dropdown.icon,.ui.accordion .active.title .dropdown.icon{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.ui.accordion.menu .item .active.title>.dropdown.icon{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.ui.styled.accordion{width:600px}.ui.styled.accordion,.ui.styled.accordion .accordion{border-radius:.28571429rem;background:#fff;box-shadow:0 1px 2px 0 rgba(34,36,38,.15),0 0 0 1px rgba(34,36,38,.15)}.ui.styled.accordion .accordion .title,.ui.styled.accordion .title{margin:0;padding:.75em 1em;color:rgba(0,0,0,.4);font-weight:700;border-top:1px solid rgba(34,36,38,.15);-webkit-transition:background .1s ease,color .1s ease;transition:background .1s ease,color .1s ease}.ui.styled.accordion .accordion .title:first-child,.ui.styled.accordion>.title:first-child{border-top:none}.ui.styled.accordion .accordion .content,.ui.styled.accordion .content{margin:0;padding:.5em 1em 1.5em}.ui.styled.accordion .accordion .content{padding:0;padding:.5em 1em 1.5em}.ui.styled.accordion .accordion .active.title,.ui.styled.accordion .accordion .title:hover,.ui.styled.accordion .active.title,.ui.styled.accordion .title:hover{background:0 0;color:rgba(0,0,0,.87)}.ui.styled.accordion .accordion .active.title,.ui.styled.accordion .accordion .title:hover{background:0 0;color:rgba(0,0,0,.87)}.ui.styled.accordion .active.title{background:0 0;color:rgba(0,0,0,.95)}.ui.styled.accordion .accordion .active.title{background:0 0;color:rgba(0,0,0,.95)}.ui.accordion .accordion .active.content,.ui.accordion .active.content{display:block}.ui.fluid.accordion,.ui.fluid.accordion .accordion{width:100%}.ui.inverted.accordion .title:not(.ui){color:rgba(255,255,255,.9)}@font-face{font-family:Accordion;src:url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfOIKAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zryj6HgAAAFwAAAAyGhlYWT/0IhHAAACOAAAADZoaGVhApkB5wAAAnAAAAAkaG10eAJuABIAAAKUAAAAGGxvY2EAjABWAAACrAAAAA5tYXhwAAgAFgAAArwAAAAgbmFtZfC1n04AAALcAAABPHBvc3QAAwAAAAAEGAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQASAEkAtwFuABMAADc0PwE2FzYXFh0BFAcGJwYvASY1EgaABQgHBQYGBQcIBYAG2wcGfwcBAQcECf8IBAcBAQd/BgYAAAAAAQAAAEkApQFuABMAADcRNDc2MzIfARYVFA8BBiMiJyY1AAUGBwgFgAYGgAUIBwYFWwEACAUGBoAFCAcFgAYGBQcAAAABAAAAAQAAqWYls18PPPUACwIAAAAAAM/9o+4AAAAAz/2j7gAAAAAAtwFuAAAACAACAAAAAAAAAAEAAAHg/+AAAAIAAAAAAAC3AAEAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAQAAAAC3ABIAtwAAAAAAAAAKABQAHgBCAGQAAAABAAAABgAUAAEAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype'),url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAASwAAoAAAAABGgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAS0AAAEtFpovuE9TLzIAAAIkAAAAYAAAAGAIIweQY21hcAAAAoQAAABMAAAATA984gpnYXNwAAAC0AAAAAgAAAAIAAAAEGhlYWQAAALYAAAANgAAADb/0IhHaGhlYQAAAxAAAAAkAAAAJAKZAedobXR4AAADNAAAABgAAAAYAm4AEm1heHAAAANMAAAABgAAAAYABlAAbmFtZQAAA1QAAAE8AAABPPC1n05wb3N0AAAEkAAAACAAAAAgAAMAAAEABAQAAQEBB3JhdGluZwABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeLa/iU+HQFHQAAAHkPHQAAAH4RHQAAAAkdAAABJBIABwEBBw0PERQZHnJhdGluZ3JhdGluZ3UwdTF1MjB1RjBEOXVGMERBAAACAYkABAAGAQEEBwoNVp38lA78lA78lA77lA773Z33bxWLkI2Qj44I9xT3FAWOj5CNkIuQi4+JjoePiI2Gi4YIi/uUBYuGiYeHiIiHh4mGi4aLho2Ijwj7FPcUBYeOiY+LkAgO+92L5hWL95QFi5CNkI6Oj4+PjZCLkIuQiY6HCPcU+xQFj4iNhouGi4aJh4eICPsU+xQFiIeGiYaLhouHjYePiI6Jj4uQCA74lBT4lBWLDAoAAAAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAEAADfYOJZfDzz1AAsCAAAAAADP/aPuAAAAAM/9o+4AAAAAALcBbgAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAAAtwABAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAEAAAAAtwASALcAAAAAUAAABgAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff');font-weight:400;font-style:normal}.ui.accordion .accordion .title .dropdown.icon,.ui.accordion .title .dropdown.icon{font-family:Accordion;line-height:1;-webkit-backface-visibility:hidden;backface-visibility:hidden;font-weight:400;font-style:normal;text-align:center}.ui.accordion .accordion .title .dropdown.icon:before,.ui.accordion .title .dropdown.icon:before{content:'\f0da'}/*! + * # Semantic UI 2.2.10 - Checkbox + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.checkbox{position:relative;display:inline-block;-webkit-backface-visibility:hidden;backface-visibility:hidden;outline:0;vertical-align:baseline;font-style:normal;min-height:17px;font-size:1rem;line-height:17px;min-width:17px}.ui.checkbox input[type=checkbox],.ui.checkbox input[type=radio]{cursor:pointer;position:absolute;top:0;left:0;opacity:0!important;outline:0;z-index:3;width:17px;height:17px}.ui.checkbox .box,.ui.checkbox label{cursor:auto;position:relative;display:block;padding-left:1.85714em;outline:0;font-size:1em}.ui.checkbox .box:before,.ui.checkbox label:before{position:absolute;top:0;left:0;width:17px;height:17px;content:'';background:#fff;border-radius:.21428571rem;-webkit-transition:border .1s ease,opacity .1s ease,-webkit-transform .1s ease,box-shadow .1s ease;transition:border .1s ease,opacity .1s ease,transform .1s ease,box-shadow .1s ease;border:1px solid #d4d4d5}.ui.checkbox .box:after,.ui.checkbox label:after{position:absolute;font-size:14px;top:0;left:0;width:17px;height:17px;text-align:center;opacity:0;color:rgba(0,0,0,.87);-webkit-transition:border .1s ease,opacity .1s ease,-webkit-transform .1s ease,box-shadow .1s ease;transition:border .1s ease,opacity .1s ease,transform .1s ease,box-shadow .1s ease}.ui.checkbox label,.ui.checkbox+label{color:rgba(0,0,0,.87);-webkit-transition:color .1s ease;transition:color .1s ease}.ui.checkbox+label{vertical-align:middle}.ui.checkbox .box:hover::before,.ui.checkbox label:hover::before{background:#fff;border-color:rgba(34,36,38,.35)}.ui.checkbox label:hover,.ui.checkbox+label:hover{color:rgba(0,0,0,.8)}.ui.checkbox .box:active::before,.ui.checkbox label:active::before{background:#f9fafb;border-color:rgba(34,36,38,.35)}.ui.checkbox .box:active::after,.ui.checkbox label:active::after{color:rgba(0,0,0,.95)}.ui.checkbox input:active~label{color:rgba(0,0,0,.95)}.ui.checkbox input:focus~.box:before,.ui.checkbox input:focus~label:before{background:#fff;border-color:#96c8da}.ui.checkbox input:focus~.box:after,.ui.checkbox input:focus~label:after{color:rgba(0,0,0,.95)}.ui.checkbox input:focus~label{color:rgba(0,0,0,.95)}.ui.checkbox input:checked~.box:before,.ui.checkbox input:checked~label:before{background:#fff;border-color:rgba(34,36,38,.35)}.ui.checkbox input:checked~.box:after,.ui.checkbox input:checked~label:after{opacity:1;color:rgba(0,0,0,.95)}.ui.checkbox input:not([type=radio]):indeterminate~.box:before,.ui.checkbox input:not([type=radio]):indeterminate~label:before{background:#fff;border-color:rgba(34,36,38,.35)}.ui.checkbox input:not([type=radio]):indeterminate~.box:after,.ui.checkbox input:not([type=radio]):indeterminate~label:after{opacity:1;color:rgba(0,0,0,.95)}.ui.checkbox input:checked:focus~.box:before,.ui.checkbox input:checked:focus~label:before,.ui.checkbox input:not([type=radio]):indeterminate:focus~.box:before,.ui.checkbox input:not([type=radio]):indeterminate:focus~label:before{background:#fff;border-color:#96c8da}.ui.checkbox input:checked:focus~.box:after,.ui.checkbox input:checked:focus~label:after,.ui.checkbox input:not([type=radio]):indeterminate:focus~.box:after,.ui.checkbox input:not([type=radio]):indeterminate:focus~label:after{color:rgba(0,0,0,.95)}.ui.read-only.checkbox,.ui.read-only.checkbox label{cursor:default}.ui.checkbox input[disabled]~.box:after,.ui.checkbox input[disabled]~label,.ui.disabled.checkbox .box:after,.ui.disabled.checkbox label{cursor:default!important;opacity:.5;color:#000}.ui.checkbox input.hidden{z-index:-1}.ui.checkbox input.hidden+label{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ui.radio.checkbox{min-height:15px}.ui.radio.checkbox .box,.ui.radio.checkbox label{padding-left:1.85714em}.ui.radio.checkbox .box:before,.ui.radio.checkbox label:before{content:'';-webkit-transform:none;transform:none;width:15px;height:15px;border-radius:500rem;top:1px;left:0}.ui.radio.checkbox .box:after,.ui.radio.checkbox label:after{border:none;content:''!important;width:15px;height:15px;line-height:15px}.ui.radio.checkbox .box:after,.ui.radio.checkbox label:after{top:1px;left:0;width:15px;height:15px;border-radius:500rem;-webkit-transform:scale(.46666667);transform:scale(.46666667);background-color:rgba(0,0,0,.87)}.ui.radio.checkbox input:focus~.box:before,.ui.radio.checkbox input:focus~label:before{background-color:#fff}.ui.radio.checkbox input:focus~.box:after,.ui.radio.checkbox input:focus~label:after{background-color:rgba(0,0,0,.95)}.ui.radio.checkbox input:indeterminate~.box:after,.ui.radio.checkbox input:indeterminate~label:after{opacity:0}.ui.radio.checkbox input:checked~.box:before,.ui.radio.checkbox input:checked~label:before{background-color:#fff}.ui.radio.checkbox input:checked~.box:after,.ui.radio.checkbox input:checked~label:after{background-color:rgba(0,0,0,.95)}.ui.radio.checkbox input:focus:checked~.box:before,.ui.radio.checkbox input:focus:checked~label:before{background-color:#fff}.ui.radio.checkbox input:focus:checked~.box:after,.ui.radio.checkbox input:focus:checked~label:after{background-color:rgba(0,0,0,.95)}.ui.slider.checkbox{min-height:1.25rem}.ui.slider.checkbox input{width:3.5rem;height:1.25rem}.ui.slider.checkbox .box,.ui.slider.checkbox label{padding-left:4.5rem;line-height:1rem;color:rgba(0,0,0,.4)}.ui.slider.checkbox .box:before,.ui.slider.checkbox label:before{display:block;position:absolute;content:'';border:none!important;left:0;z-index:1;top:.4rem;background-color:rgba(0,0,0,.05);width:3.5rem;height:.21428571rem;-webkit-transform:none;transform:none;border-radius:500rem;-webkit-transition:background .3s ease;transition:background .3s ease}.ui.slider.checkbox .box:after,.ui.slider.checkbox label:after{background:#fff -webkit-linear-gradient(transparent,rgba(0,0,0,.05));background:#fff linear-gradient(transparent,rgba(0,0,0,.05));position:absolute;content:''!important;opacity:1;z-index:2;border:none;box-shadow:0 1px 2px 0 rgba(34,36,38,.15),0 0 0 1px rgba(34,36,38,.15) inset;width:1.5rem;height:1.5rem;top:-.25rem;left:0;-webkit-transform:none;transform:none;border-radius:500rem;-webkit-transition:left .3s ease;transition:left .3s ease}.ui.slider.checkbox input:focus~.box:before,.ui.slider.checkbox input:focus~label:before{background-color:rgba(0,0,0,.15);border:none}.ui.slider.checkbox .box:hover,.ui.slider.checkbox label:hover{color:rgba(0,0,0,.8)}.ui.slider.checkbox .box:hover::before,.ui.slider.checkbox label:hover::before{background:rgba(0,0,0,.15)}.ui.slider.checkbox input:checked~.box,.ui.slider.checkbox input:checked~label{color:rgba(0,0,0,.95)!important}.ui.slider.checkbox input:checked~.box:before,.ui.slider.checkbox input:checked~label:before{background-color:#545454!important}.ui.slider.checkbox input:checked~.box:after,.ui.slider.checkbox input:checked~label:after{left:2rem}.ui.slider.checkbox input:focus:checked~.box,.ui.slider.checkbox input:focus:checked~label{color:rgba(0,0,0,.95)!important}.ui.slider.checkbox input:focus:checked~.box:before,.ui.slider.checkbox input:focus:checked~label:before{background-color:#000!important}.ui.toggle.checkbox{min-height:1.5rem}.ui.toggle.checkbox input{width:3.5rem;height:1.5rem}.ui.toggle.checkbox .box,.ui.toggle.checkbox label{min-height:1.5rem;padding-left:4.5rem;color:rgba(0,0,0,.87)}.ui.toggle.checkbox label{padding-top:.15em}.ui.toggle.checkbox .box:before,.ui.toggle.checkbox label:before{display:block;position:absolute;content:'';z-index:1;-webkit-transform:none;transform:none;border:none;top:0;background:rgba(0,0,0,.05);box-shadow:none;width:3.5rem;height:1.5rem;border-radius:500rem}.ui.toggle.checkbox .box:after,.ui.toggle.checkbox label:after{background:#fff -webkit-linear-gradient(transparent,rgba(0,0,0,.05));background:#fff linear-gradient(transparent,rgba(0,0,0,.05));position:absolute;content:''!important;opacity:1;z-index:2;border:none;box-shadow:0 1px 2px 0 rgba(34,36,38,.15),0 0 0 1px rgba(34,36,38,.15) inset;width:1.5rem;height:1.5rem;top:0;left:0;border-radius:500rem;-webkit-transition:background .3s ease,left .3s ease;transition:background .3s ease,left .3s ease}.ui.toggle.checkbox input~.box:after,.ui.toggle.checkbox input~label:after{left:-.05rem;box-shadow:none}.ui.toggle.checkbox input:focus~.box:before,.ui.toggle.checkbox input:focus~label:before{background-color:rgba(0,0,0,.15);border:none}.ui.toggle.checkbox .box:hover::before,.ui.toggle.checkbox label:hover::before{background-color:rgba(0,0,0,.15);border:none}.ui.toggle.checkbox input:checked~.box,.ui.toggle.checkbox input:checked~label{color:rgba(0,0,0,.95)!important}.ui.toggle.checkbox input:checked~.box:before,.ui.toggle.checkbox input:checked~label:before{background-color:#2185d0!important}.ui.toggle.checkbox input:checked~.box:after,.ui.toggle.checkbox input:checked~label:after{left:2.15rem;box-shadow:none}.ui.toggle.checkbox input:focus:checked~.box,.ui.toggle.checkbox input:focus:checked~label{color:rgba(0,0,0,.95)!important}.ui.toggle.checkbox input:focus:checked~.box:before,.ui.toggle.checkbox input:focus:checked~label:before{background-color:#0d71bb!important}.ui.fitted.checkbox .box,.ui.fitted.checkbox label{padding-left:0!important}.ui.fitted.toggle.checkbox{width:3.5rem}.ui.fitted.slider.checkbox{width:3.5rem}@font-face{font-family:Checkbox;src:url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBD8AAAC8AAAAYGNtYXAYVtCJAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zn4huwUAAAF4AAABYGhlYWQGPe1ZAAAC2AAAADZoaGVhB30DyAAAAxAAAAAkaG10eBBKAEUAAAM0AAAAHGxvY2EAmgESAAADUAAAABBtYXhwAAkALwAAA2AAAAAgbmFtZSC8IugAAAOAAAABknBvc3QAAwAAAAAFFAAAACAAAwMTAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADoAgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6AL//f//AAAAAAAg6AD//f//AAH/4xgEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAEUAUQO7AvgAGgAAARQHAQYjIicBJjU0PwE2MzIfAQE2MzIfARYVA7sQ/hQQFhcQ/uMQEE4QFxcQqAF2EBcXEE4QAnMWEP4UEBABHRAXFhBOEBCoAXcQEE4QFwAAAAABAAABbgMlAkkAFAAAARUUBwYjISInJj0BNDc2MyEyFxYVAyUQEBf9SRcQEBAQFwK3FxAQAhJtFxAQEBAXbRcQEBAQFwAAAAABAAAASQMlA24ALAAAARUUBwYrARUUBwYrASInJj0BIyInJj0BNDc2OwE1NDc2OwEyFxYdATMyFxYVAyUQEBfuEBAXbhYQEO4XEBAQEBfuEBAWbhcQEO4XEBACEm0XEBDuFxAQEBAX7hAQF20XEBDuFxAQEBAX7hAQFwAAAQAAAAIAAHRSzT9fDzz1AAsEAAAAAADRsdR3AAAAANGx1HcAAAAAA7sDbgAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAADuwABAAAAAAAAAAAAAAAAAAAABwQAAAAAAAAAAAAAAAIAAAAEAABFAyUAAAMlAAAAAAAAAAoAFAAeAE4AcgCwAAEAAAAHAC0AAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAIAAAAAQAAAAAAAgAHAGkAAQAAAAAAAwAIADkAAQAAAAAABAAIAH4AAQAAAAAABQALABgAAQAAAAAABgAIAFEAAQAAAAAACgAaAJYAAwABBAkAAQAQAAgAAwABBAkAAgAOAHAAAwABBAkAAwAQAEEAAwABBAkABAAQAIYAAwABBAkABQAWACMAAwABBAkABgAQAFkAAwABBAkACgA0ALBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhWZXJzaW9uIDIuMABWAGUAcgBzAGkAbwBuACAAMgAuADBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhDaGVja2JveABDAGgAZQBjAGsAYgBvAHhSZWd1bGFyAFIAZQBnAHUAbABhAHJDaGVja2JveABDAGgAZQBjAGsAYgBvAHhGb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype')}.ui.checkbox .box:after,.ui.checkbox label:after{font-family:Checkbox}.ui.checkbox input:checked~.box:after,.ui.checkbox input:checked~label:after{content:'\e800'}.ui.checkbox input:indeterminate~.box:after,.ui.checkbox input:indeterminate~label:after{font-size:12px;content:'\e801'}/*! + * # Semantic UI 2.2.10 - Dimmer + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.dimmable:not(.body){position:relative}.ui.dimmer{display:none;position:absolute;top:0!important;left:0!important;width:100%;height:100%;text-align:center;vertical-align:middle;background-color:rgba(0,0,0,.85);opacity:0;line-height:1;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-transition:background-color .5s linear;transition:background-color .5s linear;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;will-change:opacity;z-index:1000}.ui.dimmer>.content{width:100%;height:100%;display:table;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.ui.dimmer>.content>*{display:table-cell;vertical-align:middle;color:#fff}.ui.segment>.ui.dimmer{border-radius:inherit!important}.animating.dimmable:not(body),.dimmed.dimmable:not(body){overflow:hidden}.dimmed.dimmable>.ui.animating.dimmer,.dimmed.dimmable>.ui.visible.dimmer,.ui.active.dimmer{display:block;opacity:1}.ui.disabled.dimmer{width:0!important;height:0!important}.ui.page.dimmer{position:fixed;-webkit-transform-style:'';transform-style:'';-webkit-perspective:2000px;perspective:2000px;-webkit-transform-origin:center center;transform-origin:center center}body.animating.in.dimmable,body.dimmed.dimmable{overflow:hidden}body.dimmable>.dimmer{position:fixed}.blurring.dimmable>:not(.dimmer){-webkit-filter:blur(0) grayscale(0);filter:blur(0) grayscale(0);-webkit-transition:.8s -webkit-filter ease,.8s filter ease;transition:.8s filter ease}.blurring.dimmed.dimmable>:not(.dimmer){-webkit-filter:blur(5px) grayscale(.7);filter:blur(5px) grayscale(.7)}.blurring.dimmable>.dimmer{background-color:rgba(0,0,0,.6)}.blurring.dimmable>.inverted.dimmer{background-color:rgba(255,255,255,.6)}.ui.dimmer>.top.aligned.content>*{vertical-align:top}.ui.dimmer>.bottom.aligned.content>*{vertical-align:bottom}.ui.inverted.dimmer{background-color:rgba(255,255,255,.85)}.ui.inverted.dimmer>.content>*{color:#fff}.ui.simple.dimmer{display:block;overflow:hidden;opacity:1;width:0;height:0%;z-index:-100;background-color:rgba(0,0,0,0)}.dimmed.dimmable>.ui.simple.dimmer{overflow:visible;opacity:1;width:100%;height:100%;background-color:rgba(0,0,0,.85);z-index:1}.ui.simple.inverted.dimmer{background-color:rgba(255,255,255,0)}.dimmed.dimmable>.ui.simple.inverted.dimmer{background-color:rgba(255,255,255,.85)}/*! + * # Semantic UI 2.2.10 - Dropdown + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.dropdown{cursor:pointer;position:relative;display:inline-block;outline:0;text-align:left;-webkit-transition:box-shadow .1s ease,width .1s ease;transition:box-shadow .1s ease,width .1s ease;-webkit-tap-highlight-color:transparent}.ui.dropdown .menu{cursor:auto;position:absolute;display:none;outline:0;top:100%;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;margin:0;padding:.57142857em 0;background:#fff;font-size:1em;text-shadow:none;text-align:left;box-shadow:0 2px 4px rgba(0,0,0,.2);border:1px solid #dadada;border-radius:4px;-webkit-transition:opacity .1s ease;transition:opacity .1s ease;z-index:11;will-change:transform,opacity}.ui.dropdown .menu>*{white-space:nowrap}.ui.dropdown>input:not(.search):first-child,.ui.dropdown>select{display:none!important}.ui.dropdown>.dropdown.icon{position:relative;width:auto;font-size:.85714286em;margin:0 0 0 1em}.ui.dropdown .menu>.item .dropdown.icon{width:auto;float:right;margin:0 0 0 1em}.ui.dropdown .menu>.item .dropdown.icon+.text{margin-right:1em}.ui.dropdown>.text{display:inline-block;-webkit-transition:none;transition:none}.ui.dropdown .menu>.item{position:relative;cursor:pointer;display:block;border:none;height:auto;text-align:left;border-top:none;line-height:1em;color:#212121;padding:1em 1.5em!important;font-size:1rem;text-transform:none;font-weight:400;box-shadow:none;-webkit-touch-callout:none}.ui.dropdown .menu>.item:first-child{border-top-width:0}.ui.dropdown .menu .item>[class*="right floated"],.ui.dropdown>.text>[class*="right floated"]{float:right!important;margin-right:0!important;margin-left:1em!important}.ui.dropdown .menu .item>[class*="left floated"],.ui.dropdown>.text>[class*="left floated"]{float:left!important;margin-left:0!important;margin-right:1em!important}.ui.dropdown .menu .item>.flag.floated,.ui.dropdown .menu .item>.icon.floated,.ui.dropdown .menu .item>.image.floated,.ui.dropdown .menu .item>img.floated{margin-top:0}.ui.dropdown .menu>.header{margin:1rem 0 .75rem;padding:0 1.5em;color:rgba(0,0,0,.85);font-size:.92857143rem;font-weight:700;text-transform:none}.ui.dropdown .menu>.divider{border-top:1px solid rgba(34,36,38,.1);height:0;margin:.5em 0}.ui.dropdown .menu>.input{width:auto;display:-webkit-box;display:-ms-flexbox;display:flex;margin:1.14285714rem .78571429rem;min-width:10rem}.ui.dropdown .menu>.header+.input{margin-top:0}.ui.dropdown .menu>.input:not(.transparent) input{padding:.5em 1em}.ui.dropdown .menu>.input:not(.transparent) .button,.ui.dropdown .menu>.input:not(.transparent) .icon,.ui.dropdown .menu>.input:not(.transparent) .label{padding-top:.5em;padding-bottom:.5em}.ui.dropdown .menu>.item>.description,.ui.dropdown>.text>.description{float:right;margin:0 0 0 1em;color:rgba(0,0,0,.4)}.ui.dropdown .menu>.message{padding:1em 1.5em;font-weight:400}.ui.dropdown .menu>.message:not(.ui){color:rgba(0,0,0,.4)}.ui.dropdown .menu .menu{top:0!important;left:100%!important;right:auto!important;margin:0 0 0 -.5em!important;border-radius:4px!important;z-index:21!important}.ui.dropdown .menu .menu:after{display:none}.ui.dropdown>.text>.flag,.ui.dropdown>.text>.icon,.ui.dropdown>.text>.image,.ui.dropdown>.text>.label,.ui.dropdown>.text>img{margin-top:0}.ui.dropdown .menu>.item>.flag,.ui.dropdown .menu>.item>.icon,.ui.dropdown .menu>.item>.image,.ui.dropdown .menu>.item>.label,.ui.dropdown .menu>.item>img{margin-top:0}.ui.dropdown .menu>.item>.flag,.ui.dropdown .menu>.item>.icon,.ui.dropdown .menu>.item>.image,.ui.dropdown .menu>.item>.label,.ui.dropdown .menu>.item>img,.ui.dropdown>.text>.flag,.ui.dropdown>.text>.icon,.ui.dropdown>.text>.image,.ui.dropdown>.text>.label,.ui.dropdown>.text>img{margin-left:0;float:none;margin-right:.78571429rem}.ui.dropdown .menu>.item>.image,.ui.dropdown .menu>.item>img,.ui.dropdown>.text>.image,.ui.dropdown>.text>img{display:inline-block;vertical-align:middle;width:auto;max-height:2em}.ui.dropdown .ui.menu>.item:before,.ui.menu .ui.dropdown .menu>.item:before{display:none}.ui.menu .ui.dropdown .menu .active.item{border-left:none}.ui.buttons>.ui.dropdown:last-child .menu,.ui.menu .right.dropdown.item .menu,.ui.menu .right.menu .dropdown:last-child .menu{left:auto;right:0}.ui.label.dropdown .menu{min-width:100%}.ui.dropdown.icon.button>.dropdown.icon{margin:0}.ui.button.dropdown .menu{min-width:100%}.ui.selection.dropdown{cursor:pointer;word-wrap:break-word;line-height:1em;white-space:normal;outline:0;-webkit-transform:rotateZ(0);transform:rotateZ(0);min-width:14em;min-height:2.78571429em;background:#fff;display:inline-block;padding:.78571429em 2.1em .78571429em 1em;color:#212121;box-shadow:none;border:1px solid rgba(34,36,38,.15);border-radius:4px;-webkit-transition:box-shadow .1s ease,width .1s ease;transition:box-shadow .1s ease,width .1s ease}.ui.selection.dropdown.active,.ui.selection.dropdown.visible{z-index:10}select.ui.dropdown{height:38px;padding:.5em;border:1px solid rgba(34,36,38,.15);visibility:visible}.ui.selection.dropdown>.delete.icon,.ui.selection.dropdown>.dropdown.icon,.ui.selection.dropdown>.search.icon{cursor:pointer;position:absolute;width:auto;height:auto;line-height:1.21428571em;top:.78571429em;right:1em;z-index:3;margin:-.78571429em;padding:.78571429em;opacity:.8;-webkit-transition:opacity .1s ease;transition:opacity .1s ease}.ui.compact.selection.dropdown{min-width:0}.ui.selection.dropdown .menu{overflow-x:hidden;overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-overflow-scrolling:touch;border-top-width:0!important;width:auto;outline:0;margin:0 -1px;min-width:calc(100% + 2px);width:calc(100% + 2px);border-radius:0 0 4px 4px;box-shadow:0 2px 3px 0 rgba(34,36,38,.15);-webkit-transition:opacity .1s ease;transition:opacity .1s ease}.ui.selection.dropdown .menu:after,.ui.selection.dropdown .menu:before{display:none}.ui.selection.dropdown .menu>.message{padding:1em 1.5em}@media only screen and (max-width:767px){.ui.selection.dropdown .menu{max-height:9.3em}}@media only screen and (min-width:768px){.ui.selection.dropdown .menu{max-height:12.4em}}@media only screen and (min-width:992px){.ui.selection.dropdown .menu{max-height:18.6em}}@media only screen and (min-width:1920px){.ui.selection.dropdown .menu{max-height:24.8em}}.ui.selection.dropdown .menu>.item{border-top:none;padding:1em 1.5em!important;white-space:normal;word-wrap:normal}.ui.selection.dropdown .menu>.hidden.addition.item{display:none}.ui.selection.dropdown:hover{border-color:rgba(34,36,38,.35);box-shadow:none}.ui.selection.active.dropdown{border-color:#96c8da;box-shadow:0 2px 3px 0 rgba(34,36,38,.15)}.ui.selection.active.dropdown .menu{border-color:#96c8da;box-shadow:0 2px 3px 0 rgba(34,36,38,.15)}.ui.selection.dropdown:focus{border-color:#96c8da;box-shadow:none}.ui.selection.dropdown:focus .menu{border-color:#96c8da;box-shadow:0 2px 3px 0 rgba(34,36,38,.15)}.ui.selection.visible.dropdown>.text:not(.default){font-weight:400;color:rgba(0,0,0,.8)}.ui.selection.active.dropdown:hover{border-color:#96c8da;box-shadow:0 2px 3px 0 rgba(34,36,38,.15)}.ui.selection.active.dropdown:hover .menu{border-color:#96c8da;box-shadow:0 2px 3px 0 rgba(34,36,38,.15)}.ui.active.selection.dropdown>.dropdown.icon,.ui.visible.selection.dropdown>.dropdown.icon{opacity:1;z-index:3}.ui.active.selection.dropdown{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.ui.active.empty.selection.dropdown{border-radius:4px!important;box-shadow:none!important}.ui.active.empty.selection.dropdown .menu{border:none!important;box-shadow:none!important}.ui.search.dropdown{min-width:''}.ui.search.dropdown>input.search{background:none transparent!important;border:none!important;box-shadow:none!important;cursor:text;top:0;left:1px;width:100%;outline:0;-webkit-tap-highlight-color:rgba(255,255,255,0);padding:inherit}.ui.search.dropdown>input.search{position:absolute;z-index:2}.ui.search.dropdown>.text{cursor:text;position:relative;left:1px;z-index:3}.ui.search.selection.dropdown>input.search{line-height:1.21428571em;padding:.67857143em 2.1em .67857143em 1em}.ui.search.selection.dropdown>span.sizer{line-height:1.21428571em;padding:.67857143em 2.1em .67857143em 1em;display:none;white-space:pre}.ui.search.dropdown.active>input.search,.ui.search.dropdown.visible>input.search{cursor:auto}.ui.search.dropdown.active>.text,.ui.search.dropdown.visible>.text{pointer-events:none}.ui.active.search.dropdown input.search:focus+.text .flag,.ui.active.search.dropdown input.search:focus+.text .icon{opacity:.45}.ui.active.search.dropdown input.search:focus+.text{color:#949494!important}.ui.search.dropdown .menu{overflow-x:hidden;overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-overflow-scrolling:touch}@media only screen and (max-width:767px){.ui.search.dropdown .menu{max-height:9.3em}}@media only screen and (min-width:768px){.ui.search.dropdown .menu{max-height:12.4em}}@media only screen and (min-width:992px){.ui.search.dropdown .menu{max-height:18.6em}}@media only screen and (min-width:1920px){.ui.search.dropdown .menu{max-height:24.8em}}.ui.multiple.dropdown{padding:.22619048em 2.1em .22619048em .35714286em}.ui.multiple.dropdown .menu{cursor:auto}.ui.multiple.search.dropdown,.ui.multiple.search.dropdown>input.search{cursor:text}.ui.multiple.dropdown>.label{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:inline-block;vertical-align:top;white-space:normal;font-size:1em;padding:.35714286em .78571429em;margin:.14285714rem .28571429rem .14285714rem 0;box-shadow:none}.ui.multiple.dropdown .dropdown.icon{margin:'';padding:''}.ui.multiple.dropdown>.text{position:static;padding:0;max-width:100%;margin:.45238095em 0 .45238095em .64285714em;line-height:1.21428571em}.ui.multiple.dropdown>.label~input.search{margin-left:.14285714em!important}.ui.multiple.dropdown>.label~.text{display:none}.ui.multiple.search.dropdown>.text{display:inline-block;position:absolute;top:0;left:0;padding:inherit;margin:.45238095em 0 .45238095em .64285714em;line-height:1.21428571em}.ui.multiple.search.dropdown>.label~.text{display:none}.ui.multiple.search.dropdown>input.search{position:static;padding:0;max-width:100%;margin:.45238095em 0 .45238095em .64285714em;width:2.2em;line-height:1.21428571em}.ui.inline.dropdown{cursor:pointer;display:inline-block;color:inherit}.ui.inline.dropdown .dropdown.icon{margin:0 .5em 0 .21428571em;vertical-align:baseline}.ui.inline.dropdown>.text{font-weight:700}.ui.inline.dropdown .menu{cursor:auto;margin-top:.21428571em;border-radius:4px}.ui.dropdown .menu .active.item{background:0 0;font-weight:700;color:rgba(0,0,0,.95);box-shadow:none;z-index:12}.ui.dropdown .menu>.item:hover{background:rgba(0,0,0,.05);color:rgba(0,0,0,.95);z-index:13}.ui.loading.dropdown>i.icon{height:1em!important;padding:1.14285714em 1.07142857em!important}.ui.loading.dropdown>i.icon:before{position:absolute;content:'';top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.loading.dropdown>i.icon:after{position:absolute;content:'';top:50%;left:50%;box-shadow:0 0 0 1px transparent;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;-webkit-animation:dropdown-spin .6s linear;animation:dropdown-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border-color:#9e9e9e transparent transparent;border-style:solid;border-width:.2em}.ui.loading.dropdown.button>i.icon:after,.ui.loading.dropdown.button>i.icon:before{display:none}@-webkit-keyframes dropdown-spin{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes dropdown-spin{from{-webkit-transform:rotate(0);transform:rotate(0)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.ui.default.dropdown:not(.button)>.text,.ui.dropdown:not(.button)>.default.text{color:#e0e0e0}.ui.default.dropdown:not(.button)>input:focus+.text,.ui.dropdown:not(.button)>input:focus+.default.text{color:#949494}.ui.loading.dropdown>.text{-webkit-transition:none;transition:none}.ui.dropdown .loading.menu{display:block;visibility:hidden;z-index:-1}.ui.dropdown .menu .selected.item,.ui.dropdown.selected{background:rgba(0,0,0,.03);color:rgba(0,0,0,.95)}.ui.dropdown>.filtered.text{visibility:hidden}.ui.dropdown .filtered.item{display:none!important}.ui.dropdown.error,.ui.dropdown.error>.default.text,.ui.dropdown.error>.text{color:#9f3a38}.ui.selection.dropdown.error{background:#fff6f6;border-color:#e0b4b4}.ui.selection.dropdown.error:hover{border-color:#e0b4b4}.ui.dropdown.error>.menu,.ui.dropdown.error>.menu .menu{border-color:#e0b4b4}.ui.dropdown.error>.menu>.item{color:#9f3a38}.ui.multiple.selection.error.dropdown>.label{border-color:#e0b4b4}.ui.dropdown.error>.menu>.item:hover{background-color:#fff2f2}.ui.dropdown.error>.menu .active.item{background-color:#fdcfcf}.ui.disabled.dropdown,.ui.dropdown .menu>.disabled.item{cursor:default;pointer-events:none;opacity:.45}.ui.dropdown .menu{left:0}.ui.dropdown .menu .right.menu,.ui.dropdown .right.menu>.menu{left:100%!important;right:auto!important;border-radius:4px!important}.ui.dropdown .menu .left.menu,.ui.dropdown>.left.menu .menu{left:auto!important;right:100%!important;border-radius:4px!important}.ui.dropdown .item .left.dropdown.icon,.ui.dropdown .left.menu .item .dropdown.icon{width:auto;float:left;margin:0 .78571429rem 0 0}.ui.dropdown .item .left.dropdown.icon,.ui.dropdown .left.menu .item .dropdown.icon{width:auto;float:left;margin:0 .78571429rem 0 0}.ui.dropdown .item .left.dropdown.icon+.text,.ui.dropdown .left.menu .item .dropdown.icon+.text{margin-left:1em}.ui.upward.dropdown>.menu{top:auto;bottom:100%;box-shadow:0 0 3px 0 rgba(0,0,0,.08);border-radius:4px 4px 0 0}.ui.dropdown .upward.menu{top:auto!important;bottom:0!important}.ui.simple.upward.active.dropdown,.ui.simple.upward.dropdown:hover{border-radius:4px 4px 0 0!important}.ui.upward.dropdown.button:not(.pointing):not(.floating).active{border-radius:4px 4px 0 0}.ui.upward.selection.dropdown .menu{border-top-width:1px!important;border-bottom-width:0!important;box-shadow:0 -2px 3px 0 rgba(0,0,0,.08)}.ui.upward.selection.dropdown:hover{box-shadow:0 0 2px 0 rgba(0,0,0,.05)}.ui.active.upward.selection.dropdown{border-radius:0 0 4px 4px!important}.ui.upward.selection.dropdown.visible{box-shadow:0 0 3px 0 rgba(0,0,0,.08);border-radius:0 0 4px 4px!important}.ui.upward.active.selection.dropdown:hover{box-shadow:0 0 3px 0 rgba(0,0,0,.05)}.ui.upward.active.selection.dropdown:hover .menu{box-shadow:0 -2px 3px 0 rgba(0,0,0,.08)}.ui.dropdown .scrolling.menu,.ui.scrolling.dropdown .menu{overflow-x:hidden;overflow-y:auto}.ui.scrolling.dropdown .menu{overflow-x:hidden;overflow-y:auto;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-overflow-scrolling:touch;min-width:100%!important;width:auto!important}.ui.dropdown .scrolling.menu{position:static;overflow-y:auto;border:none;box-shadow:none!important;border-radius:0!important;margin:0!important;min-width:100%!important;width:auto!important;border-top:1px solid #dadada}.ui.dropdown .scrolling.menu>.item.item.item,.ui.scrolling.dropdown .menu .item.item.item{border-top:none}.ui.dropdown .scrolling.menu .item:first-child,.ui.scrolling.dropdown .menu .item:first-child{border-top:none}.ui.dropdown>.animating.menu .scrolling.menu,.ui.dropdown>.visible.menu .scrolling.menu{display:block}@media all and (-ms-high-contrast:none){.ui.dropdown .scrolling.menu,.ui.scrolling.dropdown .menu{min-width:calc(100% - 17px)}}@media only screen and (max-width:767px){.ui.dropdown .scrolling.menu,.ui.scrolling.dropdown .menu{max-height:12em}}@media only screen and (min-width:768px){.ui.dropdown .scrolling.menu,.ui.scrolling.dropdown .menu{max-height:18em}}@media only screen and (min-width:992px){.ui.dropdown .scrolling.menu,.ui.scrolling.dropdown .menu{max-height:24em}}@media only screen and (min-width:1920px){.ui.dropdown .scrolling.menu,.ui.scrolling.dropdown .menu{max-height:24em}}.ui.simple.dropdown .menu:after,.ui.simple.dropdown .menu:before{display:none}.ui.simple.dropdown .menu{position:absolute;display:block;overflow:hidden;top:-9999px!important;opacity:0;width:0;height:0;-webkit-transition:opacity .1s ease;transition:opacity .1s ease}.ui.simple.active.dropdown,.ui.simple.dropdown:hover{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.ui.simple.active.dropdown>.menu,.ui.simple.dropdown:hover>.menu{overflow:visible;width:auto;height:auto;top:100%!important;opacity:1}.ui.simple.dropdown:hover>.menu>.item:hover>.menu,.ui.simple.dropdown>.menu>.item:active>.menu{overflow:visible;width:auto;height:auto;top:0!important;left:100%!important;opacity:1}.ui.simple.disabled.dropdown:hover .menu{display:none;height:0;width:0;overflow:hidden}.ui.simple.visible.dropdown>.menu{display:block}.ui.fluid.dropdown{display:block;width:100%;min-width:0}.ui.fluid.dropdown>.dropdown.icon{float:right}.ui.floating.dropdown .menu{left:0;right:auto;box-shadow:0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15)!important;border-radius:4px!important}.ui.floating.dropdown>.menu{margin-top:.5em!important;border-radius:4px!important}.ui.pointing.dropdown>.menu{top:100%;margin-top:.78571429rem;border-radius:4px}.ui.pointing.dropdown>.menu:after{display:block;position:absolute;pointer-events:none;content:'';visibility:visible;-webkit-transform:rotate(45deg);transform:rotate(45deg);width:.5em;height:.5em;box-shadow:-1px -1px 0 1px #dadada;background:#fff;z-index:2}.ui.pointing.dropdown>.menu:after{top:-.25em;left:50%;margin:0 0 0 -.25em}.ui.top.left.pointing.dropdown>.menu{top:100%;bottom:auto;left:0;right:auto;margin:1em 0 0}.ui.top.left.pointing.dropdown>.menu{top:100%;bottom:auto;left:0;right:auto;margin:1em 0 0}.ui.top.left.pointing.dropdown>.menu:after{top:-.25em;left:1em;right:auto;margin:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ui.top.right.pointing.dropdown>.menu{top:100%;bottom:auto;right:0;left:auto;margin:1em 0 0}.ui.top.right.pointing.dropdown>.menu:after{top:-.25em;left:auto;right:1em;margin:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.ui.left.pointing.dropdown>.menu{top:0;left:100%;right:auto;margin:0 0 0 1em}.ui.left.pointing.dropdown>.menu:after{top:1em;left:-.25em;margin:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.ui.right.pointing.dropdown>.menu{top:0;left:auto;right:100%;margin:0 1em 0 0}.ui.right.pointing.dropdown>.menu:after{top:1em;left:auto;right:-.25em;margin:0;-webkit-transform:rotate(135deg);transform:rotate(135deg)}.ui.bottom.pointing.dropdown>.menu{top:auto;bottom:100%;left:0;right:auto;margin:0 0 1em}.ui.bottom.pointing.dropdown>.menu:after{top:auto;bottom:-.25em;right:auto;margin:0;-webkit-transform:rotate(-135deg);transform:rotate(-135deg)}.ui.bottom.pointing.dropdown>.menu .menu{top:auto!important;bottom:0!important}.ui.bottom.left.pointing.dropdown>.menu{left:0;right:auto}.ui.bottom.left.pointing.dropdown>.menu:after{left:1em;right:auto}.ui.bottom.right.pointing.dropdown>.menu{right:0;left:auto}.ui.bottom.right.pointing.dropdown>.menu:after{left:auto;right:1em}.ui.upward.pointing.dropdown>.menu,.ui.upward.top.pointing.dropdown>.menu{top:auto;bottom:100%;margin:0 0 .78571429rem;border-radius:4px}.ui.upward.pointing.dropdown>.menu:after,.ui.upward.top.pointing.dropdown>.menu:after{top:100%;bottom:auto;box-shadow:1px 1px 0 1px #dadada;margin:-.25em 0 0}.ui.upward.right.pointing.dropdown:not(.top):not(.bottom)>.menu{top:auto;bottom:0;margin:0 1em 0 0}.ui.upward.right.pointing.dropdown:not(.top):not(.bottom)>.menu:after{top:auto;bottom:0;margin:0 0 1em 0;box-shadow:-1px -1px 0 1px #dadada}.ui.upward.left.pointing.dropdown:not(.top):not(.bottom)>.menu{top:auto;bottom:0;margin:0 0 0 1em}.ui.upward.left.pointing.dropdown:not(.top):not(.bottom)>.menu:after{top:auto;bottom:0;margin:0 0 1em 0;box-shadow:-1px -1px 0 1px #dadada}.ui.dropdown{font-family:Roboto}/*! + * # Semantic UI 2.2.10 - Video + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.embed{position:relative;max-width:100%;height:0;overflow:hidden;background:#dcddde;padding-bottom:56.25%}.ui.embed embed,.ui.embed iframe,.ui.embed object{position:absolute;border:none;width:100%;height:100%;top:0;left:0;margin:0;padding:0}.ui.embed>.embed{display:none}.ui.embed>.placeholder{position:absolute;cursor:pointer;top:0;left:0;display:block;width:100%;height:100%;background-color:radial-gradient(transparent 45%,rgba(0,0,0,.3))}.ui.embed>.icon{cursor:pointer;position:absolute;top:0;left:0;width:100%;height:100%;z-index:2}.ui.embed>.icon:after{position:absolute;top:0;left:0;width:100%;height:100%;z-index:3;content:'';background:-webkit-radial-gradient(transparent 45%,rgba(0,0,0,.3));background:radial-gradient(transparent 45%,rgba(0,0,0,.3));opacity:.5;-webkit-transition:opacity .5s ease;transition:opacity .5s ease}.ui.embed>.icon:before{position:absolute;top:50%;left:50%;z-index:4;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%);color:#fff;font-size:6rem;text-shadow:0 2px 10px rgba(34,36,38,.2);-webkit-transition:opacity .5s ease,color .5s ease;transition:opacity .5s ease,color .5s ease;z-index:10}.ui.embed .icon:hover:after{background:-webkit-radial-gradient(transparent 45%,rgba(0,0,0,.3));background:radial-gradient(transparent 45%,rgba(0,0,0,.3));opacity:1}.ui.embed .icon:hover:before{color:#fff}.ui.active.embed>.icon,.ui.active.embed>.placeholder{display:none}.ui.active.embed>.embed{display:block}.ui.square.embed{padding-bottom:100%}.ui[class*="4:3"].embed{padding-bottom:75%}.ui[class*="16:9"].embed{padding-bottom:56.25%}.ui[class*="21:9"].embed{padding-bottom:42.85714286%}/*! + * # Semantic UI 2.2.10 - Modal + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.modal{display:none;position:fixed;z-index:1001;top:50%;left:50%;text-align:left;background:#fff;border:none;box-shadow:1px 3px 3px 0 rgba(0,0,0,.2),1px 3px 15px 2px rgba(0,0,0,.2);-webkit-transform-origin:50% 25%;transform-origin:50% 25%;border-radius:.28571429rem;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;will-change:top,left,margin,transform,opacity}.ui.modal>.icon:first-child+*,.ui.modal>:first-child:not(.icon){border-top-left-radius:.28571429rem;border-top-right-radius:.28571429rem}.ui.modal>:last-child{border-bottom-left-radius:.28571429rem;border-bottom-right-radius:.28571429rem}.ui.modal>.close{cursor:pointer;position:absolute;top:-2.5rem;right:-2.5rem;z-index:1;opacity:.8;font-size:1.25em;color:#fff;width:2.25rem;height:2.25rem;padding:.625rem 0 0 0}.ui.modal>.close:hover{opacity:1}.ui.modal>.header{display:block;font-family:HelveticaNeueLTStd-Lt,Helvetica,Arial,sans-serif;background:#fff;margin:0;padding:1.25rem 1.5rem;box-shadow:none;color:rgba(0,0,0,.85);border-bottom:1px solid rgba(34,36,38,.15)}.ui.modal>.header:not(.ui){font-size:1.42857143rem;line-height:1.28571429em;font-weight:700}.ui.modal>.content{display:block;width:100%;font-size:1em;line-height:1.4;padding:1.5rem;background:#fff}.ui.modal>.image.content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.ui.modal>.content>.image{display:block;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:'';-ms-flex-item-align:top;align-self:top}.ui.modal>[class*="top aligned"]{-ms-flex-item-align:top;align-self:top}.ui.modal>[class*="middle aligned"]{-ms-flex-item-align:middle;align-self:middle}.ui.modal>[class*=stretched]{-ms-flex-item-align:stretch;align-self:stretch}.ui.modal>.content>.description{display:block;-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;min-width:0;-ms-flex-item-align:top;align-self:top}.ui.modal>.content>.icon+.description,.ui.modal>.content>.image+.description{-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;min-width:'';width:auto;padding-left:2em}.ui.modal>.content>.image>i.icon{margin:0;opacity:1;width:auto;line-height:1;font-size:8rem}.ui.modal>.actions{background:#f9fafb;padding:1rem 1rem;border-top:1px solid rgba(34,36,38,.15);text-align:right}.ui.modal .actions>.button{margin-left:.75em}@media only screen and (max-width:767px){.ui.modal{width:95%;margin:0 0 0 -47.5%}}@media only screen and (min-width:768px){.ui.modal{width:88%;margin:0 0 0 -44%}}@media only screen and (min-width:992px){.ui.modal{width:850px;margin:0 0 0 -425px}}@media only screen and (min-width:1200px){.ui.modal{width:900px;margin:0 0 0 -450px}}@media only screen and (min-width:1920px){.ui.modal{width:950px;margin:0 0 0 -475px}}@media only screen and (max-width:991px){.ui.modal>.header{padding-right:2.25rem}.ui.modal>.close{top:1.0535rem;right:1rem;color:rgba(0,0,0,.87)}}@media only screen and (max-width:767px){.ui.modal>.header{padding:.75rem 1rem!important;padding-right:2.25rem!important}.ui.modal>.content{display:block;padding:1rem!important}.ui.modal>.close{top:.5rem!important;right:.5rem!important}.ui.modal .image.content{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.ui.modal .content>.image{display:block;max-width:100%;margin:0 auto!important;text-align:center;padding:0 0 1rem!important}.ui.modal>.content>.image>i.icon{font-size:5rem;text-align:center}.ui.modal .content>.description{display:block;width:100%!important;margin:0!important;padding:1rem 0!important;box-shadow:none}.ui.modal>.actions{padding:1rem 1rem 0!important}.ui.modal .actions>.button,.ui.modal .actions>.buttons{margin-bottom:1rem}}.ui.inverted.dimmer>.ui.modal{box-shadow:1px 3px 10px 2px rgba(0,0,0,.2)}.ui.basic.modal{background-color:transparent;border:none;border-radius:0;box-shadow:none!important;color:#fff}.ui.basic.modal>.actions,.ui.basic.modal>.content,.ui.basic.modal>.header{background-color:transparent}.ui.basic.modal>.header{color:#fff}.ui.basic.modal>.close{top:1rem;right:1.5rem}.ui.inverted.dimmer>.basic.modal{color:rgba(0,0,0,.87)}.ui.inverted.dimmer>.ui.basic.modal>.header{color:rgba(0,0,0,.85)}@media only screen and (max-width:991px){.ui.basic.modal>.close{color:#fff}}.ui.active.modal{display:block}.scrolling.dimmable.dimmed{overflow:hidden}.scrolling.dimmable.dimmed>.dimmer{overflow:auto;-webkit-overflow-scrolling:touch}.scrolling.dimmable>.dimmer{position:fixed}.modals.dimmer .ui.scrolling.modal{position:static!important;margin:3.5rem auto!important}.scrolling.undetached.dimmable.dimmed{overflow:auto;-webkit-overflow-scrolling:touch}.scrolling.undetached.dimmable.dimmed>.dimmer{overflow:hidden}.scrolling.undetached.dimmable .ui.scrolling.modal{position:absolute;left:50%;margin-top:3.5rem!important}.undetached.dimmable.dimmed>.pusher{z-index:auto}@media only screen and (max-width:991px){.modals.dimmer .ui.scrolling.modal{margin-top:1rem!important;margin-bottom:1rem!important}}.ui.fullscreen.modal{width:95%!important;left:2.5%!important;margin:1em auto}.ui.fullscreen.scrolling.modal{left:0!important}.ui.fullscreen.modal>.header{padding-right:2.25rem}.ui.fullscreen.modal>.close{top:1.0535rem;right:1rem;color:rgba(0,0,0,.87)}.ui.modal{font-size:1rem}.ui.small.modal>.header:not(.ui){font-size:1.3em}@media only screen and (max-width:767px){.ui.small.modal{width:95%;margin:0 0 0 -47.5%}}@media only screen and (min-width:768px){.ui.small.modal{width:70.4%;margin:0 0 0 -35.2%}}@media only screen and (min-width:992px){.ui.small.modal{width:680px;margin:0 0 0 -340px}}@media only screen and (min-width:1200px){.ui.small.modal{width:720px;margin:0 0 0 -360px}}@media only screen and (min-width:1920px){.ui.small.modal{width:760px;margin:0 0 0 -380px}}.ui.large.modal>.header{font-size:1.6em}@media only screen and (max-width:767px){.ui.large.modal{width:95%;margin:0 0 0 -47.5%}}@media only screen and (min-width:768px){.ui.large.modal{width:88%;margin:0 0 0 -44%}}@media only screen and (min-width:992px){.ui.large.modal{width:1020px;margin:0 0 0 -510px}}@media only screen and (min-width:1200px){.ui.large.modal{width:1080px;margin:0 0 0 -540px}}@media only screen and (min-width:1920px){.ui.large.modal{width:1140px;margin:0 0 0 -570px}}/*! + * # Semantic UI 2.2.10 - Nag + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.nag{display:none;opacity:.95;position:relative;top:0;left:0;z-index:999;min-height:0;width:100%;margin:0;padding:.75em 1em;background:#555;box-shadow:0 1px 2px 0 rgba(0,0,0,.2);font-size:1rem;text-align:center;color:rgba(0,0,0,.87);border-radius:0 0 .28571429rem .28571429rem;-webkit-transition:.2s background ease;transition:.2s background ease}a.ui.nag{cursor:pointer}.ui.nag>.title{display:inline-block;margin:0 .5em;color:#fff}.ui.nag>.close.icon{cursor:pointer;opacity:.4;position:absolute;top:50%;right:1em;font-size:1em;margin:-.5em 0 0;color:#fff;-webkit-transition:opacity .2s ease;transition:opacity .2s ease}.ui.nag:hover{background:#555;opacity:1}.ui.nag .close:hover{opacity:1}.ui.overlay.nag{position:absolute;display:block}.ui.fixed.nag{position:fixed}.ui.bottom.nag,.ui.bottom.nags{border-radius:.28571429rem .28571429rem 0 0;top:auto;bottom:0}.ui.inverted.nag,.ui.inverted.nags .nag{background-color:#f3f4f5;color:rgba(0,0,0,.85)}.ui.inverted.nag .close,.ui.inverted.nag .title,.ui.inverted.nags .nag .close,.ui.inverted.nags .nag .title{color:rgba(0,0,0,.4)}.ui.nags .nag{border-radius:0!important}.ui.nags .nag:last-child{border-radius:0 0 .28571429rem .28571429rem}.ui.bottom.nags .nag:last-child{border-radius:.28571429rem .28571429rem 0 0}/*! + * # Semantic UI 2.2.10 - Popup + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.popup{display:none;position:absolute;top:0;right:0;min-width:-webkit-min-content;min-width:-moz-min-content;min-width:min-content;z-index:1900;border:1px solid #d4d4d5;line-height:1.4285em;max-width:250px;background:#fff;padding:.833em 1em;font-weight:400;font-style:normal;color:rgba(0,0,0,.87);border-radius:.28571429rem;box-shadow:0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15)}.ui.popup>.header{padding:0;font-family:HelveticaNeueLTStd-Lt,Helvetica,Arial,sans-serif;font-size:1.14285714em;line-height:1.2;font-weight:700}.ui.popup>.header+.content{padding-top:.5em}.ui.popup:before{position:absolute;content:'';width:.71428571em;height:.71428571em;background:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg);z-index:2;box-shadow:1px 1px 0 0 #bababc}[data-tooltip]{position:relative}[data-tooltip]:before{pointer-events:none;position:absolute;content:'';font-size:1rem;width:.71428571em;height:.71428571em;background:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg);z-index:2;box-shadow:1px 1px 0 0 #bababc}[data-tooltip]:after{pointer-events:none;content:attr(data-tooltip);position:absolute;text-transform:none;text-align:left;white-space:nowrap;font-size:1rem;border:1px solid #d4d4d5;line-height:1.4285em;max-width:none;background:#fff;padding:.833em 1em;font-weight:400;font-style:normal;color:rgba(0,0,0,.87);border-radius:.28571429rem;box-shadow:0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15);z-index:1}[data-tooltip]:not([data-position]):before{top:auto;right:auto;bottom:100%;left:50%;background:#fff;margin-left:-.07142857rem;margin-bottom:.14285714rem}[data-tooltip]:not([data-position]):after{left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);bottom:100%;margin-bottom:.5em}[data-tooltip]:after,[data-tooltip]:before{pointer-events:none;visibility:hidden}[data-tooltip]:before{opacity:0;-webkit-transform:rotate(45deg) scale(0)!important;transform:rotate(45deg) scale(0)!important;-webkit-transform-origin:center top;transform-origin:center top;-webkit-transition:all .1s ease;transition:all .1s ease}[data-tooltip]:after{opacity:1;-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-transition:all .1s ease;transition:all .1s ease}[data-tooltip]:hover:after,[data-tooltip]:hover:before{visibility:visible;pointer-events:auto}[data-tooltip]:hover:before{-webkit-transform:rotate(45deg) scale(1)!important;transform:rotate(45deg) scale(1)!important;opacity:1}[data-tooltip]:after,[data-tooltip][data-position="bottom center"]:after,[data-tooltip][data-position="top center"]:after{-webkit-transform:translateX(-50%) scale(0)!important;transform:translateX(-50%) scale(0)!important}[data-tooltip]:hover:after,[data-tooltip][data-position="bottom center"]:hover:after{-webkit-transform:translateX(-50%) scale(1)!important;transform:translateX(-50%) scale(1)!important}[data-tooltip][data-position="left center"]:after,[data-tooltip][data-position="right center"]:after{-webkit-transform:translateY(-50%) scale(0)!important;transform:translateY(-50%) scale(0)!important}[data-tooltip][data-position="left center"]:hover:after,[data-tooltip][data-position="right center"]:hover:after{-webkit-transform:translateY(-50%) scale(1)!important;transform:translateY(-50%) scale(1)!important}[data-tooltip][data-position="bottom left"]:after,[data-tooltip][data-position="bottom right"]:after,[data-tooltip][data-position="top left"]:after,[data-tooltip][data-position="top right"]:after{-webkit-transform:scale(0)!important;transform:scale(0)!important}[data-tooltip][data-position="bottom left"]:hover:after,[data-tooltip][data-position="bottom right"]:hover:after,[data-tooltip][data-position="top left"]:hover:after,[data-tooltip][data-position="top right"]:hover:after{-webkit-transform:scale(1)!important;transform:scale(1)!important}[data-tooltip][data-inverted]:before{box-shadow:none!important}[data-tooltip][data-inverted]:before{background:#1b1c1d}[data-tooltip][data-inverted]:after{background:#1b1c1d;color:#fff;border:none;box-shadow:none}[data-tooltip][data-inverted]:after .header{background-color:none;color:#fff}[data-position="top center"][data-tooltip]:after{top:auto;right:auto;left:50%;bottom:100%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin-bottom:.5em}[data-position="top center"][data-tooltip]:before{top:auto;right:auto;bottom:100%;left:50%;background:#fff;margin-left:-.07142857rem;margin-bottom:.14285714rem}[data-position="top left"][data-tooltip]:after{top:auto;right:auto;left:0;bottom:100%;margin-bottom:.5em}[data-position="top left"][data-tooltip]:before{top:auto;right:auto;bottom:100%;left:1em;margin-left:-.07142857rem;margin-bottom:.14285714rem}[data-position="top right"][data-tooltip]:after{top:auto;left:auto;right:0;bottom:100%;margin-bottom:.5em}[data-position="top right"][data-tooltip]:before{top:auto;left:auto;bottom:100%;right:1em;margin-left:-.07142857rem;margin-bottom:.14285714rem}[data-position="bottom center"][data-tooltip]:after{bottom:auto;right:auto;left:50%;top:100%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin-top:.5em}[data-position="bottom center"][data-tooltip]:before{bottom:auto;right:auto;top:100%;left:50%;margin-left:-.07142857rem;margin-top:.14285714rem}[data-position="bottom left"][data-tooltip]:after{left:0;top:100%;margin-top:.5em}[data-position="bottom left"][data-tooltip]:before{bottom:auto;right:auto;top:100%;left:1em;margin-left:-.07142857rem;margin-top:.14285714rem}[data-position="bottom right"][data-tooltip]:after{right:0;top:100%;margin-top:.5em}[data-position="bottom right"][data-tooltip]:before{bottom:auto;left:auto;top:100%;right:1em;margin-left:-.14285714rem;margin-top:.07142857rem}[data-position="left center"][data-tooltip]:after{right:100%;top:50%;margin-right:.5em;-webkit-transform:translateY(-50%);transform:translateY(-50%)}[data-position="left center"][data-tooltip]:before{right:100%;top:50%;margin-top:-.14285714rem;margin-right:-.07142857rem}[data-position="right center"][data-tooltip]:after{left:100%;top:50%;margin-left:.5em;-webkit-transform:translateY(-50%);transform:translateY(-50%)}[data-position="right center"][data-tooltip]:before{left:100%;top:50%;margin-top:-.07142857rem;margin-left:.14285714rem}[data-position~=bottom][data-tooltip]:before{background:#fff;box-shadow:-1px -1px 0 0 #bababc}[data-position="left center"][data-tooltip]:before{background:#fff;box-shadow:1px -1px 0 0 #bababc}[data-position="right center"][data-tooltip]:before{background:#fff;box-shadow:-1px 1px 0 0 #bababc}[data-position~=top][data-tooltip]:before{background:#fff}[data-inverted][data-position~=bottom][data-tooltip]:before{background:#1b1c1d;box-shadow:-1px -1px 0 0 #bababc}[data-inverted][data-position="left center"][data-tooltip]:before{background:#1b1c1d;box-shadow:1px -1px 0 0 #bababc}[data-inverted][data-position="right center"][data-tooltip]:before{background:#1b1c1d;box-shadow:-1px 1px 0 0 #bababc}[data-inverted][data-position~=top][data-tooltip]:before{background:#1b1c1d}[data-position~=bottom][data-tooltip]:before{-webkit-transform-origin:center bottom;transform-origin:center bottom}[data-position~=bottom][data-tooltip]:after{-webkit-transform-origin:center top;transform-origin:center top}[data-position="left center"][data-tooltip]:before{-webkit-transform-origin:top center;transform-origin:top center}[data-position="left center"][data-tooltip]:after{-webkit-transform-origin:right center;transform-origin:right center}[data-position="right center"][data-tooltip]:before{-webkit-transform-origin:right center;transform-origin:right center}[data-position="right center"][data-tooltip]:after{-webkit-transform-origin:left center;transform-origin:left center}.ui.popup{margin:0}.ui.top.popup{margin:0 0 .71428571em}.ui.top.left.popup{-webkit-transform-origin:left bottom;transform-origin:left bottom}.ui.top.center.popup{-webkit-transform-origin:center bottom;transform-origin:center bottom}.ui.top.right.popup{-webkit-transform-origin:right bottom;transform-origin:right bottom}.ui.left.center.popup{margin:0 .71428571em 0 0;-webkit-transform-origin:right 50%;transform-origin:right 50%}.ui.right.center.popup{margin:0 0 0 .71428571em;-webkit-transform-origin:left 50%;transform-origin:left 50%}.ui.bottom.popup{margin:.71428571em 0 0}.ui.bottom.left.popup{-webkit-transform-origin:left top;transform-origin:left top}.ui.bottom.center.popup{-webkit-transform-origin:center top;transform-origin:center top}.ui.bottom.right.popup{-webkit-transform-origin:right top;transform-origin:right top}.ui.bottom.center.popup:before{margin-left:-.30714286em;top:-.30714286em;left:50%;right:auto;bottom:auto;box-shadow:-1px -1px 0 0 #bababc}.ui.bottom.left.popup{margin-left:0}.ui.bottom.left.popup:before{top:-.30714286em;left:1em;right:auto;bottom:auto;margin-left:0;box-shadow:-1px -1px 0 0 #bababc}.ui.bottom.right.popup{margin-right:0}.ui.bottom.right.popup:before{top:-.30714286em;right:1em;bottom:auto;left:auto;margin-left:0;box-shadow:-1px -1px 0 0 #bababc}.ui.top.center.popup:before{top:auto;right:auto;bottom:-.30714286em;left:50%;margin-left:-.30714286em}.ui.top.left.popup{margin-left:0}.ui.top.left.popup:before{bottom:-.30714286em;left:1em;top:auto;right:auto;margin-left:0}.ui.top.right.popup{margin-right:0}.ui.top.right.popup:before{bottom:-.30714286em;right:1em;top:auto;left:auto;margin-left:0}.ui.left.center.popup:before{top:50%;right:-.30714286em;bottom:auto;left:auto;margin-top:-.30714286em;box-shadow:1px -1px 0 0 #bababc}.ui.right.center.popup:before{top:50%;left:-.30714286em;bottom:auto;right:auto;margin-top:-.30714286em;box-shadow:-1px 1px 0 0 #bababc}.ui.bottom.popup:before{background:#fff}.ui.left.center.popup:before,.ui.right.center.popup:before{background:#fff}.ui.top.popup:before{background:#fff}.ui.inverted.bottom.popup:before{background:#1b1c1d}.ui.inverted.left.center.popup:before,.ui.inverted.right.center.popup:before{background:#1b1c1d}.ui.inverted.top.popup:before{background:#1b1c1d}.ui.popup>.ui.grid:not(.padded){width:calc(100% + 1.75rem);margin:-.7rem -.875rem}.ui.loading.popup{display:block;visibility:hidden;z-index:-1}.ui.animating.popup,.ui.visible.popup{display:block}.ui.visible.popup{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-backface-visibility:hidden;backface-visibility:hidden}.ui.basic.popup:before{display:none}.ui.wide.popup{max-width:350px}.ui[class*="very wide"].popup{max-width:550px}@media only screen and (max-width:767px){.ui.wide.popup,.ui[class*="very wide"].popup{max-width:250px}}.ui.fluid.popup{width:100%;max-width:none}.ui.inverted.popup{background:#1b1c1d;color:#fff;border:none;box-shadow:none}.ui.inverted.popup .header{background-color:none;color:#fff}.ui.inverted.popup:before{background-color:#1b1c1d;box-shadow:none!important}.ui.flowing.popup{max-width:none}.ui.mini.popup{font-size:.78571429rem}.ui.tiny.popup{font-size:.85714286rem}.ui.small.popup{font-size:.92857143rem}.ui.popup{font-size:1rem}.ui.large.popup{font-size:1.14285714rem}.ui.huge.popup{font-size:1.42857143rem}/*! + * # Semantic UI 2.2.10 - Progress Bar + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.progress{position:relative;display:block;max-width:100%;border:none;margin:1em 0 2.5em;box-shadow:none;background:rgba(0,0,0,.1);padding:0;border-radius:.28571429rem}.ui.progress:first-child{margin:0 0 2.5em}.ui.progress:last-child{margin:0 0 1.5em}.ui.progress .bar{display:block;line-height:1;position:relative;width:0;min-width:2em;background:#888;border-radius:.28571429rem;-webkit-transition:width .1s ease,background-color .1s ease;transition:width .1s ease,background-color .1s ease}.ui.progress .bar>.progress{white-space:nowrap;position:absolute;width:auto;font-size:.92857143em;top:50%;right:.5em;left:auto;bottom:auto;color:rgba(255,255,255,.7);text-shadow:none;margin-top:-.5em;font-weight:700;text-align:left}.ui.progress>.label{position:absolute;width:100%;font-size:1em;top:100%;right:auto;left:0;bottom:auto;color:rgba(0,0,0,.87);font-weight:700;text-shadow:none;margin-top:.2em;text-align:center;-webkit-transition:color .4s ease;transition:color .4s ease}.ui.indicating.progress[data-percent^="1"] .bar,.ui.indicating.progress[data-percent^="2"] .bar{background-color:#d95c5c}.ui.indicating.progress[data-percent^="3"] .bar{background-color:#efbc72}.ui.indicating.progress[data-percent^="4"] .bar,.ui.indicating.progress[data-percent^="5"] .bar{background-color:#e6bb48}.ui.indicating.progress[data-percent^="6"] .bar{background-color:#ddc928}.ui.indicating.progress[data-percent^="7"] .bar,.ui.indicating.progress[data-percent^="8"] .bar{background-color:#b4d95c}.ui.indicating.progress[data-percent^="100"] .bar,.ui.indicating.progress[data-percent^="9"] .bar{background-color:#66da81}.ui.indicating.progress[data-percent^="1"] .label,.ui.indicating.progress[data-percent^="2"] .label{color:rgba(0,0,0,.87)}.ui.indicating.progress[data-percent^="3"] .label{color:rgba(0,0,0,.87)}.ui.indicating.progress[data-percent^="4"] .label,.ui.indicating.progress[data-percent^="5"] .label{color:rgba(0,0,0,.87)}.ui.indicating.progress[data-percent^="6"] .label{color:rgba(0,0,0,.87)}.ui.indicating.progress[data-percent^="7"] .label,.ui.indicating.progress[data-percent^="8"] .label{color:rgba(0,0,0,.87)}.ui.indicating.progress[data-percent^="100"] .label,.ui.indicating.progress[data-percent^="9"] .label{color:rgba(0,0,0,.87)}.ui.indicating.progress[data-percent="1"] .bar,.ui.indicating.progress[data-percent="2"] .bar,.ui.indicating.progress[data-percent="3"] .bar,.ui.indicating.progress[data-percent="4"] .bar,.ui.indicating.progress[data-percent="5"] .bar,.ui.indicating.progress[data-percent="6"] .bar,.ui.indicating.progress[data-percent="7"] .bar,.ui.indicating.progress[data-percent="8"] .bar,.ui.indicating.progress[data-percent="9"] .bar{background-color:#d95c5c}.ui.indicating.progress[data-percent="1"] .label,.ui.indicating.progress[data-percent="2"] .label,.ui.indicating.progress[data-percent="3"] .label,.ui.indicating.progress[data-percent="4"] .label,.ui.indicating.progress[data-percent="5"] .label,.ui.indicating.progress[data-percent="6"] .label,.ui.indicating.progress[data-percent="7"] .label,.ui.indicating.progress[data-percent="8"] .label,.ui.indicating.progress[data-percent="9"] .label{color:rgba(0,0,0,.87)}.ui.indicating.progress.success .label{color:#1a531b}.ui.progress.success .bar{background-color:#21ba45!important}.ui.progress.success .bar,.ui.progress.success .bar::after{-webkit-animation:none!important;animation:none!important}.ui.progress.success>.label{color:#1a531b}.ui.progress.warning .bar{background-color:#f2c037!important}.ui.progress.warning .bar,.ui.progress.warning .bar::after{-webkit-animation:none!important;animation:none!important}.ui.progress.warning>.label{color:#794b02}.ui.progress.error .bar{background-color:#db2828!important}.ui.progress.error .bar,.ui.progress.error .bar::after{-webkit-animation:none!important;animation:none!important}.ui.progress.error>.label{color:#912d2b}.ui.active.progress .bar{position:relative;min-width:2em}.ui.active.progress .bar::after{content:'';opacity:0;position:absolute;top:0;left:0;right:0;bottom:0;background:#fff;border-radius:.28571429rem;-webkit-animation:progress-active 2s ease infinite;animation:progress-active 2s ease infinite}@-webkit-keyframes progress-active{0%{opacity:.3;width:0}100%{opacity:0;width:100%}}@keyframes progress-active{0%{opacity:.3;width:0}100%{opacity:0;width:100%}}.ui.disabled.progress{opacity:.35}.ui.disabled.progress .bar,.ui.disabled.progress .bar::after{-webkit-animation:none!important;animation:none!important}.ui.inverted.progress{background:rgba(255,255,255,.08);border:none}.ui.inverted.progress .bar{background:#888}.ui.inverted.progress .bar>.progress{color:#f9fafb}.ui.inverted.progress>.label{color:#fff}.ui.inverted.progress.success>.label{color:#21ba45}.ui.inverted.progress.warning>.label{color:#f2c037}.ui.inverted.progress.error>.label{color:#db2828}.ui.progress.attached{background:0 0;position:relative;border:none;margin:0}.ui.progress.attached,.ui.progress.attached .bar{display:block;height:.2rem;padding:0;overflow:hidden;border-radius:0 0 .28571429rem .28571429rem}.ui.progress.attached .bar{border-radius:0}.ui.progress.top.attached,.ui.progress.top.attached .bar{top:0;border-radius:.28571429rem .28571429rem 0 0}.ui.progress.top.attached .bar{border-radius:0}.ui.card>.ui.attached.progress,.ui.segment>.ui.attached.progress{position:absolute;top:auto;left:0;bottom:100%;width:100%}.ui.card>.ui.bottom.attached.progress,.ui.segment>.ui.bottom.attached.progress{top:100%;bottom:auto}.ui.red.progress .bar{background-color:#db2828}.ui.red.inverted.progress .bar{background-color:#ff695e}.ui.orange.progress .bar{background-color:#f2711c}.ui.orange.inverted.progress .bar{background-color:#ff851b}.ui.yellow.progress .bar{background-color:#fbbd08}.ui.yellow.inverted.progress .bar{background-color:#ffe21f}.ui.olive.progress .bar{background-color:#b5cc18}.ui.olive.inverted.progress .bar{background-color:#d9e778}.ui.green.progress .bar{background-color:#21ba45}.ui.green.inverted.progress .bar{background-color:#2ecc40}.ui.teal.progress .bar{background-color:#00b5ad}.ui.teal.inverted.progress .bar{background-color:#6dffff}.ui.blue.progress .bar{background-color:#2185d0}.ui.blue.inverted.progress .bar{background-color:#54c8ff}.ui.violet.progress .bar{background-color:#6435c9}.ui.violet.inverted.progress .bar{background-color:#a291fb}.ui.purple.progress .bar{background-color:#a333c8}.ui.purple.inverted.progress .bar{background-color:#dc73ff}.ui.pink.progress .bar{background-color:#e03997}.ui.pink.inverted.progress .bar{background-color:#ff8edf}.ui.brown.progress .bar{background-color:#a5673f}.ui.brown.inverted.progress .bar{background-color:#d67c1c}.ui.grey.progress .bar{background-color:#767676}.ui.grey.inverted.progress .bar{background-color:#dcddde}.ui.black.progress .bar{background-color:#1b1c1d}.ui.black.inverted.progress .bar{background-color:#545454}.ui.tiny.progress{font-size:.85714286rem}.ui.tiny.progress .bar{height:.5em}.ui.small.progress{font-size:.92857143rem}.ui.small.progress .bar{height:1em}.ui.progress{font-size:1rem}.ui.progress .bar{height:1.75em}.ui.large.progress{font-size:1.14285714rem}.ui.large.progress .bar{height:2.5em}.ui.big.progress{font-size:1.28571429rem}.ui.big.progress .bar{height:3.5em}/*! + * # Semantic UI 2.2.10 - Rating + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.rating{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;white-space:nowrap;vertical-align:baseline}.ui.rating:last-child{margin-right:0}.ui.rating .icon{padding:0;margin:0;text-align:center;font-weight:400;font-style:normal;-webkit-box-flex:1;-ms-flex:1 0 auto;flex:1 0 auto;cursor:pointer;width:1.25em;height:auto;-webkit-transition:opacity .1s ease,background .1s ease,text-shadow .1s ease,color .1s ease;transition:opacity .1s ease,background .1s ease,text-shadow .1s ease,color .1s ease}.ui.rating .icon{background:0 0;color:rgba(0,0,0,.15)}.ui.rating .active.icon{background:0 0;color:rgba(0,0,0,.85)}.ui.rating .icon.selected,.ui.rating .icon.selected.active{background:0 0;color:rgba(0,0,0,.87)}.ui.star.rating .icon{width:1.25em;height:auto;background:0 0;color:rgba(0,0,0,.15);text-shadow:none}.ui.star.rating .active.icon{background:0 0!important;color:#ffe623!important;text-shadow:0 -1px 0 #ddc507,-1px 0 0 #ddc507,0 1px 0 #ddc507,1px 0 0 #ddc507!important}.ui.star.rating .icon.selected,.ui.star.rating .icon.selected.active{background:0 0!important;color:#fc0!important;text-shadow:0 -1px 0 #e6a200,-1px 0 0 #e6a200,0 1px 0 #e6a200,1px 0 0 #e6a200!important}.ui.heart.rating .icon{width:1.4em;height:auto;background:0 0;color:rgba(0,0,0,.15);text-shadow:none!important}.ui.heart.rating .active.icon{background:0 0!important;color:#ff6d75!important;text-shadow:0 -1px 0 #cd0707,-1px 0 0 #cd0707,0 1px 0 #cd0707,1px 0 0 #cd0707!important}.ui.heart.rating .icon.selected,.ui.heart.rating .icon.selected.active{background:0 0!important;color:#ff3000!important;text-shadow:0 -1px 0 #aa0101,-1px 0 0 #aa0101,0 1px 0 #aa0101,1px 0 0 #aa0101!important}.ui.disabled.rating .icon{cursor:default}.ui.rating.selected .active.icon{opacity:1}.ui.rating .icon.selected,.ui.rating.selected .icon.selected{opacity:1}.ui.mini.rating{font-size:.78571429rem}.ui.tiny.rating{font-size:.85714286rem}.ui.small.rating{font-size:.92857143rem}.ui.rating{font-size:1rem}.ui.large.rating{font-size:1.14285714rem}.ui.huge.rating{font-size:1.42857143rem}.ui.massive.rating{font-size:2rem}@font-face{font-family:Rating;src:url(data:application/x-font-ttf;charset=utf-8;base64,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) format('truetype'),url(data:application/font-woff;charset=utf-8;base64,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kIiRi5MI5vdUFfcni4vCBYufhJx8mn2ZepJ3i3aLeoR9fX18g3qLdwiLVAUO+yaLshWL+AQFi5GNkY+RjpCQj5KNj42PjI+LCPfAiwWPi4+Kj4mRiZCHj4aPhY2Fi4UIi/wEBYuEiYWHhoeGhoeFiIiKhoqHi4GLhI6EkQj7EvcN+xL7DQWEhYOIgouHi4eLh42EjoaPiJCHkImRi5IIDov3XRWLko2Rj5Kltq+vuKW4pbuZvYu9i7t9uHG4ca9npWCPhI2Fi4SLhYmEh4RxYGdoXnAIXnFbflmLWYtbmF6lXqZnrnG2h5KJkouRCLCLFaRkq2yxdLF0tH+4i7iLtJexorGiq6qksm64Z61goZZ3kXaLdItnfm1ycnJybX9oiwhoi22XcqRypH6pi6+LopGglp9gdWdpbl4I9xiwFYuHjIiOiI6IjoqPi4+LjoyOjo2OjY6Lj4ubkJmXl5eWmZGbi4+LjoyOjo2OjY6LjwiLj4mOiY6IjYiNh4tzi3eCenp6eoJ3i3MIDov3XRWLko2Sj5GouK+utqW3pbqYvouci5yJnIgIm6cFjY6NjI+LjIuNi42JjYqOio+JjomOiY6KjomOiY6JjoqNioyKjomMiYuHi4qLiouLCHdnbVVjQ2NDbVV3Zwh9cgWJiIiJiIuJi36SdJiIjYmOi46LjY+UlJlvl3KcdJ90oHeie6WHkYmSi5IIsIsVqlq0Z711CKGzBXqXfpqCnoKdhp6LoIuikaCWn2B1Z2luXgj3GLAVi4eMiI6IjoiOio+Lj4uOjI6OjY6NjouPi5uQmZeXl5aZkZuLj4uOjI6OjY6NjouPCIuPiY6JjoiNiI2Hi3OLd4J6enp6gneLcwji+10VoLAFtI+wmK2hrqKnqKKvdq1wp2uhCJ2rBZ1/nHycepx6mHqWeY+EjYWLhIuEiYWHhIR/gH1+fG9qaXJmeWV5Y4Jhiwi53BXb9yQFjIKMg4uEi3CDc3x1fHV3fHOBCA6L1BWL90sFi5WPlJKSkpKTj5aLCNmLBZKPmJqepJaZlZeVlY+Qj5ONl42WjpeOmI+YkZWTk5OSk46Vi5uLmYiYhZiFlIGSfgiSfo55i3WLeYd5gXgIvosFn4uchJl8mn2Seot3i3qGfIJ9jYSLhYuEi3yIfoR+i4eLh4uHi3eGen99i3CDdnt8CHt8dYNwiwhmiwV5i3mNeY95kHeRc5N1k36Ph4sIOYsFgIuDjoSShJKHlIuVCLCdFYuGjIePiI+Hj4mQi5CLj42Pj46OjY+LkIuQiZCIjoePh42Gi4aLh4mHh4eIioaLhgjUeRWUiwWNi46Lj4qOi4+KjYqOi4+Kj4mQio6KjYqNio+Kj4mQio6KjIqzfquEpIsIrosFr4uemouri5CKkYqQkY6QkI6SjpKNkouSi5KJkoiRlZWQlouYi5CKkImRiZGJj4iOCJGMkI+PlI+UjZKLkouViJODk4SSgo+CiwgmiwWLlpCalJ6UnpCbi5aLnoiYhJSFlH+QeYuGhoeDiYCJf4h/h3+IfoWBg4KHh4SCgH4Ii4qIiYiGh4aIh4mIiIiIh4eGh4aHh4eHiIiHiIeHiIiHiIeKh4mIioiLCIKLi/tLBQ6L90sVi/dLBYuVj5OSk5KSk46WiwjdiwWPi5iPoZOkk6CRnZCdj56Nn4sIq4sFpougg5x8m3yTd4txCIuJBZd8kHuLd4uHi4eLh5J+jn6LfIuEi4SJhZR9kHyLeot3hHp8fH19eoR3iwhYiwWVeI95i3mLdIh6hH6EfoKBfoV+hX2He4uBi4OPg5KFkYaTh5SHlYiTipOKk4qTiJMIiZSIkYiPgZSBl4CaeKR+moSPCD2LBYCLg4+EkoSSh5SLlQiw9zgVi4aMh4+Ij4ePiZCLkIuPjY+Pjo6Nj4uQi5CJkIiOh4+HjYaLhouHiYeHh4iKhouGCNT7OBWUiwWOi46Kj4mPio+IjoiPh4+IjoePiI+Hj4aPho6HjoiNiI6Hj4aOho6Ii4qWfpKDj4YIk4ORgY5+j36OgI1/jYCPg5CGnYuXj5GUkpSOmYuei5aGmoKfgp6GmouWCPCLBZSLlI+SkpOTjpOLlYuSiZKHlIeUho+Fi46PjY+NkY2RjJCLkIuYhpaBlY6RjZKLkgiLkomSiJKIkoaQhY6MkIyRi5CLm4aXgpOBkn6Pe4sIZosFcotrhGN9iouIioaJh4qHiomKiYqIioaKh4mHioiKiYuHioiLh4qIi4mLCIKLi/tLBQ77lIv3txWLkpCPlo0I9yOgzPcWBY6SkI+RiwiL/BL7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwgOi/fFFYu1l6yjoqOjrZe2i5aLl4mYh5eHloWWhJaElIWShZOE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) format('woff');font-weight:400;font-style:normal}.ui.rating .icon{font-family:Rating;line-height:1;-webkit-backface-visibility:hidden;backface-visibility:hidden;font-weight:400;font-style:normal;text-align:center}.ui.rating .icon:before{content:'\f005'}.ui.rating .active.icon:before{content:'\f005'}.ui.star.rating .icon:before{content:'\f005'}.ui.star.rating .active.icon:before{content:'\f005'}.ui.star.rating .partial.icon:before{content:'\f006'}.ui.star.rating .partial.icon{content:'\f005'}.ui.heart.rating .icon:before{content:'\f004'}.ui.heart.rating .active.icon:before{content:'\f004'}/*! + * # Semantic UI 2.2.10 - Search + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.search{position:relative}.ui.search>.prompt{margin:0;outline:0;-webkit-appearance:none;-webkit-tap-highlight-color:rgba(255,255,255,0);text-shadow:none;font-style:normal;font-weight:400;line-height:1.21428571em;padding:.67857143em 1em;font-size:1em;background:#fff;border:1px solid rgba(34,36,38,.15);color:rgba(0,0,0,.87);box-shadow:0 0 0 0 transparent inset;-webkit-transition:background-color .1s ease,color .1s ease,box-shadow .1s ease,border-color .1s ease;transition:background-color .1s ease,color .1s ease,box-shadow .1s ease,border-color .1s ease}.ui.search .prompt{border-radius:500rem}.ui.search .prompt~.search.icon{cursor:pointer}.ui.search>.results{display:none;position:absolute;top:100%;left:0;-webkit-transform-origin:center top;transform-origin:center top;white-space:normal;background:#fff;margin-top:.5em;width:18em;border-radius:.28571429rem;box-shadow:0 2px 4px 0 rgba(34,36,38,.12),0 2px 10px 0 rgba(34,36,38,.15);border:1px solid #d4d4d5;z-index:998}.ui.search>.results>:first-child{border-radius:.28571429rem .28571429rem 0 0}.ui.search>.results>:last-child{border-radius:0 0 .28571429rem .28571429rem}.ui.search>.results .result{cursor:pointer;display:block;overflow:hidden;font-size:1em;padding:.85714286em 1.14285714em;color:rgba(0,0,0,.87);line-height:1.33;border-bottom:1px solid rgba(34,36,38,.1)}.ui.search>.results .result:last-child{border-bottom:none!important}.ui.search>.results .result .image{float:right;overflow:hidden;background:0 0;width:5em;height:3em;border-radius:.25em}.ui.search>.results .result .image img{display:block;width:auto;height:100%}.ui.search>.results .result .image+.content{margin:0 6em 0 0}.ui.search>.results .result .title{margin:-.14285714em 0 0;font-family:HelveticaNeueLTStd-Lt,Helvetica,Arial,sans-serif;font-weight:700;font-size:1em;color:rgba(0,0,0,.85)}.ui.search>.results .result .description{margin-top:0;font-size:.92857143em;color:rgba(0,0,0,.4)}.ui.search>.results .result .price{float:right;color:#21ba45}.ui.search>.results>.message{padding:1em 1em}.ui.search>.results>.message .header{font-family:HelveticaNeueLTStd-Lt,Helvetica,Arial,sans-serif;font-size:1rem;font-weight:700;color:rgba(0,0,0,.87)}.ui.search>.results>.message .description{margin-top:.25rem;font-size:1em;color:rgba(0,0,0,.87)}.ui.search>.results>.action{display:block;border-top:none;background:#f3f4f5;padding:.92857143em 1em;color:rgba(0,0,0,.87);font-weight:700;text-align:center}.ui.search>.prompt:focus{border-color:rgba(34,36,38,.35);background:#fff;color:rgba(0,0,0,.95)}.ui.loading.search .input>i.icon:before{position:absolute;content:'';top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.loading.search .input>i.icon:after{position:absolute;content:'';top:50%;left:50%;margin:-.64285714em 0 0 -.64285714em;width:1.28571429em;height:1.28571429em;-webkit-animation:button-spin .6s linear;animation:button-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border-color:#767676 transparent transparent;border-style:solid;border-width:.2em;box-shadow:0 0 0 1px transparent}.ui.category.search>.results .category .result:hover,.ui.search>.results .result:hover{background:#f9fafb}.ui.search .action:hover{background:#e0e0e0}.ui.category.search>.results .category.active{background:#f3f4f5}.ui.category.search>.results .category.active>.name{color:rgba(0,0,0,.87)}.ui.category.search>.results .category .result.active,.ui.search>.results .result.active{position:relative;border-left-color:rgba(34,36,38,.1);background:#f3f4f5;box-shadow:none}.ui.search>.results .result.active .title{color:rgba(0,0,0,.85)}.ui.search>.results .result.active .description{color:rgba(0,0,0,.85)}.ui.search.selection .prompt{border-radius:.28571429rem}.ui.search.selection>.icon.input>.remove.icon{pointer-events:none;position:absolute;left:auto;opacity:0;color:'';top:0;right:0;-webkit-transition:color .1s ease,opacity .1s ease;transition:color .1s ease,opacity .1s ease}.ui.search.selection>.icon.input>.active.remove.icon{cursor:pointer;opacity:.8;pointer-events:auto}.ui.search.selection>.icon.input:not([class*="left icon"])>.icon~.remove.icon{right:1.85714em}.ui.search.selection>.icon.input>.remove.icon:hover{opacity:1;color:#db2828}.ui.category.search .results{width:28em}.ui.category.search>.results .category{background:#f3f4f5;box-shadow:none;border-bottom:1px solid rgba(34,36,38,.1);-webkit-transition:background .1s ease,border-color .1s ease;transition:background .1s ease,border-color .1s ease}.ui.category.search>.results .category:last-child{border-bottom:none}.ui.category.search>.results .category:first-child .name+.result{border-radius:0 .28571429rem 0 0}.ui.category.search>.results .category:last-child .result:last-child{border-radius:0 0 .28571429rem 0}.ui.category.search>.results .category .result{background:#fff;margin-left:100px;border-left:1px solid rgba(34,36,38,.15);border-bottom:1px solid rgba(34,36,38,.1);-webkit-transition:background .1s ease,border-color .1s ease;transition:background .1s ease,border-color .1s ease;padding:.85714286em 1.14285714em}.ui.category.search>.results .category:last-child .result:last-child{border-bottom:none}.ui.category.search>.results .category>.name{width:100px;background:0 0;font-family:HelveticaNeueLTStd-Lt,Helvetica,Arial,sans-serif;font-size:1em;float:1em;float:left;padding:.4em 1em;font-weight:700;color:rgba(0,0,0,.4)}.ui[class*="left aligned"].search>.results{right:auto;left:0}.ui[class*="right aligned"].search>.results{right:0;left:auto}.ui.fluid.search .results{width:100%}.ui.mini.search{font-size:.78571429em}.ui.small.search{font-size:.92857143em}.ui.search{font-size:1em}.ui.large.search{font-size:1.14285714em}.ui.big.search{font-size:1.28571429em}.ui.huge.search{font-size:1.42857143em}.ui.massive.search{font-size:1.71428571em}/*! + * # Semantic UI 2.2.10 - Shape + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.shape{position:relative;vertical-align:top;display:inline-block;-webkit-perspective:2000px;perspective:2000px;-webkit-transition:-webkit-transform .6s ease-in-out,left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out;transition:transform .6s ease-in-out,left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out}.ui.shape .sides{-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.ui.shape .side{opacity:1;width:100%;margin:0!important;-webkit-backface-visibility:hidden;backface-visibility:hidden}.ui.shape .side{display:none}.ui.shape .side *{-webkit-backface-visibility:visible!important;backface-visibility:visible!important}.ui.cube.shape .side{min-width:15em;height:15em;padding:2em;background-color:#e6e6e6;color:rgba(0,0,0,.87);box-shadow:0 0 2px rgba(0,0,0,.3)}.ui.cube.shape .side>.content{width:100%;height:100%;display:table;text-align:center;-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.ui.cube.shape .side>.content>div{display:table-cell;vertical-align:middle;font-size:2em}.ui.text.shape.animating .sides{position:static}.ui.text.shape .side{white-space:nowrap}.ui.text.shape .side>*{white-space:normal}.ui.loading.shape{position:absolute;top:-9999px;left:-9999px}.ui.shape .animating.side{position:absolute;top:0;left:0;display:block;z-index:100}.ui.shape .hidden.side{opacity:.6}.ui.shape.animating .sides{position:absolute}.ui.shape.animating .sides{-webkit-transition:-webkit-transform .6s ease-in-out,left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out;transition:transform .6s ease-in-out,left .6s ease-in-out,width .6s ease-in-out,height .6s ease-in-out}.ui.shape.animating .side{-webkit-transition:opacity .6s ease-in-out;transition:opacity .6s ease-in-out}.ui.shape .active.side{display:block}/*! + * # Semantic UI 2.2.10 - Sidebar + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.sidebar{position:fixed;top:0;left:0;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:none;transition:none;will-change:transform;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);visibility:hidden;-webkit-overflow-scrolling:touch;height:100%!important;max-height:100%;border-radius:0!important;margin:0!important;overflow-y:auto!important;z-index:102}.ui.sidebar>*{-webkit-backface-visibility:hidden;backface-visibility:hidden}.ui.left.sidebar{right:auto;left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.ui.right.sidebar{right:0!important;left:auto!important;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.ui.bottom.sidebar,.ui.top.sidebar{width:100%!important;height:auto!important}.ui.top.sidebar{top:0!important;bottom:auto!important;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}.ui.bottom.sidebar{top:auto!important;bottom:0!important;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}.pushable{height:100%;overflow-x:hidden;padding:0!important}body.pushable{background:#545454!important}.pushable:not(body){-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.pushable:not(body)>.fixed,.pushable:not(body)>.pusher:after,.pushable:not(body)>.ui.sidebar{position:absolute}.pushable>.fixed{position:fixed;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:-webkit-transform .5s ease;transition:transform .5s ease;will-change:transform;z-index:101}.pushable>.pusher{position:relative;-webkit-backface-visibility:hidden;backface-visibility:hidden;overflow:hidden;min-height:100%;-webkit-transition:-webkit-transform .5s ease;transition:transform .5s ease;z-index:2}body.pushable>.pusher{background:#fff}.pushable>.pusher{background:inherit}.pushable>.pusher:after{position:fixed;top:0;right:0;content:'';background-color:rgba(0,0,0,.4);overflow:hidden;opacity:0;-webkit-transition:opacity .5s;transition:opacity .5s;will-change:opacity;z-index:1000}.ui.sidebar.menu .item{border-radius:0!important}.pushable>.pusher.dimmed:after{width:100%!important;height:100%!important;opacity:1!important}.ui.animating.sidebar{visibility:visible}.ui.visible.sidebar{visibility:visible;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.ui.left.visible.sidebar,.ui.right.visible.sidebar{box-shadow:0 0 20px rgba(34,36,38,.15)}.ui.bottom.visible.sidebar,.ui.top.visible.sidebar{box-shadow:0 0 20px rgba(34,36,38,.15)}.ui.visible.left.sidebar~.fixed,.ui.visible.left.sidebar~.pusher{-webkit-transform:translate3d(260px,0,0);transform:translate3d(260px,0,0)}.ui.visible.right.sidebar~.fixed,.ui.visible.right.sidebar~.pusher{-webkit-transform:translate3d(-260px,0,0);transform:translate3d(-260px,0,0)}.ui.visible.top.sidebar~.fixed,.ui.visible.top.sidebar~.pusher{-webkit-transform:translate3d(0,36px,0);transform:translate3d(0,36px,0)}.ui.visible.bottom.sidebar~.fixed,.ui.visible.bottom.sidebar~.pusher{-webkit-transform:translate3d(0,-36px,0);transform:translate3d(0,-36px,0)}.ui.visible.left.sidebar~.ui.visible.right.sidebar~.fixed,.ui.visible.left.sidebar~.ui.visible.right.sidebar~.pusher,.ui.visible.right.sidebar~.ui.visible.left.sidebar~.fixed,.ui.visible.right.sidebar~.ui.visible.left.sidebar~.pusher{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}html.ios{overflow-x:hidden;-webkit-overflow-scrolling:touch}.ui.thin.left.sidebar,.ui.thin.right.sidebar{width:150px}.ui[class*="very thin"].left.sidebar,.ui[class*="very thin"].right.sidebar{width:60px}.ui.left.sidebar,.ui.right.sidebar{width:260px}.ui.wide.left.sidebar,.ui.wide.right.sidebar{width:350px}.ui[class*="very wide"].left.sidebar,.ui[class*="very wide"].right.sidebar{width:475px}.ui.visible.thin.left.sidebar~.fixed,.ui.visible.thin.left.sidebar~.pusher{-webkit-transform:translate3d(150px,0,0);transform:translate3d(150px,0,0)}.ui.visible[class*="very thin"].left.sidebar~.fixed,.ui.visible[class*="very thin"].left.sidebar~.pusher{-webkit-transform:translate3d(60px,0,0);transform:translate3d(60px,0,0)}.ui.visible.wide.left.sidebar~.fixed,.ui.visible.wide.left.sidebar~.pusher{-webkit-transform:translate3d(350px,0,0);transform:translate3d(350px,0,0)}.ui.visible[class*="very wide"].left.sidebar~.fixed,.ui.visible[class*="very wide"].left.sidebar~.pusher{-webkit-transform:translate3d(475px,0,0);transform:translate3d(475px,0,0)}.ui.visible.thin.right.sidebar~.fixed,.ui.visible.thin.right.sidebar~.pusher{-webkit-transform:translate3d(-150px,0,0);transform:translate3d(-150px,0,0)}.ui.visible[class*="very thin"].right.sidebar~.fixed,.ui.visible[class*="very thin"].right.sidebar~.pusher{-webkit-transform:translate3d(-60px,0,0);transform:translate3d(-60px,0,0)}.ui.visible.wide.right.sidebar~.fixed,.ui.visible.wide.right.sidebar~.pusher{-webkit-transform:translate3d(-350px,0,0);transform:translate3d(-350px,0,0)}.ui.visible[class*="very wide"].right.sidebar~.fixed,.ui.visible[class*="very wide"].right.sidebar~.pusher{-webkit-transform:translate3d(-475px,0,0);transform:translate3d(-475px,0,0)}.ui.overlay.sidebar{z-index:102}.ui.left.overlay.sidebar{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.ui.right.overlay.sidebar{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.ui.top.overlay.sidebar{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}.ui.bottom.overlay.sidebar{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}.animating.ui.overlay.sidebar,.ui.visible.overlay.sidebar{-webkit-transition:-webkit-transform .5s ease;transition:transform .5s ease}.ui.visible.left.overlay.sidebar{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.ui.visible.right.overlay.sidebar{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.ui.visible.top.overlay.sidebar{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.ui.visible.bottom.overlay.sidebar{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.ui.visible.overlay.sidebar~.fixed,.ui.visible.overlay.sidebar~.pusher{-webkit-transform:none!important;transform:none!important}.ui.push.sidebar{-webkit-transition:-webkit-transform .5s ease;transition:transform .5s ease;z-index:102}.ui.left.push.sidebar{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.ui.right.push.sidebar{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.ui.top.push.sidebar{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}.ui.bottom.push.sidebar{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}.ui.visible.push.sidebar{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.ui.uncover.sidebar{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);z-index:1}.ui.visible.uncover.sidebar{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);-webkit-transition:-webkit-transform .5s ease;transition:transform .5s ease}.ui.slide.along.sidebar{z-index:1}.ui.left.slide.along.sidebar{-webkit-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0)}.ui.right.slide.along.sidebar{-webkit-transform:translate3d(50%,0,0);transform:translate3d(50%,0,0)}.ui.top.slide.along.sidebar{-webkit-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.ui.bottom.slide.along.sidebar{-webkit-transform:translate3d(0,50%,0);transform:translate3d(0,50%,0)}.ui.animating.slide.along.sidebar{-webkit-transition:-webkit-transform .5s ease;transition:transform .5s ease}.ui.visible.slide.along.sidebar{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.ui.slide.out.sidebar{z-index:1}.ui.left.slide.out.sidebar{-webkit-transform:translate3d(50%,0,0);transform:translate3d(50%,0,0)}.ui.right.slide.out.sidebar{-webkit-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0)}.ui.top.slide.out.sidebar{-webkit-transform:translate3d(0,50%,0);transform:translate3d(0,50%,0)}.ui.bottom.slide.out.sidebar{-webkit-transform:translate3d(0,-50%,0);transform:translate3d(0,-50%,0)}.ui.animating.slide.out.sidebar{-webkit-transition:-webkit-transform .5s ease;transition:transform .5s ease}.ui.visible.slide.out.sidebar{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.ui.scale.down.sidebar{-webkit-transition:-webkit-transform .5s ease;transition:transform .5s ease;z-index:102}.ui.left.scale.down.sidebar{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.ui.right.scale.down.sidebar{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.ui.top.scale.down.sidebar{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}.ui.bottom.scale.down.sidebar{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}.ui.scale.down.left.sidebar~.pusher{-webkit-transform-origin:75% 50%;transform-origin:75% 50%}.ui.scale.down.right.sidebar~.pusher{-webkit-transform-origin:25% 50%;transform-origin:25% 50%}.ui.scale.down.top.sidebar~.pusher{-webkit-transform-origin:50% 75%;transform-origin:50% 75%}.ui.scale.down.bottom.sidebar~.pusher{-webkit-transform-origin:50% 25%;transform-origin:50% 25%}.ui.animating.scale.down>.visible.ui.sidebar{-webkit-transition:-webkit-transform .5s ease;transition:transform .5s ease}.ui.animating.scale.down.sidebar~.pusher,.ui.visible.scale.down.sidebar~.pusher{display:block!important;width:100%;height:100%;overflow:hidden!important}.ui.visible.scale.down.sidebar{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.ui.visible.scale.down.sidebar~.pusher{-webkit-transform:scale(.75);transform:scale(.75)}/*! + * # Semantic UI 2.2.10 - Sticky + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.sticky{position:static;-webkit-transition:none;transition:none;z-index:800}.ui.sticky.bound{position:absolute;left:auto;right:auto}.ui.sticky.fixed{position:fixed;left:auto;right:auto}.ui.sticky.bound.top,.ui.sticky.fixed.top{top:0;bottom:auto}.ui.sticky.bound.bottom,.ui.sticky.fixed.bottom{top:auto;bottom:0}.ui.native.sticky{position:-webkit-sticky;position:-moz-sticky;position:-ms-sticky;position:-o-sticky;position:sticky}/*! + * # Semantic UI 2.2.10 - Tab + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.ui.tab{display:none}.ui.tab.active,.ui.tab.open{display:block}.ui.tab.loading{position:relative;overflow:hidden;display:block;min-height:250px}.ui.tab.loading *{position:relative!important;left:-10000px!important}.ui.tab.loading.segment:before,.ui.tab.loading:before{position:absolute;content:'';top:100px;left:50%;margin:-1.25em 0 0 -1.25em;width:2.5em;height:2.5em;border-radius:500rem;border:.2em solid rgba(0,0,0,.1)}.ui.tab.loading.segment:after,.ui.tab.loading:after{position:absolute;content:'';top:100px;left:50%;margin:-1.25em 0 0 -1.25em;width:2.5em;height:2.5em;-webkit-animation:button-spin .6s linear;animation:button-spin .6s linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;border-radius:500rem;border-color:#767676 transparent transparent;border-style:solid;border-width:.2em;box-shadow:0 0 0 1px transparent}/*! + * # Semantic UI 2.2.10 - Transition + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */.transition{-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-animation-duration:.3s;animation-duration:.3s;-webkit-animation-timing-function:ease;animation-timing-function:ease;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animating.transition{-webkit-backface-visibility:hidden;backface-visibility:hidden;visibility:visible!important}.loading.transition{position:absolute;top:-99999px;left:-99999px}.hidden.transition{display:none;visibility:hidden}.visible.transition{display:block!important;visibility:visible!important}.disabled.transition{-webkit-animation-play-state:paused;animation-play-state:paused}.looping.transition{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.transition.browse{-webkit-animation-duration:.5s;animation-duration:.5s}.transition.browse.in{-webkit-animation-name:browseIn;animation-name:browseIn}.transition.browse.left.out,.transition.browse.out{-webkit-animation-name:browseOutLeft;animation-name:browseOutLeft}.transition.browse.right.out{-webkit-animation-name:browseOutRight;animation-name:browseOutRight}@-webkit-keyframes browseIn{0%{-webkit-transform:scale(.8) translateZ(0);transform:scale(.8) translateZ(0);z-index:-1}10%{-webkit-transform:scale(.8) translateZ(0);transform:scale(.8) translateZ(0);z-index:-1;opacity:.7}80%{-webkit-transform:scale(1.05) translateZ(0);transform:scale(1.05) translateZ(0);opacity:1;z-index:999}100%{-webkit-transform:scale(1) translateZ(0);transform:scale(1) translateZ(0);z-index:999}}@keyframes browseIn{0%{-webkit-transform:scale(.8) translateZ(0);transform:scale(.8) translateZ(0);z-index:-1}10%{-webkit-transform:scale(.8) translateZ(0);transform:scale(.8) translateZ(0);z-index:-1;opacity:.7}80%{-webkit-transform:scale(1.05) translateZ(0);transform:scale(1.05) translateZ(0);opacity:1;z-index:999}100%{-webkit-transform:scale(1) translateZ(0);transform:scale(1) translateZ(0);z-index:999}}@-webkit-keyframes browseOutLeft{0%{z-index:999;-webkit-transform:translateX(0) rotateY(0) rotateX(0);transform:translateX(0) rotateY(0) rotateX(0)}50%{z-index:-1;-webkit-transform:translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);transform:translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px)}80%{opacity:1}100%{z-index:-1;-webkit-transform:translateX(0) rotateY(0) rotateX(0) translateZ(-10px);transform:translateX(0) rotateY(0) rotateX(0) translateZ(-10px);opacity:0}}@keyframes browseOutLeft{0%{z-index:999;-webkit-transform:translateX(0) rotateY(0) rotateX(0);transform:translateX(0) rotateY(0) rotateX(0)}50%{z-index:-1;-webkit-transform:translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);transform:translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px)}80%{opacity:1}100%{z-index:-1;-webkit-transform:translateX(0) rotateY(0) rotateX(0) translateZ(-10px);transform:translateX(0) rotateY(0) rotateX(0) translateZ(-10px);opacity:0}}@-webkit-keyframes browseOutRight{0%{z-index:999;-webkit-transform:translateX(0) rotateY(0) rotateX(0);transform:translateX(0) rotateY(0) rotateX(0)}50%{z-index:1;-webkit-transform:translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);transform:translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px)}80%{opacity:1}100%{z-index:1;-webkit-transform:translateX(0) rotateY(0) rotateX(0) translateZ(-10px);transform:translateX(0) rotateY(0) rotateX(0) translateZ(-10px);opacity:0}}@keyframes browseOutRight{0%{z-index:999;-webkit-transform:translateX(0) rotateY(0) rotateX(0);transform:translateX(0) rotateY(0) rotateX(0)}50%{z-index:1;-webkit-transform:translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);transform:translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px)}80%{opacity:1}100%{z-index:1;-webkit-transform:translateX(0) rotateY(0) rotateX(0) translateZ(-10px);transform:translateX(0) rotateY(0) rotateX(0) translateZ(-10px);opacity:0}}.drop.transition{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-timing-function:cubic-bezier(.34,1.61,.7,1);animation-timing-function:cubic-bezier(.34,1.61,.7,1)}.drop.transition.in{-webkit-animation-name:dropIn;animation-name:dropIn}.drop.transition.out{-webkit-animation-name:dropOut;animation-name:dropOut}@-webkit-keyframes dropIn{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes dropIn{0%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes dropOut{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}100%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}}@keyframes dropOut{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}100%{opacity:0;-webkit-transform:scale(0);transform:scale(0)}}.transition.fade.in{-webkit-animation-name:fadeIn;animation-name:fadeIn}.transition[class*="fade up"].in{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}.transition[class*="fade down"].in{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}.transition[class*="fade left"].in{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}.transition[class*="fade right"].in{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}.transition.fade.out{-webkit-animation-name:fadeOut;animation-name:fadeOut}.transition[class*="fade up"].out{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}.transition[class*="fade down"].out{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}.transition[class*="fade left"].out{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}.transition[class*="fade right"].out{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(10%);transform:translateY(10%)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(10%);transform:translateY(10%)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-10%);transform:translateY(-10%)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-10%);transform:translateY(-10%)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translateX(10%);transform:translateX(10%)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translateX(10%);transform:translateX(10%)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(-10%);transform:translateX(-10%)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(-10%);transform:translateX(-10%)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@-webkit-keyframes fadeOutUp{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(5%);transform:translateY(5%)}}@keyframes fadeOutUp{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(5%);transform:translateY(5%)}}@-webkit-keyframes fadeOutDown{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-5%);transform:translateY(-5%)}}@keyframes fadeOutDown{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-5%);transform:translateY(-5%)}}@-webkit-keyframes fadeOutLeft{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(5%);transform:translateX(5%)}}@keyframes fadeOutLeft{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(5%);transform:translateX(5%)}}@-webkit-keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-5%);transform:translateX(-5%)}}@keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-5%);transform:translateX(-5%)}}.flip.transition.in,.flip.transition.out{-webkit-animation-duration:.6s;animation-duration:.6s}.horizontal.flip.transition.in{-webkit-animation-name:horizontalFlipIn;animation-name:horizontalFlipIn}.horizontal.flip.transition.out{-webkit-animation-name:horizontalFlipOut;animation-name:horizontalFlipOut}.vertical.flip.transition.in{-webkit-animation-name:verticalFlipIn;animation-name:verticalFlipIn}.vertical.flip.transition.out{-webkit-animation-name:verticalFlipOut;animation-name:verticalFlipOut}@-webkit-keyframes horizontalFlipIn{0%{-webkit-transform:perspective(2000px) rotateY(-90deg);transform:perspective(2000px) rotateY(-90deg);opacity:0}100%{-webkit-transform:perspective(2000px) rotateY(0);transform:perspective(2000px) rotateY(0);opacity:1}}@keyframes horizontalFlipIn{0%{-webkit-transform:perspective(2000px) rotateY(-90deg);transform:perspective(2000px) rotateY(-90deg);opacity:0}100%{-webkit-transform:perspective(2000px) rotateY(0);transform:perspective(2000px) rotateY(0);opacity:1}}@-webkit-keyframes verticalFlipIn{0%{-webkit-transform:perspective(2000px) rotateX(-90deg);transform:perspective(2000px) rotateX(-90deg);opacity:0}100%{-webkit-transform:perspective(2000px) rotateX(0);transform:perspective(2000px) rotateX(0);opacity:1}}@keyframes verticalFlipIn{0%{-webkit-transform:perspective(2000px) rotateX(-90deg);transform:perspective(2000px) rotateX(-90deg);opacity:0}100%{-webkit-transform:perspective(2000px) rotateX(0);transform:perspective(2000px) rotateX(0);opacity:1}}@-webkit-keyframes horizontalFlipOut{0%{-webkit-transform:perspective(2000px) rotateY(0);transform:perspective(2000px) rotateY(0);opacity:1}100%{-webkit-transform:perspective(2000px) rotateY(90deg);transform:perspective(2000px) rotateY(90deg);opacity:0}}@keyframes horizontalFlipOut{0%{-webkit-transform:perspective(2000px) rotateY(0);transform:perspective(2000px) rotateY(0);opacity:1}100%{-webkit-transform:perspective(2000px) rotateY(90deg);transform:perspective(2000px) rotateY(90deg);opacity:0}}@-webkit-keyframes verticalFlipOut{0%{-webkit-transform:perspective(2000px) rotateX(0);transform:perspective(2000px) rotateX(0);opacity:1}100%{-webkit-transform:perspective(2000px) rotateX(-90deg);transform:perspective(2000px) rotateX(-90deg);opacity:0}}@keyframes verticalFlipOut{0%{-webkit-transform:perspective(2000px) rotateX(0);transform:perspective(2000px) rotateX(0);opacity:1}100%{-webkit-transform:perspective(2000px) rotateX(-90deg);transform:perspective(2000px) rotateX(-90deg);opacity:0}}.scale.transition.in{-webkit-animation-name:scaleIn;animation-name:scaleIn}.scale.transition.out{-webkit-animation-name:scaleOut;animation-name:scaleOut}@-webkit-keyframes scaleIn{0%{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes scaleIn{0%{opacity:0;-webkit-transform:scale(.8);transform:scale(.8)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@-webkit-keyframes scaleOut{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}100%{opacity:0;-webkit-transform:scale(.9);transform:scale(.9)}}@keyframes scaleOut{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}100%{opacity:0;-webkit-transform:scale(.9);transform:scale(.9)}}.transition.fly{-webkit-animation-duration:.6s;animation-duration:.6s;-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1)}.transition.fly.in{-webkit-animation-name:flyIn;animation-name:flyIn}.transition[class*="fly up"].in{-webkit-animation-name:flyInUp;animation-name:flyInUp}.transition[class*="fly down"].in{-webkit-animation-name:flyInDown;animation-name:flyInDown}.transition[class*="fly left"].in{-webkit-animation-name:flyInLeft;animation-name:flyInLeft}.transition[class*="fly right"].in{-webkit-animation-name:flyInRight;animation-name:flyInRight}.transition.fly.out{-webkit-animation-name:flyOut;animation-name:flyOut}.transition[class*="fly up"].out{-webkit-animation-name:flyOutUp;animation-name:flyOutUp}.transition[class*="fly down"].out{-webkit-animation-name:flyOutDown;animation-name:flyOutDown}.transition[class*="fly left"].out{-webkit-animation-name:flyOutLeft;animation-name:flyOutLeft}.transition[class*="fly right"].out{-webkit-animation-name:flyOutRight;animation-name:flyOutRight}@-webkit-keyframes flyIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes flyIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@-webkit-keyframes flyInUp{0%{opacity:0;-webkit-transform:translate3d(0,1500px,0);transform:translate3d(0,1500px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes flyInUp{0%{opacity:0;-webkit-transform:translate3d(0,1500px,0);transform:translate3d(0,1500px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@-webkit-keyframes flyInDown{0%{opacity:0;-webkit-transform:translate3d(0,-1500px,0);transform:translate3d(0,-1500px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}100%{-webkit-transform:none;transform:none}}@keyframes flyInDown{0%{opacity:0;-webkit-transform:translate3d(0,-1500px,0);transform:translate3d(0,-1500px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}100%{-webkit-transform:none;transform:none}}@-webkit-keyframes flyInLeft{0%{opacity:0;-webkit-transform:translate3d(1500px,0,0);transform:translate3d(1500px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}100%{-webkit-transform:none;transform:none}}@keyframes flyInLeft{0%{opacity:0;-webkit-transform:translate3d(1500px,0,0);transform:translate3d(1500px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}100%{-webkit-transform:none;transform:none}}@-webkit-keyframes flyInRight{0%{opacity:0;-webkit-transform:translate3d(-1500px,0,0);transform:translate3d(-1500px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}100%{-webkit-transform:none;transform:none}}@keyframes flyInRight{0%{opacity:0;-webkit-transform:translate3d(-1500px,0,0);transform:translate3d(-1500px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}100%{-webkit-transform:none;transform:none}}@-webkit-keyframes flyOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}100%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes flyOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}100%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@-webkit-keyframes flyOutUp{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes flyOutUp{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@-webkit-keyframes flyOutDown{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes flyOutDown{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@-webkit-keyframes flyOutRight{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes flyOutRight{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@-webkit-keyframes flyOutLeft{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes flyOutLeft{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.transition.slide.in,.transition[class*="slide down"].in{-webkit-animation-name:slideInY;animation-name:slideInY;-webkit-transform-origin:top center;transform-origin:top center}.transition[class*="slide up"].in{-webkit-animation-name:slideInY;animation-name:slideInY;-webkit-transform-origin:bottom center;transform-origin:bottom center}.transition[class*="slide left"].in{-webkit-animation-name:slideInX;animation-name:slideInX;-webkit-transform-origin:center right;transform-origin:center right}.transition[class*="slide right"].in{-webkit-animation-name:slideInX;animation-name:slideInX;-webkit-transform-origin:center left;transform-origin:center left}.transition.slide.out,.transition[class*="slide down"].out{-webkit-animation-name:slideOutY;animation-name:slideOutY;-webkit-transform-origin:top center;transform-origin:top center}.transition[class*="slide up"].out{-webkit-animation-name:slideOutY;animation-name:slideOutY;-webkit-transform-origin:bottom center;transform-origin:bottom center}.transition[class*="slide left"].out{-webkit-animation-name:slideOutX;animation-name:slideOutX;-webkit-transform-origin:center right;transform-origin:center right}.transition[class*="slide right"].out{-webkit-animation-name:slideOutX;animation-name:slideOutX;-webkit-transform-origin:center left;transform-origin:center left}@-webkit-keyframes slideInY{0%{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}100%{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1)}}@keyframes slideInY{0%{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}100%{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1)}}@-webkit-keyframes slideInX{0%{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}100%{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes slideInX{0%{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}100%{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}@-webkit-keyframes slideOutY{0%{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1)}100%{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}}@keyframes slideOutY{0%{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1)}100%{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}}@-webkit-keyframes slideOutX{0%{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}100%{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}}@keyframes slideOutX{0%{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}100%{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}}.transition.swing{-webkit-animation-duration:.8s;animation-duration:.8s}.transition[class*="swing down"].in{-webkit-animation-name:swingInX;animation-name:swingInX;-webkit-transform-origin:top center;transform-origin:top center}.transition[class*="swing up"].in{-webkit-animation-name:swingInX;animation-name:swingInX;-webkit-transform-origin:bottom center;transform-origin:bottom center}.transition[class*="swing left"].in{-webkit-animation-name:swingInY;animation-name:swingInY;-webkit-transform-origin:center right;transform-origin:center right}.transition[class*="swing right"].in{-webkit-animation-name:swingInY;animation-name:swingInY;-webkit-transform-origin:center left;transform-origin:center left}.transition.swing.out,.transition[class*="swing down"].out{-webkit-animation-name:swingOutX;animation-name:swingOutX;-webkit-transform-origin:top center;transform-origin:top center}.transition[class*="swing up"].out{-webkit-animation-name:swingOutX;animation-name:swingOutX;-webkit-transform-origin:bottom center;transform-origin:bottom center}.transition[class*="swing left"].out{-webkit-animation-name:swingOutY;animation-name:swingOutY;-webkit-transform-origin:center right;transform-origin:center right}.transition[class*="swing right"].out{-webkit-animation-name:swingOutY;animation-name:swingOutY;-webkit-transform-origin:center left;transform-origin:center left}@-webkit-keyframes swingInX{0%{-webkit-transform:perspective(1000px) rotateX(90deg);transform:perspective(1000px) rotateX(90deg);opacity:0}40%{-webkit-transform:perspective(1000px) rotateX(-30deg);transform:perspective(1000px) rotateX(-30deg);opacity:1}60%{-webkit-transform:perspective(1000px) rotateX(15deg);transform:perspective(1000px) rotateX(15deg)}80%{-webkit-transform:perspective(1000px) rotateX(-7.5deg);transform:perspective(1000px) rotateX(-7.5deg)}100%{-webkit-transform:perspective(1000px) rotateX(0);transform:perspective(1000px) rotateX(0)}}@keyframes swingInX{0%{-webkit-transform:perspective(1000px) rotateX(90deg);transform:perspective(1000px) rotateX(90deg);opacity:0}40%{-webkit-transform:perspective(1000px) rotateX(-30deg);transform:perspective(1000px) rotateX(-30deg);opacity:1}60%{-webkit-transform:perspective(1000px) rotateX(15deg);transform:perspective(1000px) rotateX(15deg)}80%{-webkit-transform:perspective(1000px) rotateX(-7.5deg);transform:perspective(1000px) rotateX(-7.5deg)}100%{-webkit-transform:perspective(1000px) rotateX(0);transform:perspective(1000px) rotateX(0)}}@-webkit-keyframes swingInY{0%{-webkit-transform:perspective(1000px) rotateY(-90deg);transform:perspective(1000px) rotateY(-90deg);opacity:0}40%{-webkit-transform:perspective(1000px) rotateY(30deg);transform:perspective(1000px) rotateY(30deg);opacity:1}60%{-webkit-transform:perspective(1000px) rotateY(-17.5deg);transform:perspective(1000px) rotateY(-17.5deg)}80%{-webkit-transform:perspective(1000px) rotateY(7.5deg);transform:perspective(1000px) rotateY(7.5deg)}100%{-webkit-transform:perspective(1000px) rotateY(0);transform:perspective(1000px) rotateY(0)}}@keyframes swingInY{0%{-webkit-transform:perspective(1000px) rotateY(-90deg);transform:perspective(1000px) rotateY(-90deg);opacity:0}40%{-webkit-transform:perspective(1000px) rotateY(30deg);transform:perspective(1000px) rotateY(30deg);opacity:1}60%{-webkit-transform:perspective(1000px) rotateY(-17.5deg);transform:perspective(1000px) rotateY(-17.5deg)}80%{-webkit-transform:perspective(1000px) rotateY(7.5deg);transform:perspective(1000px) rotateY(7.5deg)}100%{-webkit-transform:perspective(1000px) rotateY(0);transform:perspective(1000px) rotateY(0)}}@-webkit-keyframes swingOutX{0%{-webkit-transform:perspective(1000px) rotateX(0);transform:perspective(1000px) rotateX(0)}40%{-webkit-transform:perspective(1000px) rotateX(-7.5deg);transform:perspective(1000px) rotateX(-7.5deg)}60%{-webkit-transform:perspective(1000px) rotateX(17.5deg);transform:perspective(1000px) rotateX(17.5deg)}80%{-webkit-transform:perspective(1000px) rotateX(-30deg);transform:perspective(1000px) rotateX(-30deg);opacity:1}100%{-webkit-transform:perspective(1000px) rotateX(90deg);transform:perspective(1000px) rotateX(90deg);opacity:0}}@keyframes swingOutX{0%{-webkit-transform:perspective(1000px) rotateX(0);transform:perspective(1000px) rotateX(0)}40%{-webkit-transform:perspective(1000px) rotateX(-7.5deg);transform:perspective(1000px) rotateX(-7.5deg)}60%{-webkit-transform:perspective(1000px) rotateX(17.5deg);transform:perspective(1000px) rotateX(17.5deg)}80%{-webkit-transform:perspective(1000px) rotateX(-30deg);transform:perspective(1000px) rotateX(-30deg);opacity:1}100%{-webkit-transform:perspective(1000px) rotateX(90deg);transform:perspective(1000px) rotateX(90deg);opacity:0}}@-webkit-keyframes swingOutY{0%{-webkit-transform:perspective(1000px) rotateY(0);transform:perspective(1000px) rotateY(0)}40%{-webkit-transform:perspective(1000px) rotateY(7.5deg);transform:perspective(1000px) rotateY(7.5deg)}60%{-webkit-transform:perspective(1000px) rotateY(-10deg);transform:perspective(1000px) rotateY(-10deg)}80%{-webkit-transform:perspective(1000px) rotateY(30deg);transform:perspective(1000px) rotateY(30deg);opacity:1}100%{-webkit-transform:perspective(1000px) rotateY(-90deg);transform:perspective(1000px) rotateY(-90deg);opacity:0}}@keyframes swingOutY{0%{-webkit-transform:perspective(1000px) rotateY(0);transform:perspective(1000px) rotateY(0)}40%{-webkit-transform:perspective(1000px) rotateY(7.5deg);transform:perspective(1000px) rotateY(7.5deg)}60%{-webkit-transform:perspective(1000px) rotateY(-10deg);transform:perspective(1000px) rotateY(-10deg)}80%{-webkit-transform:perspective(1000px) rotateY(30deg);transform:perspective(1000px) rotateY(30deg);opacity:1}100%{-webkit-transform:perspective(1000px) rotateY(-90deg);transform:perspective(1000px) rotateY(-90deg);opacity:0}}.flash.transition{-webkit-animation-duration:750ms;animation-duration:750ms;-webkit-animation-name:flash;animation-name:flash}.shake.transition{-webkit-animation-duration:750ms;animation-duration:750ms;-webkit-animation-name:shake;animation-name:shake}.bounce.transition{-webkit-animation-duration:750ms;animation-duration:750ms;-webkit-animation-name:bounce;animation-name:bounce}.tada.transition{-webkit-animation-duration:750ms;animation-duration:750ms;-webkit-animation-name:tada;animation-name:tada}.pulse.transition{-webkit-animation-duration:.5s;animation-duration:.5s;-webkit-animation-name:pulse;animation-name:pulse}.jiggle.transition{-webkit-animation-duration:750ms;animation-duration:750ms;-webkit-animation-name:jiggle;animation-name:jiggle}@-webkit-keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}@-webkit-keyframes shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@-webkit-keyframes bounce{0%,100%,20%,50%,80%{-webkit-transform:translateY(0);transform:translateY(0)}40%{-webkit-transform:translateY(-30px);transform:translateY(-30px)}60%{-webkit-transform:translateY(-15px);transform:translateY(-15px)}}@keyframes bounce{0%,100%,20%,50%,80%{-webkit-transform:translateY(0);transform:translateY(0)}40%{-webkit-transform:translateY(-30px);transform:translateY(-30px)}60%{-webkit-transform:translateY(-15px);transform:translateY(-15px)}}@-webkit-keyframes tada{0%{-webkit-transform:scale(1);transform:scale(1)}10%,20%{-webkit-transform:scale(.9) rotate(-3deg);transform:scale(.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale(1.1) rotate(3deg);transform:scale(1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale(1.1) rotate(-3deg);transform:scale(1.1) rotate(-3deg)}100%{-webkit-transform:scale(1) rotate(0);transform:scale(1) rotate(0)}}@keyframes tada{0%{-webkit-transform:scale(1);transform:scale(1)}10%,20%{-webkit-transform:scale(.9) rotate(-3deg);transform:scale(.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale(1.1) rotate(3deg);transform:scale(1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale(1.1) rotate(-3deg);transform:scale(1.1) rotate(-3deg)}100%{-webkit-transform:scale(1) rotate(0);transform:scale(1) rotate(0)}}@-webkit-keyframes pulse{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}50%{-webkit-transform:scale(.9);transform:scale(.9);opacity:.7}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@keyframes pulse{0%{-webkit-transform:scale(1);transform:scale(1);opacity:1}50%{-webkit-transform:scale(.9);transform:scale(.9);opacity:.7}100%{-webkit-transform:scale(1);transform:scale(1);opacity:1}}@-webkit-keyframes jiggle{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes jiggle{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}} \ No newline at end of file diff --git a/keycloak/scripts/ansible/artifacts/sunbird/resources/css/styles.css b/keycloak/scripts/ansible/artifacts/sunbird/resources/css/styles.css new file mode 100644 index 00000000..a4f1b022 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/resources/css/styles.css @@ -0,0 +1,199 @@ +/* + * Copyright 2016 Red Hat, Inc. and/or its affiliates + * and other contributors as indicated by the @author tags. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +@import url('../../keycloak/lib/zocial/zocial.css'); + +body { + background-color: #012951; + background-size: cover; + background-repeat: no-repeat; + color: #fff; + font-family: sans-serif; + /* text-shadow: 0px 0px 10px #000; */ + margin: 0px; +} + +a { + color: #fff; +} + +div#kc-logo { + background-image: url('../img/bkgrnd.png'); + background-repeat: no-repeat; + background-color: #fff; + background-size: contain; + height:110px; +} + +div#kc-locale { + display: none; +} + +div#kc-content { + position: absolute; + top: 30%; + left: 50%; + width: 550px; + margin-left: -225px; +} + +div#kc-form { + float: left; + width: 350px; +} + +div#kc-form label { + display: block; + font-size: 16px; +} + +div#info-area { + position: fixed; + bottom: 0; + left: 0; + margin-top: 40px; + background-color: rgba(0, 0, 0, 0.4); + padding: 20px; + width: 100%; +} + +div#info-area p { + margin-right: 30px; + display: inline; + text-shadow: none; +} + +input[type=text], input[type=password] { + color: #ddd; + font-size: 18px; + margin-bottom: 20px; + background-color: rgba(3,70,114,0.15); + border: 0px solid rgba(0,0,0,0.2); + box-shadow:inset 0 0 2px 2px rgba(0,0,0,0.15); + padding: 10px; + width: 296px; +} + +input[type=text]:hover, input[type=password]:hover { + background-color: rgba(3,70,114,0.4); +} + +input[type=submit] { + border: none; + background: #fff; + background: -moz-linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0.1)); + background: -ms-linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0.1)); + background: -o-linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0.1)); + box-shadow: 0px 0px 6px rgba(0,0,0,0.5); + /* color: rgba(0,0,0,0.6); */ + font-size: 14px; + font-weight: bold; + padding: 10px; + margin-top: 20px; + margin-right: 10px; + width: 150px; +} + +input[type=submit]:hover { + background-color: rgba(255,255,255,0.8); +} + +div#kc-form-options div { + display: inline; + margin-right: 20px; + font-size: 12px; +} + +div#kc-form-options div label { + font-size: 12px; +} + +div#kc-feedback { + box-shadow: 0px 0px 6px rgba(0,0,0,0.5); + position: fixed; + top: 0; + left: 0; + width: 100%; + text-align: center; +} + +div#kc-feedback-wrapper { + padding: 1em; +} + +div.feedback-success { + background-color: rgba(155,155,255,0.1); +} + +div.feedback-warning { + background-color: rgba(255,175,0,0.1); +} + +div.feedback-error { + background-color: rgba(255,0,0,0.1); +} + +div#kc-header { + display: none; +} + +div#kc-registration { + margin-bottom: 20px; +} + +div#social-login { + border-left: 1px solid rgba(255, 255, 255, 0.2); + float: right; + width: 150px; + padding: 20px 0 200px 40px; +} + +div.social-login span { + display: none; +} + +div#kc-social-providers ul { + list-style: none; + margin: 0; + padding: 0; +} + +div#kc-social-providers ul li { + margin-bottom: 20px; +} + +div#kc-social-providers ul li span { + display: inline; + width: 100px; +} + +a.zocial { + border: none; + background: -webkit-linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0.1)) !important; + background: -moz-linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0.1)) !important; + background: -ms-linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0.1)) !important; + background: -o-linear-gradient(top, rgba(255,255,255,0.8), rgba(255,255,255,0.1)) !important; + box-shadow: 0px 0px 6px rgba(0,0,0,0.5); + color: rgba(0,0,0,0.6); + width: 130px; + text-shadow: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; + padding-top: 0.2em; + padding-bottom: 0.2em; +} diff --git a/keycloak/scripts/ansible/artifacts/sunbird/resources/img/bkgrnd.png b/keycloak/scripts/ansible/artifacts/sunbird/resources/img/bkgrnd.png new file mode 100644 index 0000000000000000000000000000000000000000..e5e61876e4bf4424342c1f98e8118bbb11fca0d1 GIT binary patch literal 68091 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%0AGd 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%0AGd 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 Date: Fri, 29 Dec 2017 10:46:05 +0530 Subject: [PATCH 18/41] Issue #24 chore:Sunbird auth package build --- .../roles/keycloak/tasks/build-conf.yml | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 keycloak/scripts/ansible/roles/keycloak/tasks/build-conf.yml diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/build-conf.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/build-conf.yml new file mode 100644 index 00000000..42659c43 --- /dev/null +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/build-conf.yml @@ -0,0 +1,23 @@ +- name: Create directory for sunbird auth package config + file: + path: sunbird_auth_{{sunbird_auth_version}}.config + state: directory + mode: 0755 + +- name: Keycloak configuration XML file + template: + src:"roles/keycloak/templates/templates/standalone-ha.xml" + dest:"sunbird_auth_{{sunbird_auth_version}}.config/standalone-ha.xml" + mode:0750 + +- name: Postgresql Configuration- module.xml + template: + src:"roles/keycloak/templates/templates/module.xml.j2" + dest:"sunbird_auth_{{sunbird_auth_version}}.config/module.xml" + mode:0750 + +- name: SMS provider configuration file + template: + src:"roles/keycloak/templates/templates/Msg91Creds.json.j2" + dest:"sunbird_auth_{{sunbird_auth_version}}.config/Msg91Creds.json" + mode:0755 From 397c93bcc3243fe610f970846750cfeb0f484a8e Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Fri, 29 Dec 2017 10:58:40 +0530 Subject: [PATCH 19/41] Issue #24 chore:Sunbird auth package build --- .../{build-conf.yml => build-config.yml} | 0 .../ansible/roles/keycloak/tasks/main.yml | 4 +++ .../keycloak-build/JenkinsfileConfig.dev | 29 +++++++++++++++++++ 3 files changed, 33 insertions(+) rename keycloak/scripts/ansible/roles/keycloak/tasks/{build-conf.yml => build-config.yml} (100%) create mode 100644 keycloak/scripts/pipelines/keycloak-build/JenkinsfileConfig.dev diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/build-conf.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/build-config.yml similarity index 100% rename from keycloak/scripts/ansible/roles/keycloak/tasks/build-conf.yml rename to keycloak/scripts/ansible/roles/keycloak/tasks/build-config.yml diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/main.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/main.yml index 4e8c2b59..8b7efe5d 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/main.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/main.yml @@ -6,6 +6,10 @@ tags: - deploy +- include: build-config.yml + tags: + - build-config + - include: deploy-conf.yml tags: - deploy-conf diff --git a/keycloak/scripts/pipelines/keycloak-build/JenkinsfileConfig.dev b/keycloak/scripts/pipelines/keycloak-build/JenkinsfileConfig.dev new file mode 100644 index 00000000..aa9cc331 --- /dev/null +++ b/keycloak/scripts/pipelines/keycloak-build/JenkinsfileConfig.dev @@ -0,0 +1,29 @@ +#!groovy + +node('build-slave') { + + currentBuild.result = "SUCCESS" + + try { + + stage('checkout') + { + sh('rm -rf sunbird-auth') + sh('git clone https://github.com/ahghatol/sunbird-auth.git') + } + + stage('Build'){ + sh('ls') + sh('cd sunbird-auth/keycloak/scripts/ansible && ansible-playbook -i inventories/dev keycloak.yml --limit localhost --tags build-conf --vault-password-file /home/ops/vault -vvv') + } + + stage('Archive'){ + sh('cp sunbird-auth/keycloak/scripts/ansible/sunbird_auth_1.0v.config.zip .') + archiveArtifacts 'sunbird_auth_1.0v.config.zip' + } + } + catch (err) { + currentBuild.result = "FAILURE" + throw err + } +} From eb67d5f0db6b61c783dfcdfcd47dc81483aae226 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Fri, 29 Dec 2017 11:06:33 +0530 Subject: [PATCH 20/41] Issue #24 chore:Sunbird auth package build --- keycloak/scripts/pipelines/keycloak-build/JenkinsfileConfig.dev | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keycloak/scripts/pipelines/keycloak-build/JenkinsfileConfig.dev b/keycloak/scripts/pipelines/keycloak-build/JenkinsfileConfig.dev index aa9cc331..3fd90dc3 100644 --- a/keycloak/scripts/pipelines/keycloak-build/JenkinsfileConfig.dev +++ b/keycloak/scripts/pipelines/keycloak-build/JenkinsfileConfig.dev @@ -14,7 +14,7 @@ node('build-slave') { stage('Build'){ sh('ls') - sh('cd sunbird-auth/keycloak/scripts/ansible && ansible-playbook -i inventories/dev keycloak.yml --limit localhost --tags build-conf --vault-password-file /home/ops/vault -vvv') + sh('cd sunbird-auth/keycloak/scripts/ansible && ansible-playbook -i inventories/dev keycloak.yml --limit localhost --tags build-config --vault-password-file /home/ops/vault -vvv') } stage('Archive'){ From e137def158e7944ca61d27258660498931581fc0 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Fri, 29 Dec 2017 11:21:52 +0530 Subject: [PATCH 21/41] Issue #24 chore:Sunbird auth package build --- .../roles/keycloak/tasks/build-config.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/build-config.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/build-config.yml index 42659c43..dfbbc4fe 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/build-config.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/build-config.yml @@ -6,18 +6,18 @@ - name: Keycloak configuration XML file template: - src:"roles/keycloak/templates/templates/standalone-ha.xml" - dest:"sunbird_auth_{{sunbird_auth_version}}.config/standalone-ha.xml" - mode:0750 + src: "roles/keycloak/templates/standalone-ha.xml" + dest: "sunbird_auth_{{sunbird_auth_version}}.config/standalone-ha.xml" + mode: 0750 - name: Postgresql Configuration- module.xml template: - src:"roles/keycloak/templates/templates/module.xml.j2" - dest:"sunbird_auth_{{sunbird_auth_version}}.config/module.xml" - mode:0750 + src: "roles/keycloak/templates/module.xml.j2" + dest: "sunbird_auth_{{sunbird_auth_version}}.config/module.xml" + mode: 0750 - name: SMS provider configuration file template: - src:"roles/keycloak/templates/templates/Msg91Creds.json.j2" - dest:"sunbird_auth_{{sunbird_auth_version}}.config/Msg91Creds.json" - mode:0755 + src: "roles/keycloak/templates/Msg91Creds.json.j2" + dest: "sunbird_auth_{{sunbird_auth_version}}.config/Msg91Creds.json" + mode: 0755 From e9184467a879d85d696f23dfa53ec87c28a50c25 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Fri, 29 Dec 2017 11:25:25 +0530 Subject: [PATCH 22/41] Issue #24 chore:Sunbird auth package build --- .../scripts/ansible/roles/keycloak/tasks/build-config.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/build-config.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/build-config.yml index dfbbc4fe..be35264a 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/build-config.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/build-config.yml @@ -21,3 +21,8 @@ src: "roles/keycloak/templates/Msg91Creds.json.j2" dest: "sunbird_auth_{{sunbird_auth_version}}.config/Msg91Creds.json" mode: 0755 + +- archive: + path: sunbird_auth_{{sunbird_auth_version}}.config + dest: "sunbird_auth_{{sunbird_auth_version}}.config.zip" + format: zip From 3356a5c53af868f01c58db54e9515f7441cf7bda Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Fri, 29 Dec 2017 11:35:07 +0530 Subject: [PATCH 23/41] Issue #24 chore:Sunbird auth package build --- .../tasks/{deploy-conf.yml => deploy-config.yml} | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) rename keycloak/scripts/ansible/roles/keycloak/tasks/{deploy-conf.yml => deploy-config.yml} (52%) diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-conf.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml similarity index 52% rename from keycloak/scripts/ansible/roles/keycloak/tasks/deploy-conf.yml rename to keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml index f629e720..fad7cb7d 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-conf.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml @@ -1,12 +1,18 @@ +- name: Paste keycloak config package on server + copy: src="sunbird_auth_{{sunbird_auth_version}}.config.zip" dest="/opt/" force=no owner={{wildfly_user}} group={{wildfly_group}} + +- name: extarct the folder + unarchive: src="/opt/sunbird_auth_{{sunbird_auth_version}}.config.zip" dest=/opt/ copy=no owner={{wildfly_user}} group={{wildfly_group}} + - name: Keycloak configuration XML file template: - src:"roles/keycloak/templates/templates/standalone-ha.xml" + src:"/opt/sunbird_auth_{{sunbird_auth_version}}.config/standalone-ha.xml" dest:"{{keycloak_home}}/standalone/configuration/standalone-ha.xml" mode:0750 - name: Postgresql Configuration- module.xml template: - src:"roles/keycloak/templates/templates/module.xml.j2" + src:"/opt/sunbird_auth_{{sunbird_auth_version}}.config/module.xml.j2" dest:"{{keycloak_home}}/modules/system/layers/keycloak/org/postgresql/main/module.xml" mode:0750 @@ -18,7 +24,7 @@ - name: SMS provider configuration file template: - src:"roles/keycloak/templates/templates/Msg91Creds.json.j2" + src:"/opt/sunbird_auth_{{sunbird_auth_version}}.config/Msg91Creds.json.j2" dest:"{{keycloak_home}}/bin/sms-provider/Msg91Creds.json" owner:"{{wildfly_user}}" group:"{{wildfly_group}}" From 64b7edba2cf4bcbee5523e0ba3807c3d0d23674b Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Fri, 29 Dec 2017 11:43:45 +0530 Subject: [PATCH 24/41] Issue #24 chore:Sunbird auth package build --- .../scripts/ansible/roles/keycloak/tasks/main.yml | 4 ++-- ...leDeployConf.dev => JenkinsfileDeployConfig.dev} | 13 ++++++++++++- 2 files changed, 14 insertions(+), 3 deletions(-) rename keycloak/scripts/pipelines/keycloak-deploy/{JenkinsfileDeployConf.dev => JenkinsfileDeployConfig.dev} (52%) diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/main.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/main.yml index 8b7efe5d..d3802a21 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/main.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/main.yml @@ -10,6 +10,6 @@ tags: - build-config -- include: deploy-conf.yml +- include: deploy-config.yml tags: - - deploy-conf + - deploy-config diff --git a/keycloak/scripts/pipelines/keycloak-deploy/JenkinsfileDeployConf.dev b/keycloak/scripts/pipelines/keycloak-deploy/JenkinsfileDeployConfig.dev similarity index 52% rename from keycloak/scripts/pipelines/keycloak-deploy/JenkinsfileDeployConf.dev rename to keycloak/scripts/pipelines/keycloak-deploy/JenkinsfileDeployConfig.dev index 14c9a207..81552e96 100644 --- a/keycloak/scripts/pipelines/keycloak-deploy/JenkinsfileDeployConf.dev +++ b/keycloak/scripts/pipelines/keycloak-deploy/JenkinsfileDeployConfig.dev @@ -13,7 +13,18 @@ node('general-dev') { } stage('Build'){ - sh('cd sunbird-auth/keycloak/scripts/ansible && ansible-playbook -i inventories/dev keycloak.yml --limit keycloak --tags deploy-conf --vault-password-file /run/secrets/vault-pass -vvv') + + step ([$class: 'CopyArtifact', + projectName: 'New_Build/Sunbird_Auth_Config_Build', + filter: 'sunbird_auth_1.0v.config.zip', + target: 'sunbird-auth/keycloak/scripts/ansible' ] + ); + + sh('cd sunbird-auth/keycloak/scripts/ansible && ansible-playbook -i inventories/dev keycloak.yml --limit keycloak --tags deploy-config --vault-password-file /run/secrets/vault-pass -vvv') + } + + stage('Archive'){ + archiveArtifacts 'sunbird-auth/keycloak/scripts/ansible/sunbird_auth_1.0v.config.zip' } } catch (err) { From a05198716d5a259b8c0c05a12df019acd3bc6c85 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Fri, 29 Dec 2017 11:54:50 +0530 Subject: [PATCH 25/41] Issue #24 chore:Sunbird auth package build --- .../roles/keycloak/tasks/deploy-config.yml | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml index fad7cb7d..c6bc57b0 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml @@ -6,26 +6,26 @@ - name: Keycloak configuration XML file template: - src:"/opt/sunbird_auth_{{sunbird_auth_version}}.config/standalone-ha.xml" - dest:"{{keycloak_home}}/standalone/configuration/standalone-ha.xml" - mode:0750 + src: "/opt/sunbird_auth_{{sunbird_auth_version}}.config/standalone-ha.xml" + dest: "{{keycloak_home}}/standalone/configuration/standalone-ha.xml" + mode: 0750 - name: Postgresql Configuration- module.xml template: - src:"/opt/sunbird_auth_{{sunbird_auth_version}}.config/module.xml.j2" - dest:"{{keycloak_home}}/modules/system/layers/keycloak/org/postgresql/main/module.xml" - mode:0750 + src: "/opt/sunbird_auth_{{sunbird_auth_version}}.config/module.xml.j2" + dest: "{{keycloak_home}}/modules/system/layers/keycloak/org/postgresql/main/module.xml" + mode: 0750 - name: Create a directory for SMS provider configuration file: - path:"{{keycloak_home}}/bin/sms-provider" - state:directory - mode:0755 + path: "{{keycloak_home}}/bin/sms-provider" + state: directory + mode: 0755 - name: SMS provider configuration file template: - src:"/opt/sunbird_auth_{{sunbird_auth_version}}.config/Msg91Creds.json.j2" - dest:"{{keycloak_home}}/bin/sms-provider/Msg91Creds.json" - owner:"{{wildfly_user}}" - group:"{{wildfly_group}}" - mode:0755 + src: "/opt/sunbird_auth_{{sunbird_auth_version}}.config/Msg91Creds.json.j2" + dest: "{{keycloak_home}}/bin/sms-provider/Msg91Creds.json" + owner: "{{wildfly_user}}" + group: "{{wildfly_group}}" + mode: 0755 From 44c73569f328f2c435f45fea1320a3e231155511 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Fri, 29 Dec 2017 12:15:26 +0530 Subject: [PATCH 26/41] Issue #24 chore:Sunbird auth package build --- .../roles/keycloak/tasks/deploy-config.yml | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml index c6bc57b0..f3049954 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml @@ -5,16 +5,22 @@ unarchive: src="/opt/sunbird_auth_{{sunbird_auth_version}}.config.zip" dest=/opt/ copy=no owner={{wildfly_user}} group={{wildfly_group}} - name: Keycloak configuration XML file - template: + copy: src: "/opt/sunbird_auth_{{sunbird_auth_version}}.config/standalone-ha.xml" dest: "{{keycloak_home}}/standalone/configuration/standalone-ha.xml" mode: 0750 + owner: "{{wildfly_user}}" + group: "{{wildfly_group}}" + remote_src: yes - name: Postgresql Configuration- module.xml - template: - src: "/opt/sunbird_auth_{{sunbird_auth_version}}.config/module.xml.j2" + copy: + src: "/opt/sunbird_auth_{{sunbird_auth_version}}.config/module.xml" dest: "{{keycloak_home}}/modules/system/layers/keycloak/org/postgresql/main/module.xml" mode: 0750 + owner: "{{wildfly_user}}" + group: "{{wildfly_group}}" + remote_src: yes - name: Create a directory for SMS provider configuration file: @@ -23,9 +29,10 @@ mode: 0755 - name: SMS provider configuration file - template: - src: "/opt/sunbird_auth_{{sunbird_auth_version}}.config/Msg91Creds.json.j2" + copy: + src: "/opt/sunbird_auth_{{sunbird_auth_version}}.config/Msg91Creds.json" dest: "{{keycloak_home}}/bin/sms-provider/Msg91Creds.json" owner: "{{wildfly_user}}" group: "{{wildfly_group}}" mode: 0755 + remote_src: yes From e413b58bfce3e820d18d0e6ad145eb201452fab4 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Fri, 29 Dec 2017 12:55:40 +0530 Subject: [PATCH 27/41] Issue #24 chore:Sunbird auth package build --- .../ansible/roles/keycloak/tasks/deploy-config.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml index f3049954..83cd7b17 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml @@ -1,12 +1,12 @@ - name: Paste keycloak config package on server - copy: src="sunbird_auth_{{sunbird_auth_version}}.config.zip" dest="/opt/" force=no owner={{wildfly_user}} group={{wildfly_group}} + copy: src="sunbird_auth_{{sunbird_auth_version}}.config.zip" dest="/tmp/" force=no owner={{wildfly_user}} group={{wildfly_group}} - name: extarct the folder - unarchive: src="/opt/sunbird_auth_{{sunbird_auth_version}}.config.zip" dest=/opt/ copy=no owner={{wildfly_user}} group={{wildfly_group}} + unarchive: src="/tmp/sunbird_auth_{{sunbird_auth_version}}.config.zip" dest=/tmp/ copy=no owner={{wildfly_user}} group={{wildfly_group}} - name: Keycloak configuration XML file copy: - src: "/opt/sunbird_auth_{{sunbird_auth_version}}.config/standalone-ha.xml" + src: "/tmp/sunbird_auth_{{sunbird_auth_version}}.config/standalone-ha.xml" dest: "{{keycloak_home}}/standalone/configuration/standalone-ha.xml" mode: 0750 owner: "{{wildfly_user}}" @@ -15,7 +15,7 @@ - name: Postgresql Configuration- module.xml copy: - src: "/opt/sunbird_auth_{{sunbird_auth_version}}.config/module.xml" + src: "/tmp/sunbird_auth_{{sunbird_auth_version}}.config/module.xml" dest: "{{keycloak_home}}/modules/system/layers/keycloak/org/postgresql/main/module.xml" mode: 0750 owner: "{{wildfly_user}}" @@ -30,7 +30,7 @@ - name: SMS provider configuration file copy: - src: "/opt/sunbird_auth_{{sunbird_auth_version}}.config/Msg91Creds.json" + src: "/tmp/sunbird_auth_{{sunbird_auth_version}}.config/Msg91Creds.json" dest: "{{keycloak_home}}/bin/sms-provider/Msg91Creds.json" owner: "{{wildfly_user}}" group: "{{wildfly_group}}" From eac52d9f129aac96952532059d629d2643168f0f Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Fri, 29 Dec 2017 13:05:55 +0530 Subject: [PATCH 28/41] Issue #24 chore:Sunbird auth package build --- .../ansible/roles/keycloak/tasks/deploy-config.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml index 83cd7b17..58d8088f 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml @@ -36,3 +36,13 @@ group: "{{wildfly_group}}" mode: 0755 remote_src: yes + +- name: Delete config directory + file: + path: "/tmp/sunbird_auth_{{sunbird_auth_version}}.config" + state: absent + +- name: Delete config directory zip + file: + path: "/tmp/sunbird_auth_{{sunbird_auth_version}}.config.zip" + state: absent From 7ce30025bad437c2d9db988a97dd623143a4b15c Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Fri, 29 Dec 2017 13:12:27 +0530 Subject: [PATCH 29/41] Issue #24 chore:Sunbird auth package build --- .../ansible/roles/keycloak/tasks/build.yml | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml index 411b3f66..c19490df 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml @@ -61,17 +61,17 @@ dest: "sunbird_auth_{{sunbird_auth_version}}/modules/system/layers/keycloak/org/postgresql/main/module.xml" mode: 0750 -- name: Create sunbird auth directory - file: - path: sunbird_auth_{{sunbird_auth_version}}/bin/sms-provider - state: directory - mode: 0755 - -- name: Create SMS provider configuration file - template: - src: "roles/keycloak/templates/Msg91Creds.json.j2" - dest: "sunbird_auth_{{sunbird_auth_version}}/bin/sms-provider/Msg91Creds.json" - mode: 0750 +#~ - name: Create sunbird auth directory + #~ file: + #~ path: sunbird_auth_{{sunbird_auth_version}}/bin/sms-provider + #~ state: directory + #~ mode: 0755 + +#~ - name: Create SMS provider configuration file + #~ template: + #~ src: "roles/keycloak/templates/Msg91Creds.json.j2" + #~ dest: "sunbird_auth_{{sunbird_auth_version}}/bin/sms-provider/Msg91Creds.json" + #~ mode: 0750 - name: Remove the Keycloak zip become: yes From fb31a74fc298f7eb86c9f2c20f74358111e28133 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Fri, 29 Dec 2017 14:19:28 +0530 Subject: [PATCH 30/41] Issue #24 chore:Sunbird auth package build --- .../roles/keycloak/tasks/deploy-config.yml | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml index 58d8088f..836ade4c 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy-config.yml @@ -1,3 +1,18 @@ +- name: status service + become: yes + command: /etc/init.d/keycloak status + register: keycloak + poll: 5 + async: 10 + +- name: stop service + become: yes + command: /etc/init.d/keycloak stop && Pkill keycloak + when: "keycloak.stdout.find('running') != -1" + poll: 5 + async: 10 + ignore_errors: yes + - name: Paste keycloak config package on server copy: src="sunbird_auth_{{sunbird_auth_version}}.config.zip" dest="/tmp/" force=no owner={{wildfly_user}} group={{wildfly_group}} @@ -46,3 +61,9 @@ file: path: "/tmp/sunbird_auth_{{sunbird_auth_version}}.config.zip" state: absent + +- name: start service + become: yes + command: /etc/init.d/keycloak start + poll: 5 + async: 5 From b827fef59d9383847f7018c608906a0e8a07ea27 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Fri, 29 Dec 2017 14:33:46 +0530 Subject: [PATCH 31/41] Issue #24 chore:Removed local inventory dir --- .../local/group_vars/localhost.yml | 291 ------- .../scripts/ansible/inventories/local/hosts | 166 ---- .../ansible/inventories/local/secrets.yml | 806 ------------------ 3 files changed, 1263 deletions(-) delete mode 100644 keycloak/scripts/ansible/inventories/local/group_vars/localhost.yml delete mode 100644 keycloak/scripts/ansible/inventories/local/hosts delete mode 100644 keycloak/scripts/ansible/inventories/local/secrets.yml diff --git a/keycloak/scripts/ansible/inventories/local/group_vars/localhost.yml b/keycloak/scripts/ansible/inventories/local/group_vars/localhost.yml deleted file mode 100644 index 9c5173b7..00000000 --- a/keycloak/scripts/ansible/inventories/local/group_vars/localhost.yml +++ /dev/null @@ -1,291 +0,0 @@ -# ENVIRONMENT CONFIGURATION -env: local #Name of the environment, e.g. dev, staging or production. -proxy_server_name: dev.open-sunbird.org #Domain on which the portal will be accessed. e.g. staging.{implementation-name}.org -proxy_site_key: "{{ vault_proxy_site_key }}" #SSL certificate's site.key file contents. More details in this wiki: https://github.com/project-sunbird/sunbird-commons/wiki/Updating-SSL-certificates-in-Sunbird-Proxy-service -proxy_site_crt: "{{ vault_proxy_site_crt }}" #SSL certificate's site.crt file contents. More details in this wiki: https://github.com/project-sunbird/sunbird-commons/wiki/Updating-SSL-certificates-in-Sunbird-Proxy-service -ansible_connection: "local" - -# DB CONFIGURATION - -## Below passwords are used by DB install scripts when creating databases. Please use strong passwords. -application_postgres_password: "{{vault_application_postgres_password}}" #Password for Application database. -keycloak_postgres_password: "{{vault_keycloak_postgres_password}}" #Password for Keycloak (Authentication service) database. -kong_postgres_password: "{{ vault_kong_postgres_password }}" #Password for Kong (API Manager) database. - -## Postgres configuration -swarm_address_space: 10.0.0.0/16 #Application server address space (e.g. 10.3.0.0/24), also the agentpublicSubnet if using Azure scripts provided -keycloak_address_space: 10.113.0.0/24 -postgres_address_space: 10.10.0.0/24 - -## Cassandra configuration -cassandra_server_private_ip: 10.10.4.4 #Private IP of cassandra server -keystore_password: "{{vault_keystore_password}}" #Password to use for encrypting cassandra keystore. Use a strong password. -truststore_password: "{{vault_truststore_password}}" #Password to use for encrypting cassandra truststore. Use a strong password. - -# APPLICATION CONFIGURATION - -kong_host: api-manager_kong - -## DB address -application_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server -keycloak_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server -kong_postgres_host: "{{ groups['postgresql-master'][0]}}" #Private IP of Postgres server -sunbird_mongo_ip: 10.10.2.5 #Private IP of Mongo DB server -sunbird_cassandra_host: 10.10.4.4 #Private IP of Cassandra server -sunbird_es_host: 10.10.3.7,10.10.3.8,10.10.3.6 #Private IP of Elastic Search server. If ES cluster has multiple nodes then add all nodes by separating them with comma. e.g. 10.2.0.1,10.2.0.2,10.2.0.3 - -## Application server configurations -sunbird_ekstep_api_base_url: https://qa.ekstep.in/api #API base URL of the Ekstep environment. Use `https://qa.ekstep.in/api` for non-prod deployments, and use `https://api.ekstep.in/` for prod deployment. -sunbird_ekstep_proxy_base_url: https://qa.ekstep.in #Base URL of the Ekstep environment. Use `https://qa.ekstep.in/` for non-prod deployments, and `https://community.ekstep.in/` for prod deployment. -sunbird_env: qa #Ekstep environment to connect to. Use `qa` for non-prod deployments, and `prod` for prod deployment. -sunbird_mail_server_host: "{{ mail_server_host }}" #SMTP server IP. Could be ignored if not mails are to be sent. -sunbird_mail_server_port: "{{ mail_server_port }}" #SMTP port. Could be ignored if not mails are to be sent. -sunbird_mail_server_username: "{{ mail_server_username }}" #SMTP username. Could be ignored if not mails are to be sent. -sunbird_mail_server_password: "{{ mail_server_password }}" #SMTP server pasword. Could be ignored if not mails are to be sent. -sunbird_mail_server_from_email: support-dev@open-sunbird.org #Email ID that should be as from address in mails - -## Keycloak (auth server) login details -sunbird_sso_username: "{{ vault_sunbird_sso_username }}" -sunbird_sso_password: "{{ vault_sunbird_sso_password }}" -keycloak_admin_username: admin -keycloak_admin_initial_password: "{{ vault_keycloak_admin_password }}" -keycloak_tar_path: keycloak.tar.gz -keycloak_theme_path: artifacts/sunbird - - -## Content Repo configuration -sunbird_api_auth_token: "{{ vault_sunbird_api_auth_token }}" #Authorization key (JWT) to access Sunbird APIs. This will be in the output of deploy-apis.sh script, extracting it out is documented in the deployment wiki. -sunbird_ekstep_api_key: "{{ vault_sunbird_ekstep_api_key }}" #Authorization key (JWT) to access Ekstep APIs. Steps to generate this are documented on https://github.com/project-sunbird/sunbird-commons/wiki/Obtaining-API-token-for-accessing-ekstep-APIs -sunbird_trampoline_secret: "{{ vault_sunbird_trampoline_secret }}" - -# ADVANCED CONFIGURATIONS - -cassandra_listen_address: "{{ cassandra_server_private_ip }}" -cassandra_seeds: "{{ cassandra_server_private_ip }}" -cassandra_broadcast_rpc_address: "{{ cassandra_server_private_ip }}" -cassandra_broadcast_address: "{{ cassandra_server_private_ip }}" -cassandra_listen_interface: '' -cassandra_log_dir: '/var/log/cassandra' -cassandra_root_dir: '/etc/cassandra' -cassandra_version: '3.9' -cassandra_port: 9042 -cassandra_rpc_address: 0.0.0.0 -cassandra_restore_dir: /home/deployer/ -cassandra_backup_azure_container_name: cassandra-backup -cassandra_backup_azure_storage_account_name: "{{ backup_storage_name }}" -cassandra_backup_azure_storage_access_key: "{{backup_storage_key}}" -cassandra_backup_dir: /data/cassandra/backup - -keycloak_url: http://10.113.0.7 - -keycloak_auth_server_url: "https://{{ proxy_server_name }}/auth" -keycloak_realm: sunbird -sunbird_content_player_url: "https://{{ proxy_server_name }}/api/" -sunbird_learner_player_url: "https://{{ proxy_server_name }}/api/" -sunbird_sso_client_id: admin-cli -sunbird_mongo_port: 27017 -sunbird_mongodb_port: 27017 -sunbird_portal_realm: sunbird -sunbird_portal_auth_server_client: portal -sunbird_trampoline_client_id: trampoline -sunbird_appid: sunbird_portal -sunbird_default_tenant: sunbird -sunbird_echo_api_url: "https://{{ proxy_server_name }}/api/echo/" -sunbird_pg_host: "{{ application_postgres_host }}" -sunbird_pg_port: 5432 -sunbird_pg_db: quartz -sunbird_pg_user: quartz -sunbird_pg_password: "{{ application_postgres_password }}" -sunbird_installation: sunbird -sunbird_account_name: sunbirddev -sunbird_account_key: "{{ vault_sunbird_account_key }}" -sunbird_sunbird_quartz_mode: cluster -sunbird_encryption_mode: local -sunbird_cassandra_urls: "{{ cassandra_server_private_ip }}:{{ cassandra_port }}" -sunbird_session_store_type: cassandra -sunbird_keycloak_client_id: 'portal' -sunbird_keycloak_public: true -sunbird_cache_store: "memory" -sunbird_cache_ttl: 1800 -sunbird_portal_title_name: portal -sunbird_web_url: "https://{{ proxy_server_name }}" -sunbird_sso_publickey: "{{vault_sunbird_sso_publickey}}" -sunbird_azure_storage_account: "{{vault_sunbird_azure_storage_account}}" -sunbird_azure_storage_key: "{{vault_sunbird_azure_storage_key}}" -sunbird_container_name: portal -sunbird_cdn_url: https://dev-sunbird-temp.azureedge.net/{{sunbird_container_name}} -mongo_backup_dir: /home/deployer/mongo-backups -sunbird_background_actor_host: actor-service -sunbird_actor_system_name: BackGroundRemoteMiddlewareActorSystem -sunbird_app_url: -sunbird_fcm_account_key: -sunbird_env_logo_url: - - -#player_tenant_dir: -sunbird_dataservice_url: https://{{ proxy_server_name }}/api/ -project: sunbird -application_postgres_database: quartz -application_postgres_user: quartz -keycloak_postgres_database: keycloak -keycloak_postgres_user: keycloak - - -## Cassandra download URI -cassandra_repo: 'deb http://www.apache.org/dist/cassandra/debian 39x main' -cassandra_repo_key: 'https://www.apache.org/dist/cassandra/KEYS' - -#API Manager -kong_postgres_port: 5432 -kong_postgres_user: api_manager_dev -kong_postgres_database: api_manager_dev - -es_curl_host: 10.10.3.7 - -## Logging details -syslog: - host: 172.16.0.5 - port: 51415 - -## PostgreSQL config -postgres_replication_user_name: replication -postgres_replication_user_password: "{{ vault_postgres_replication_user_password }}" - -postgresql_hba_entries: - - { type: local, database: all, user: postgres, auth_method: peer } - - { type: local, database: all, user: all, auth_method: peer } - - { type: host, database: all, user: all, address: '127.0.0.1/32', auth_method: md5 } - - { type: host, database: all, user: all, address: '::1/128', auth_method: md5 } - - { type: host, database: all, user: "{{ postgres_exporter_user }}", address: '{{ swarm_address_space }}', auth_method: md5 } - - { type: host, database: replication, user: "{{ postgres_replication_user_name }}", address: '{{ postgres_address_space }}', auth_method: md5 } - - { type: host, database: all, user: all, address: '{{ swarm_address_space }}', auth_method: md5 } - - { type: host, database: all, user: all, address: '{{ keycloak_address_space }}', auth_method: md5 } - -ansible_vault_password: "{{ vault_ansible_vault_password }}" -docker_hub_password: "{{ vault_docker_hub_password }}" -jenkins_slave_jenkins_username: "{{ vault_jenkins_slave_jenkins_username }}" -jenkins_slave_jenkins_password: "{{ vault_jenkins_slave_jenkins_password }}" -ops_private_key: "{{ vault_ops_private_key }}" -deployer_ssh_key: "{{ vault_deployer_ssh_key }}" -proxy_prometheus_admin_creds: "{{ vault_proxy_prometheus_admin_creds }}" - -# ADDITIONAL CONFIGURATION -backup_storage_name: "sunbirdbackupsdev" -prometheus_storage_retention_time: 72h0m0s -curl_host: dev.open-sunbird.org - -mail_server_host: smtp.sendgrid.net -mail_server_port: 587 -mail_server_username: azure_886153b1defb14e38ecc9c7301625aba@azure.com -mail_server_password: "{{ vault_mail_server_password }}" - -logger_es_host: "{{ groups['dev-log-es'][0] }}" -logger_es_port: 9200 - -kibana_oauth_redirect_url: https://dev.open-sunbird.org/oauth2/callback -monitor_alerts_slack_channel: sunbird-dev-alert -keycloak: True - -api__host: dev.open-sunbird.org - -proxy_replicas: 2 -proxy_reservation_memory: 32M -proxy_limit_memory: 128M -kong_replicas: 3 -kong_reservation_memory: 64M -kong_limit_memory: 256M -echo_service_replicas: 2 -echo_service_reservation_memory: 8M -echo_service_limit_memory: 16M -adminutil_replicas: 2 -adminutil_reservation_memory: 512M -adminutil_limit_memory: 1024M - -actor_replicas: 2 -actor_reservation_memory: 500M -actor_limit_memory: 1024M - -learner_replicas: 2 -learner_reservation_memory: 1500M -learner_limit_memory: 1500M - -player_replicas: 2 -player_reservation_memory: 256M -player_limit_memory: 512M - -content_replicas: 2 -content_reservation_memory: 64M -content_limit_memory: 256M - -keycloak1_replicas: 1 -keycloak1_reservation_memory: 768M -keycloak1_limit_memory: 1024M - -keycloak2_replicas: 1 -keycloak2_reservation_memory: 768M -keycloak2_limit_memory: 1024M - -monitor_es_host: "{{ groups['es'][0] }}" -alertmanager_host: "{{ groups['swarm-agent-for-alertmanager'][0] }}" -prometheus_host: "{{ groups['swarm-agent-for-prometheus'][0] }}" - -swarm_load_balancer: 10.0.0.100 -filebeat_logtsash_host: "{{ swarm_load_balancer }}" - -expected_minimum_logs_per_minute: 30 - -proxy_prometheus: true - -enable_scraping_docker_metrics: true -enable_mongodb_availability_check: false - -postgres_exporter_postgres_port: 5432 -postgres_exporter_user: postgres_exporter -postgres_exporter_password: "{{ vault_postgres_exporter_password }}" -sunbird_learner_service_base_url: https://dev.open-sunbird.org/api -kong_admin_api_url: http://api-manager_kong:8001 - -postgresql_backup_azure_storage_account_name: "{{ backup_storage_name }}" -postgresql_backup_azure_storage_access_key: "{{ backup_storage_key }}" -postgresql_restore_azure_storage_account_name: "{{ backup_storage_name }}" -postgresql_restore_azure_storage_access_key: "{{ backup_storage_key }}" - -grafana_url: https://dev.open-sunbird.org/grafana -grafana_editor_username: editor - -app_alerts_mailing_list: "rayulu@ilimi.in, harishg@ilimi.in, manzarul.haque@tarento.com,{{devops_alerts_mailing_list}}" -devops_alerts_mailing_list: "deepakn@sahajsoft.com, manojv@ilimi.in, shashankt@sahajsoft.com, mathew.pallan@tarento.com, bineesh.k@riflexions.com" -site_alerts_mailing_list: "shailesh@ekstepplus.org, ashwin@tekditechnologies.com, lakhan_m@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" -keycloak_alerts_mailing_list: "ashwin@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" -api_manager_alerts_mailing_list: "ashwin@tekditechnologies.com, amol_g@techjoomla.com, {{devops_alerts_mailing_list}}" - -jenkins_url: http://10.20.0.4:8080/jenkins - -kibana_oauth_authenticated_email_domains: - - ekstep.org - - sahajsoft.com - - ilimi.in - - tarento.com - -kibana_oauth_authenticated_email_ids: - - shailesh@ekstepplus.org - - vijetha.nayak@riflexions.com - - bineesh.k@riflexions.com - - arvind.yadav@compassitesinc.com - -monitor_alerts_mail_from_email: alerts@open-sunbird.org -monitor_alerts_mail_server_host: "{{ mail_server_host }}" -monitor_alerts_mail_server_port: "{{ mail_server_port }}" -monitor_alerts_mail_server_username: "{{ mail_server_username }}" -monitor_alerts_mail_server_password: "{{ mail_server_password }}" -env_short_name: dev - -# keycloak sms provider -keycloak_build_src: "keycloak_build" -keycloak_ver: "keycloak-3.2.0.Final" -keycloak_sms_provider_build: "keycloak-email-phone-autthenticator-1.0-SNAPSHOT.jar" -keycloak_sms_provider_templates_src: "templates.tar.gz" -keycloak_sms_provider_templates_dest: "/opt/keycloak/themes/sunbird/login" -keycloak_ekstep_sunbird_login_theme_file: "login.tar.gz" -keycloak_ekstep_sunbird_login_theme_dest: "/opt/keycloak/themes/sunbird/login" -keycloak_postgresql: "postgresql-9.4.1212.jar" diff --git a/keycloak/scripts/ansible/inventories/local/hosts b/keycloak/scripts/ansible/inventories/local/hosts deleted file mode 100644 index 74af6e13..00000000 --- a/keycloak/scripts/ansible/inventories/local/hosts +++ /dev/null @@ -1,166 +0,0 @@ -[dev-postgresql-1] -10.10.0.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-postgresql-master:children] -dev-postgresql-1 - -[dev-postgresql-slave:children] - - -[postgresql-master:children] -dev-postgresql-master - -[postgresql-slave:children] -dev-postgresql-slave - -[postgresql-backup:children] -postgresql-master - -[postgresql-restore:children] -postgresql-master - -[dev-keycloak-1] -10.113.0.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-keycloak-2] -10.113.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - - -[dev-log-es-1] -10.10.3.10 ansible_ssh_user=deployer node_name=dev-log-es-1 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-es-1] -10.10.3.7 ansible_ssh_user=deployer es_instance_name=dev-es-1 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-es-2] -10.10.3.8 ansible_ssh_user=deployer es_instance_name=dev-es-2 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-es-3] -10.10.3.6 ansible_ssh_user=deployer es_instance_name=dev-es-3 es_etc_node_master=true es_etc_node_data=true ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-cassandra-1] -10.10.4.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-swarm-bootstrap-manager] -172.16.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-swarm-manager] -172.16.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-keycloak1] -10.113.0.4 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[dev-keycloak2] -10.113.0.5 ansible_ssh_user=deployer ansible_ssh_private_key_file=/run/secrets/deployer-ssh-key ansible_sudo_pass="{{ deployer_sudo_pass }}" - -[keycloak:children] -dev-keycloak1 -dev-keycloak2 - -[swarm-agent-docker-prune] -localhost ansible_connection=local - -[dev-kong-api] -localhost ansible_connection=local - -[kong-api:children] -dev-kong-api - -[dev-grafana-dashboards-export] -localhost ansible_connection=local - -[grafana-dashboards-export:children] -dev-grafana-dashboards-export - -[dev-grafana-dashboards-import] -localhost ansible_connection=local - -[grafana-dashboards-import:children] -dev-grafana-dashboards-import - -[swarm-bootstrap-manager:children] -dev-swarm-bootstrap-manager - -[swarm-manager:children] -dev-swarm-manager - - -[dev-es:children] -dev-es-1 -dev-es-2 -dev-es-3 - -[dev-log-es:children] -dev-log-es-1 - -[es:children] -dev-es - -[es-backup:children] -dev-es-1 - -[log-es-backup:children] -dev-log-es-1 - -[log-es:children] -dev-log-es - -[cassandra:children] -dev-cassandra-1 - -[dev-keycloak:children] -dev-keycloak-1 -dev-keycloak-2 - -[swarm-agent-for-prometheus] -10.0.0.9 ansible_ssh_user=ops ansible_ssh_private_key_file=/run/secrets/ops-private-key - -[swarm-agent-for-grafana] -10.0.0.12 ansible_ssh_user=ops ansible_ssh_private_key_file=/run/secrets/ops-private-key - -[swarm-agent-for-alertmanager] -10.0.0.9 ansible_ssh_user=ops ansible_ssh_private_key_file=/run/secrets/ops-private-key - -[local] -localhost ansible_connection=local - -[localhost] -localhost ansible_connection=local - -[non-swarm-nodes:children] -postgresql-master -postgresql-slave -postgresql-backup -postgresql-restore -es -cassandra -log-es -keycloak -local -localhost - -[local-task-runners:children] -kong-api -grafana-dashboards-export -grafana-dashboards-import - -[swarm-nodes:children] -swarm-manager -swarm-bootstrap-manager -swarm-agent-for-prometheus -swarm-agent-for-grafana -swarm-agent-for-alertmanager - -[node-exporter:children] -non-swarm-nodes -swarm-manager - -[log-forwarder:children] -non-swarm-nodes -swarm-manager - -[dev:children] -non-swarm-nodes -swarm-nodes -local-task-runners - diff --git a/keycloak/scripts/ansible/inventories/local/secrets.yml b/keycloak/scripts/ansible/inventories/local/secrets.yml deleted file mode 100644 index be20efff..00000000 --- a/keycloak/scripts/ansible/inventories/local/secrets.yml +++ /dev/null @@ -1,806 +0,0 @@ -$ANSIBLE_VAULT;1.1;AES256 -36303132313138313463326365646333383038393233383933383866373566626136386162613065 -6439656630616138356461336236653930663938666164320a346139373336333761666333336139 -37626139313933356164653232666537663232336334363962323430636139373638313636326531 -6132643336643034620a373532363830633066633137316261616365646239326132333639653334 -30613062383462633164646237616566353235646637353765386239666361346662316238386438 -38336239633038643132343064383932663666373361346162306233346362363863343135663431 -33623431633963343961656539303764626166643634623631303163623537663362373038343264 -33333938333333623064666132363863386231393734333066363563643937303035323237636163 -36343937346533633338646132626461303338633036663035666161616631363130623731656631 -30633834393037383065663931303931373366323933366333313538666136626234613163316139 -31383635346632316162303461613336653833633463316561363739393862316633356231666532 -30616234326235386464386435633334613134353964376132306438393332333436333936363239 -36336232336266303037346138396165346131653833333232313233343864303465646661373561 -65343539653961396562656663306266356538633965653761653834666563346232333065663666 -63336130663034356132383932356466656233613631653538396664383038646230613566326466 -64396363326563613630653133363733343132353930656330373161663837656439376531343733 -65653762623366656334333732653463366239623762366339313966386465316565326665663838 -65646563326264623739663633306634316133626438383462333537316132353265623034306136 -35393036643864353036643265383937363363323232326232356235343562386637303565663061 -62383163313436623633613363633638386430636434646539616334623436316662306466653639 -38653264323330383766663038626263343232356538393237343338396665323062343535373034 -61316534343462353335626166643337623762353437333830303430376161356539643138383733 -63663964366264316639353934613761616466613831626465653662633061633131623733313336 -66333233383930343231363863623634316437623462626665303530303835393733626564326339 -61313861633830366466663836613837366665393130343062336430376236646637653430666663 -39646563623437636438336132316537316363333837353133646536303437666166353237333230 -33326636333362346538626362616161306131623238616563663431623439323563363633623936 -33386230633564396465646266336564363963636439313662613765323935666430636439336631 -64363332666165346530323762323963636165343633393939303965653738616364366432623636 -33386136336163303332343438663330303036333332363530383231316239623838376132316235 -30383533643934646361313663366539316562636563326665656365383837313534346133616531 -35346162333237333835336263613563633731386164306139643338306538666463303163623261 -31626634386138633539396162643063396536313632366161613335656365346464373130333663 -39646261613233636631373761653235366430343438663639326334643735323030663139616434 -66383034633837663433386463356463633133303238383962636430396539663036346330663338 -66323832363561333538393331376465636533396663386135623739333865306530613338623766 -63363732353535303836336462636533623135393164313332656363656262656534353266656239 -33353466363131323736343136333433373433346136373866313166306135326337333837333136 -38663737626630613932383735343838663961393263393266366136386532373365393462336163 -64343238303832663937376133656135643834343061353461626439356265643630656437306135 -32356637363433303465356661346263333561386630323962613265393037663239343062653564 -32656639393939336636656338333866646332303935346539333537623266613863643864653063 -38336337633262636630643262636138346161626538313431383132636639626633363663373736 -32353165373363643136353535316334626635333866316461393730613336666133353734313533 -37616438313466373931636166633133393334376636643738353263626439323139653530313837 -30616434626461636437313566653038383061333366373137643265316633316566653735353734 -39313366373864613839313837376662316231306561336439656330663261643163343039343066 -64613432343332363461366630626435336133616232653032643232343862626135643637666332 -36303536333666356235386338656437653236653530313264633435373765336234386635343435 -66636130323963323265373831313739353738313535393461383031616164343332376565663964 -34656137386532633637643730356135363361643539356433613130646165373065666461646631 -66623263346138616632373164396334613538353235373135656164343035303036656462333062 -31626635636232343965656238323330393962656461343534613131376666663261633261356331 -33356134373164653436613537636531626433313130313431616164663962343233326365376138 -36663936636664313537643861303565643166653965666266393266353135343164623162356334 -63613930323133663464396430653039386538393962303339333236366631393831643239656232 -31383138323466366362623032396633346463346566376330623635636463333733623866396266 -32313763666438353231313132373363353737393335653835623330306633343638326637353531 -38613466386637656531363762626135653362666266393939393966636634616230343238653136 -63613236383734663365656339396135656162366533343539633734386664633561376330653866 -39643235646238343435646166636330613334386138333462633564333131306464316137306664 -61376562396530626338636433303939336431626566643261393763316234626265303338613530 -66336432656363313930613336383636393036386232323737333436393436386538626134383964 -61613939353133376230623066336338663535643932396232323066363463643731613534636134 -34656637306338383131666139336439363437646366396333363837303466376330613763353764 -32383839653136343633323430373737373131613163353233353631373063666234323630343331 -30623137623863393665626562356461306336313463393336383330663861366132663630626136 -61323464656137653431616166366366656566656530363138313935376136656461343366313532 -31373966623662333662313331356233613230653762653635643038633332356161323635346364 -34623138333337333734616431663262393866303736383663306265313330303035306365616566 -37363233336661356135313337336235663063386161306564663334343066623161353966333739 -63316361633433346637366637326631326363653938396638636237373330383033313061643566 -30316532643062346631356266653139656539353462333831643763326537616530323539383831 -62613035366534336632393531633462623662666637363165633633336631373535663261636331 -38353436663139663832323061656165383464353232616330366566663432616563303438383937 -66633563663765393564653035386234386238303037396232656263326564353237363165373230 -63643066323964383030333037646634386130313639633161393939636139373130383739636339 -34666464303933613866313734656235643461666466336439343761323432363631386165636364 -65616634666338393531396132306537653136643035323262333464356132396536326366376631 -31396262666363613138663733316661333763363531366463643564373863386636396637343730 -30643861326639636332643834333662313333643466636165663730356438303139326465616239 -39316563623437306633626136343637313432626533373165343931626536623666633765333262 -63396165333835313937343634356633336134643836356235376131386439383037636230373234 -32343063373063333363363531613562623966643834306566353734313336333537343230626563 -62306339373532383938363934656233643333663662666363323134373835356666643863666538 -37356237396361653032623538303937396464343432623237613965306633376330326537643639 -30653233346134343637656333616233666639643931646633316362353866353131306532386163 -35376135336631353166353565366562626535636562623833616339373532386434383431633565 -36343335656265616235666235393661663263616538393465346363656637663765653461653066 -33303338643162393063303336636330656363316239636165383363653661393039363663633362 -39386165303462373865333964623933363930623034653865613565303238376532366637633162 -37313433353332336139633330626130636438663031623131333661343430653033383330646566 -32643861663235396633663930353864636533613036383563653839313532343731346634336466 -31626161386361643562356561643865333962623166376333643066623634653664646231323635 -66333866376632613765306539306636613533633063353233383564653761653237396163396564 -35643566656663363239643632616164393535633635653863653937663331373132613063346238 -62363263396462383862336132643837316430393738323366363035376261353833333137323262 -38333466633034346464393433366131376439396266323331373237393031376466653137643061 -64633535616130353037646334386133653336633739366330613163396237356665366239646236 -35623531336239656137613933373536653530663936323735346238336463663834666537653365 -31656339373264373931663764633235616463366266323939356539343064393064323561666631 -31346533323334633731636366383136613637376431363532633534623033643662363263383965 -32646232303264643034396664663635366262316234613732663736626162623266353334363564 -35326133643166396134333963303934353266333331666138623664396436383064663835643637 -38373866363835623933393734643535643962666331333561663334303433366564303263393037 -30636133303939636635656564613766656363666361326461646136336661373732636633396637 -37623034336261626665613739366630616438396533666436623632663162393933386362313966 -39616138303938303132656439643966643634636638343534333030343833393064613837366336 -62643962313366633434316237316135363765656637636563643965373830633962373861313031 -34343633613938383031363433646133623931376465613034346562666562383763626530636366 -33366565646565623562353466633062356433653562633931333866646339656466623738353839 -35343036306664313539303030363464653536373365396136306463393636376434376532653039 -63636236306461336332643937326461323961373639363061663165356435636466393361323834 -36663232333237653031373332636539613631626234366137373861646135313535656463623337 -31363265383933343634643862623733666237626130303936343736633861616561316239336162 -30346533393662623361656134613831323236316238663930633231663865353133336432343937 -32396535613035376564393761313230656462626433343664633338653065613535313065376538 -31633932663362366536633466616235333337323939356131343135343836383134393566323630 -64636338613762373463636633646436303137323937656531386233656334333434326566373163 -63303138633438626437373465353130346534376433363361356535306536646564313736336237 -63323336623830333931613165366463363337623165653164663731393766356462313839376435 -66346362396234323764646163653561316531623061346238303032333035623333383563396530 -32396230336538333563363236313335643862393162613637373539343634653532613336313663 -30393864363963626134323963643864383739663833306365313434333739353532666130316265 -33316438636262373862396136663061393962633037643532343236376639366136306236316461 -31393362366531333964653763633632343962343239616132616361663665623663303065323366 -61303131666138373337313565363435316238313830343965636430336532316666383939633933 -66346231373438323066326231633336666535646232393933336330643666326534356164336636 -39353438616563383265366330643837356263343466663537356337616166623037303238313061 -66316666623866633035326336653431366665616235363432643139373961663435366331313234 -39663431353161386231353636656331656134396334396439383637303561366537313632646539 -36636336666433363731656136373561393632336235663266306166663134333465366438393762 -66393534663739323263303333353739616336316539623537303839656438356534616262336633 -34656466656230316532303039656639323835613833653739656339666264616363323363666330 -38616464393163653037613030323032656562316535306265326262633962313534643836633233 -61386539373036306634333764363366383566646137393034346565366366396136343032653538 -32323335306438303861613136613937343961666537333161613939653564366439353537363465 -33376361393532313962306435313730303866643462316537373632396362316166396166643437 -39396239393864323661643331643938646335353032363262326165373465643436306631666164 -34306661353536383938626632323966643561313864613630353765313230386239663661396432 -66383761623539376634376661633132613032333464666639633531643963366533613536353863 -64333433396564386139656238316638323966616231336361396238663433636237653766623062 -37656534373031656662333464663937633864393761666663303462353333343661656537383736 -38343339303465343839666132386239323734643461316566333166646637373238613836303738 -30323939366539313339313239383836616537663465626635656234363966383766363263643763 -36353865393461386633366562353161636166313039363834323838643834326464323136666537 -63346564623537323161653437663762356632366439636235656131393863333530373230373936 -65326539356438643337356538303031363038366334383834323139643830323531616632303037 -35363566636564336161663933323137393431396463653130303634353534633063613438623861 -38636164346536373838626264366361373634666131306532326539316233636165313631326631 -63643735633933316237636231323432646439633538366535316165623838376362303962313733 -39313365636634393639346532383135333566613361363530656534393561653565393737623061 -36633035383636343339613964643638646636626335303566646234393130613264616539383539 -38383262383462313361363630326161653731306165663038363338623931323862316466626339 -35356233373461616463636530373962306134636565643466613963396364643835373364343562 -66316630626630306361313837386236633433323438653264316464313763336163623031353166 -39393036633933656666396465663339326663306338356332333738663161323837653431383037 -39333463623538306666653830616630666335313664316238326264376237656537393632636237 -32323063356663616261333561646562356233353237303166303062636332636135633634313131 -35663064373436386166393564343933646630303635666234663061323638373338633662353064 -61363838613836643662386431366362333934373964346432616138336337393034663762376334 -31386135616333663334663130383530393836333037646336393434376233363638326661656662 -34346363343131373564663931316431316261666536396231633436363266366231393464303438 -62373364626339393961656235626163663837353361363036313634653230316366323065333933 -64326334656661393432313737643735373633313263626463616264363463343434663832633135 -37633938306362303262636663633231666634306463656663653535663063623233383362333631 -38353237373361636637616239613334623364623232326662646461373034383030666561613764 -31376533663666376437663363333763663761643533393937363731363636346263396436326366 -62316337336533326266353862633437313338646235316537626335363438643363396235663231 -63333732303536643036613063313962623165633562643534636339346635346563313437646633 -61363535363234623439666365316134396633396139396663303263353934396365363837363361 -36353966366666626236356331303333333332326465656266393165653632336532353930626363 -38303135313837326465373139626138373430393763376635313062386132383738393037613965 -66343838383665313430313564653131373863646130386433626164646131653234616238356236 -61393530616566656162643763363166313665653238323836356539653064646661306635633038 -61663631313031666564333361653337303731656639356362346639303561393265303461623364 -61666637646533613831383863353562336363663263646437376164353063373934346139353237 -35396132353766653836646532616435633162663335393734623336643231306538666235653532 -66373364336261363737396634346530346266303565613262373639393837626630613432316335 -35353438326336316463323135313238643863653663383437306566623634336466663464623364 -61336562303566373732363231366163383538333636353366306631643339396635623839383739 -35303433616436303335633334316162663938306631636362366334303836613035646231633062 -38636530343037356435343039373935343737613635383666613666613336613933306433346536 -33353034303662386164303130633739396630323930646332343461303637623836323138613037 -38323137356335613362666263386538316563323834626631396661343431353162313263636537 -66333663323366333734636262326335616634656366646566353963646563646331363864643235 -35316338356263326566343462353331323565363737393030373136303634303236313266343030 -31626438346266633234633263643831613964313562613065393737363237666537636536616135 -39653761666363303362366439373938313063306364393161656332626138333235306464306439 -64356433303262353636336535376535383639376361383661646330643561383738373535663635 -61383664363262386666613763386533303438366666383035326235303932656336383535323738 -62623636336164323462653939386130303662333037616562326432363537653437376364343630 -39656634656133353639616637656166633537383465323463626636663030303139313062633337 -64626664373038373833656664663630383231373161313538336134623135613737633831383362 -31386439653865313765336133316337386664653939343162373834613737373062653036396534 -64643133396530326335636332376634393734353135373863653237616162353262376139353237 -35643764333365393135386363646438306362646561346665343163383834363931643135366137 -38633931316436623465306533636664346433386230613436656562653635346161646534336665 -62303136383563366134323035333635363337366539643332336237306235643532633634383936 -31316335663833316163316364383564626236343164333538356333323761363736313263323137 -37613933366566383265356561386238656334613631643232343862373833623538636236316536 -33386631343265663032383735643361636332613835333833383130316662646463343139613530 -61326433616163626336343532323839393065656630613534613466633763353061353930653437 -33653232326636653039666533323735373736346532333337363163316631656530613935333864 -38393833336161643136383835373432363939366166626566633064356366663337373933323934 -39313964343035333562303861616166393961353166346638393633663636353930333563633365 -63633663643864383661306236376166643366616165346331323761656666393936363631363031 -31373463363066376661306133346366663239393333376564373133393432353866653462383662 -36313661663862363662386564356363316634363964336537636561653730613436396165356433 -38666532646436633132653964313737343165303938653966336231663138373265343363313935 -33383961623431333161363661356163396438633565663964663162303362363063366465303933 -36333662633930313238613662323063663634643037323739393231656631333632393136306439 -33643439323263666337333865316664336332656235373731643139373732396136626534316330 -36636461616230613632313966663762663533303037373763313562306562373232316332356634 -34333935353333346335616133303235376336326661396266653934373765343663666338306537 -38646230306562313538636136306531343765326439663636373763373764666336636133386466 -61613665316361393631313564356339626161313135613037376332626636313766353731633430 -35346635643239636133383865396634653665333431626333323336636239363063646535363239 -32626331383333376365383533363132366364316639356632656339396263306134376136663534 -63396535343938376337626433333539393134363434393230633566326332303666343434303832 -64313063363966333232383138383539656565343834386534366661626266666334653066656537 -32323337343336333536353263653066643731373766376330613232386564316263336166376461 -38326362306664313336326534623436323336393036323961616262656236626336646331323238 -39336233333832356234363065323762623734353439363538646362626534336133313931353537 -62366431373537343464343235343464326462616466613038313536646466393965636463393163 -30343363363530383361653433643035346335663535376665653737303064353662636531663331 -31663734663266343566643630323738386337656530646334303936636562376238313936353139 -65346438386263646231343031363162336134363532623665396666313933356134666334353365 -39306536353238653761363735383064363533343834646265353834653137343937633966666235 -30623434366439633234643265613530386134393466373365366339363561373132343134656433 -33303565383837633266346139323561323338353634613037626336353763386239383061346663 -39353062396339393234656164343736313862393335616230313664373139663262633561616436 -66386466663130613663666639613062633234376436623931356332323232353064663761663437 -32366631393833306632653130623161646365383565396430656637646361333366643833383461 -32373833393237623836663637373665373761363463316339343332326564333639656235623738 -36663135633463646564376463353532383134303864303332396366316265613464343134396466 -37656531353137356261383731393162643235313332343262336231333165326632356539313864 -38326665376533626162626538666638343434363263306637643333646636346236396664386234 -66316366336366623432356463383362653937623739333136353239346635323437336361643831 -62663937343562323461343166313430666434366332383462666539626566393164386134386236 -66303637323762666564313230333637646662633738633537323364316164653462626433313861 -38346231633164306432323435313466393830653962353466323962306635316265653466396263 -63393939316430356235326565376531633433626663303734306335666438383439306637666166 -30353766643233386463623666643430313961633561363666303630343231346133616461656662 -61323861333862313531303166376663303933613837386666643039393162396332373261363731 -32303634303132346535366630383761656533316335363837366463323565343062623261376264 -32356239313064303632366264343465643362646431656136343136386539303866396439333936 -62666164373839323732363262343131323338623234326430333538646564653937396133653866 -31373964653039326262316662626266376462316238656132333134303437356136613361666362 -65623362323637336664366433356435303332626536363966393764353635663731386433666134 -38333161653533616462386665633861643330623561393334636663396363363833656439666339 -31386237383531373536623036386437306135376637326134663937373838653063616463363236 -33306462343230303762373335626362393334353531313663333761636536613733323435386663 -33313762326465376134343435353263346532393865373366363935376337636632373034386431 -65316133613634616663376231363136383733336139636335323063613538616434373736336364 -34623666653131333862353931646266643737323865623636623038333636663663383863363336 -66363936303938346435373866306234616164313930653866646164636466333661336632663830 -64396337646636613661333933396336626264346238346361393562633364316361356236663435 -66623063376561396138646666623738663539356138306561353664356365343535306531343332 -64393362333636333135333735616366626266313331343634323338333738356437303462383538 -37396463663731663565313066623931613030303633626266623739383063376536646130333865 -31373263353261356361306639633331663632393338346561383933633838643438643730363565 -36323563343639373639656264623761643263646438333333326364366532336363633563393639 -35623436653566653563353161393438353332613537343336353830306139666631373237336130 -64343131373965383333623833633734653039633138646431633739336264643131386538633836 -61366530373732356530323530663232326335653230303366373461623137363033376138383562 -66373931646162613438323263303763616464323338626334313630373832623234343439363264 -34396533616535303931643630636363393433366463663665393536643835383438663961653435 -34653962636333313936636238316237626234386366363634363739613431646239626439636662 -35623731653937643263656235623466396537613663626237353233633865323633653439396332 -64326362343532346239386435633437646230303031653938616363393261346665653034353833 -65326465663032373932323866396564653538336535373634643332633032323435653439396535 -32373135373363656132383863656266383566363036343232623037363666316234643366623639 -34666531653965323363393664363230666536633064393035646163333730376264363966356638 -37376437376461613035636461663336633330306464396566633361623436356333633234366237 -33616635663966333738346264636534633764376363643233623135376536613730363631316235 -34653235373331663432333635386435353034613831373435666633313765343065396662653932 -66643339313164336239373732393231333037326338303933626430366463353831663536393530 -38626262353335656338623335383666303661373430326535643464363937343064306465646432 -65613335643831366164316365666361613165653863343033653730393236663437616361383165 -65616332366261653461376435343333396333653533353662333261313831633338356531393639 -30326562653862393333613666643332643830303634316637643264383165373539306531313632 -61636132646335656333636363343464356632316534333538383131376432383162646430376431 -63316339353232356432386431353438616337376161326563336461613061313337636539323133 -34646161656565623537336463613235656335346663363439616365316661376435363861326135 -31613532653931636365626264326536623839666637373737323831356461316239373562623336 -32633337623830633731623537353064336533666139333364356437663835656331366339653564 -31396633396162316361346338636362363630376162353733633762373461393063336462633464 -35353530616265353636313338623863613936306663643037363665636236363233386535656437 -61626165366333333736333039623138613835346562356631333730646234333134393366643533 -62356637396466396662656361333432666664633037373262313863333539326563643063656564 -66366637326263323638386232386630396634643132623433343035656361386165616664396633 -33613063633463336430313237373965613565633035623361313162373032386161346139613233 -66333665363466343938626665643632366130353461343533363461653036313233326461363265 -34656166646331303836613039346130656439666530376263316162323233306638306664653561 -64353735613863623166393833613962343464326561326238393231346335396633666233646332 -39303736343632613135373465616264633635326537363835666333343061363739336332373330 -66653864393534663330623039626434626365643538363964613634613061363939613837613261 -38336466323636643438373038666536656633386332366661343861323330306632623130626637 -35613334343731653134323361326563616165333833626134366137376236646337633239636333 -30366636666265306533616138646339393362633236633633313861643364633933376664653035 -36346663643762663365343635383739323165633333353138656366373638356539343939633534 -32333837633636363937353762666162626430393236663238373932663039616464613566613361 -36326632666463353066633764323563613333623333356465353163653431323632653135613061 -37363663613738303265613665623565316331356336623830303432646661333065373530393431 -37656566353130643230376432663132613338653730386464376230316362313533306466666130 -39656536353830343465366162373237376561323566323433313538663237666166626532386262 -35653435386238373431353762353239326365656134386433643466643462636232303236366633 -66336562656264666235396162636433353064353537343538613338653935663930623532656165 -33316562633131363862613566386566383835633065343532643731313234363034333165336131 -36626635616433626564356436383233623030356661616365616365616161336132656639303564 -31323466643464353461306462316538663963613636373831623361393433646465626666366631 -38363264313033656231653161633962626234646239373564663333333434336462356362343234 -62353862343734323339653831656536623265626439343632343161383663373532363765613535 -39656662633732343431616265323266663366346634316135356230336263323563643335336662 -64653064633538653133613735303838396366346665346338303337306637313236313139643135 -35313433366332356366363132323363383533336235333632653265303539326266346137333334 -32346131353435633762643834393230633664373535643762623534346364373163373038343636 -30313663333139353862353630623730666530323262663435653636663839363737393061383066 -31633530623665663838366331636263313265323234653630663661316465653564373163663633 -34663063643164336639363132643731336431646134333263636235343835633937626265393561 -32363939623837333438616461356361643132336130396564323665303463613261343863643266 -31303039633038383631363665396335616336343838376539306238346463376535313561653732 -31376338663165346339643236313038393164646463343062353137663366393735336235646339 -62646232323838613534366164346435366662393865363861396662353666363230373737666261 -66323563383930376237666131646339393032656166626632626439333232633164313831313165 -30376238616435653831636236376332356535666265663863643139643764336630376462333337 -32303537326362643439666136623636353534313366613563313432626266373564393030326632 -30396635393933306464613766306336323233636438396132323338383066636632316330633238 -62613366383336313434343339303166336436393766666561393664636164303566373334336338 -31356162303836623961333638646166373435393137376136386239343430353036353734616230 -33626332316433393466393365323932383837303338383136376338663166383133643364653764 -61383534636130613366366639336566663234636461346461316130396661336262623337393534 -66373036306563373662383335623965323739626236613766366236623062313637323964373038 -38383136333133663364323066366261663734306136653832366134353938303739346234343936 -38303366343366666538333661643433376539653666616666333261656631646537343731653034 -36373832623165333363346363353762663935323737323565353336396630653535343339663037 -32623737633230396562613762646663373833366632313663363261613737383565383633653830 -39613263313465643135336131376534393337666433623262633234646431303264656630386333 -32656362346164646462376464656362386233373039663637383233646461383230646336356433 -36323439653564653438323966393566633339326337646434313930383532663861373237613663 -34623363323735323433363466393835616633316164663833373439316461376164616164653865 -39326163623763383633373561333730336532643966393730623962656338333437366132616338 -36363933353238643464373461323130373930373162333761373363393165313635363766663935 -35303066323334313531616361373835653234373134306233333037336235306134366633623864 -36623235313230656339373739626230316338636430623134353233366261353134616633663463 -65373435366230313861633638303437356262333562303464383536633037316134623833626431 -65313062396337343033636264373032363739393836633665623862633931393264646239343039 -63643231373636636636303331393730663634653831663834633931323733623031326236656265 -33396537656165303964633535633065326533376665323236326266383134376138613538393932 -66616565353236313463393136343238353835653761313562363930373630393065313732346332 -39656537376132306134613838343332383736376230646235333266363136623030356433636131 -62623861376431613431373139376335343135626434323733623434353761393630613531306433 -32636637613864353361653733383965626465386562633331633264386633326165346532626533 -32343637643638643037386236316164363539313437363038393533663238616436653238326136 -35363437653063616562623334333736376639623461333463303466343838313731383363623639 -63636536326438333735376137396435363764656432656132326439363137323533346366393564 -61383635643037626134386461336563643434393636396166353633306162383665363831663561 -32383961353066636532386166323639376266623563613134323236616462393739363430616538 -32376132653436343834363661633138376539666239663136313132643830306139616563656265 -33336664613262326463383064623032383139383434343064363338336463626136643765303437 -62663765326434393830653237363564626632363964373234316233383130333964366663346264 -64616437326139613836623465643266323839356536393265326237386131393166616365636538 -30363332386139646563656664356435633736386165643830313766663637666438356536376530 -66333636336666303766396465383066356138376462616664636136663430646466333239333437 -39316137313665333537356432363835303834376639663362613636663931306538316361656664 -33343533326530343832376562646661653364303866343630623866636161613234313636343138 -31376461333834633566303364333566363932373264323432643139333131323339316531643661 -38363039363361636261633136326564353337303339353437643331313534633632646562636132 -31663739376335613961383766353964653535306664373738626464353438653030346339613536 -34393238636665323732633832353863323933663638663433306230626264323336373531383061 -38666666393062333637393634396638353035373765313637323130646666616664313034663638 -34633235373137326165346530303637633837343463383131386432326430363332356635623235 -32663263386335313837663135663032313765636663356432663733643830333464353634616266 -66656563653037326333656238663937363835646139393230383763613736396466326531383937 -35366266396436623131383966653839323835373032356463336561396265623130346433333630 -33346635313264626434666532396536373965346164393934386330373931646264326433616461 -33666464323465666361353036353831653637393436646238613037636334663863323630346331 -64316563626635346235376463333165333938326166323461653935373966353164383664666461 -61383361653964396666663365613938626534626337363933343464383962623564323039363431 -66386564353431323838396365333234376665636533346562643864636566306633663832646232 -66363033363737616564336632626331346136343762316137373037653034313738656638646133 -62386264666661633036623861633131636666353433616462336230383737636164633362363662 -32323930653732663064343234383136633332316534323238383236326330303533386337363832 -32313036613132333563633333356535323531363230366534616263323962326635376261356164 -30633663386432666466396466376437353066313934303639333935653330343434643266613065 -39336662326561656638616230326334376637303431666539333439313636383437353066393532 -63343331663566653665343533333935383937666133353037396438616461343038343666633636 -36353834323435323633303738653262623635313134333364663633343562356364326365613764 -31383362366233323937393065653464396663333830326337616464386434336337333434366533 -32323338363833313565346238626162383763383665626538306564623065363738646138393664 -30623730323038323163636239313433643366353032376234343166656234316230633530373630 -34303137396634313562613562303361306434653833373232393062313461393337646166373964 -63313966303432383830363164373339386139346237313035663966316438343464656236616536 -33336630336532616239316261636438346536303566656332363366336466393531353261653731 -30393665343236663462616562313737386666613736396465656266333533623435646132663466 -32343962663230316636393337613061383330663938613938376433333264393932616331313337 -64616632313263633332363464633166643932333634306337333638616566333431323361653761 -63383137386262633037346562323732663630633939343764313463346432623839346364646361 -34393430386230643863613030326464356532376232666135376436636637626163386162663662 -61393239373662353437623064643835353966643366656435386235343461623734303734373936 -61396630353537623563373736343934663832363138306465323930396532356365363937636539 -36373066383738653465386561343837303035313933636232323763366265353434666536386435 -66383739633437356533386366306130656432356163386365373337656463326638626666323162 -34333137306131386335353064663962336432663730373338313661326266353738326330616239 -33643531656339376663613735646266663065346138313838323061363265666239613663346334 -64323633336632663836626166626163356330343863323939366265366339386236363530353534 -61336633663763303462373463323563346332646534613437323736646639323834373439643430 -32393034646434306163373434623434623836656134383230636236653662306562393335646662 -36316664363334353436633466626137353930653436343163353662633565333338386630393237 -66633732646134383232306466663230333036303939336534613163386562383234616338383166 -39646365383839383065653033613366313739393661656239366661323734353366636266373463 -35303437393061356138393135313832616532356438303434383663353331613030386665386462 -37376566626239363730663464333635353265376635663962336534306262333938333363646163 -64373961313632373365663562393333633539363137303062353834303936393239653937383261 -34323664666234313262326266623465653963396330663638303133626630326466393331363936 -66343730626334393163323561643639363466333966653266623232343063383934666665366630 -36386132346561303831636262393634326561373232366438383532333963316364323031343366 -30383338643035353663646237366431356435346662396436633636343732653132616562643130 -66613263653831363130363436613231626464343234346137623537366331346138633166376334 -37333962363931623033393134386564353265323436353564646634663361353236386332313665 -65656234383831323561643638646139643165643464633836343233326532343362313134623239 -32363762376533393430336133643231366634613934623761333434626437313435616661316231 -36356636656665656562313739393130343162343462336133633561646434613163346130353738 -34303935623936616539636135333761306463393236346436636132383837376333306633636531 -62343166383036353865333737356534353661303330306661323039636131376365383864396163 -62633537663630393665363930646133643464653834616564373530666663386132393235393864 -37653233343936386437336532646664313962333864316438396662326139636161393533666466 -36643034363538306435323464326164616664353066323564323432336261353462373961353237 -63616562373035313561363661366332346130323932393131623538353537633162663362383438 -66633930363733353936613230613438356662633134386664613435666133303136333637616539 -32366164646536363335333365663961643965336332306364363437633762636230393538326265 -30313431623265313634666264366664316361653631306534396265353964393839396331326363 -31636538303362323764313265323462643635323734643435386664316663633335613132363432 -33316561326631313737356231303632653664393863383264633962326637633436393364323864 -63643636636664393331653032376336323039313265633466313965633664346632653237356562 -33393966323937393266336233336566636232616231396465323462353639343230643261393336 -61643134393239386661633833663937653233386235633964366565343232333238363665323063 -39376463393936313932333265373065393333343761363134646565383564616335366630363731 -64333035383031636538313364633438346563323534633462396430353732666361343032626132 -61326339323230393632363934366336663062333832303262623431623961393338386531303763 -38373362643234306538613439306665333130663432373533343739633932383564613036383433 -31656466396436656563303132393033653530393733663531646361643533383639623765373235 -61653635323731396436636531363638646462366565323136333431373063636164666563636665 -38376237623332636234663862363330653138363463323832306330366162656235623737316539 -36393161316134393838323565366333623261396538623737323732653730623265623031333562 -31663964366166633261646163343933666137333738643263333663373365333630326236353263 -66643961313939383736343862303366356161376466323763356162393031353738393065313538 -38623038363065376665313031323636653361333561343536663332616637643131393936346337 -34643639333133366538336539643162303262356239336366316631323431656633653761303266 -66333161633630613533316166633439346137373064363862336664386539316561383464373136 -38303733663164353531663561336137636161333836663963343135326138643363363238376638 -35343233366337653964663635396534373233356235383930316437376363653737386639336636 -31386238323737616139373632663562383734653763333139303239303830363961653961333633 -35336264626634646262663166613331333239623963366133333833656333613837323632313863 -35643733623966613936646636326163363735303733336439353731613062343034626262346661 -35663234663338623361393530626232663561663830636633613431393832373663386238623230 -36653737333563306534653230376239353833653131303035353637323339316235323639366637 -30343335313831376237633932656332306265373530653165653061656261306530653966373132 -64353962626465343639613764333463633365326230336563303231383665393162353034336331 -63333264323264306332323633613163633465376362336466336564303532636465663563663538 -62656632346133653330373737646664386161386264383236336531623931316666343537363466 -64643861643935363433316133633835636166346136363261363735663063343538313766653161 -61613433386165666638633663656235346135353764373132333630353432616433623862306139 -37633066636533326139393033336566666135646132663233303361613833333533666366616437 -39316537353534626330343762623432366239396233333033353238393439323339663339346664 -36386163383466643035643366363639343831613534373466643430623362666638663439373835 -62386662653132643133626463353366366561373338663734363535613838363063366665636637 -34333333316531613931613036383538383333306635646464366463396339313534333638623131 -31663731653535626236623161346561623439356162316537666139343266623138643830363734 -65386136323235616162356439353933353063386661343665663532386532396338353733396663 -33656561653430613832363263306337383334656633376431613135383066333837613165303939 -30636465373735623434323331616539386531386163623265656566623265633238373838633330 -66396639313935623436313733333339623066333838633563643563383233306565376136306632 -31343838346237383362393238373363633237376330316139383638613535643566646464633361 -36343431623165356631383964323561663866656532643439346231393731393838613362666562 -38646237653530623837363165386561663438366663353964333933626136396237616663643566 -36376663363137363835616535623133346136343362373033376562323034656432393064343766 -31666334663263356539346463393232663135313331333435393063333031303063323433663765 -63393734313265306563613630313634333262666334343066343835316461326163646638363961 -36323036386134366232346432393261373631336539653965646431313363613761363433333334 -36303535616135643363333265623236656161373832653835343535373039636563363664656430 -37326631656439363730313831646436333965366232653163336139343763333631396265616562 -38326366396266386663343431306338363033653166663964396631643932396536303536626431 -33396430636130636332346239373536326161396338336536623636363734343832633666323965 -65613735316638663438626237316366643831643764626135366531323835343161316564373764 -65336164656431636632343864376234366139346162663537633465656239643739333265313838 -66363337333966373261336664613666343135663436663632623934363739353932396539353033 -61343161393539386236366562393061336434653535316635373061643832366364643230623436 -64653730303934386537656663366535666131323737323534323531313135316438393838373063 -32383336636333393763643339613939383332646139656564613164353264643236363834373966 -62613532376635643162323834636364363233653437336563393062326137666132343831656434 -34616235366561343766376236376165616630643332363639613866663066326339636164303232 -30376363383431363233363738306230303735663933323530363664376136306236346362323332 -31306365653731373135316439323366666639663765653630613330383635333139383336333634 -34363933636532306433646264323031396364376432323537376236643933333566363135613336 -36386462616363313336623233666564653361306563386663623431643536646637366431623261 -65653338376238613761383532376233393631383133396635633033353933336138383064636538 -33366336396564653134663835343964316261336665303664346166633235383533306234626434 -66633137393336336465313833653430333937623635336230323664396334396538366265653861 -37366464396166616461326435656537383162363966306166303765633739636332336533633063 -39326566666433333939646662336534633064303765316338616239626635336566346137663464 -61666564636332336134363331306337373630653962613962646630356538316233623938633266 -34383737373765653934373233626437643839376334636665303738373035366230666162626163 -63383464623534343464396163626665633462333134663561616533373038373932623536363461 -64613736613433643866396166303132633361313837653639646330663034663630363038363664 -63623061323362383338303536303061346635316532366535303835616231333836653330666661 -30313839373161393735313536383734333262666261633862613363393137346137363437363232 -63653538636633353966306436663835656638356332623237393434353235343064333037656235 -36346162636631343139653634346563356635613665656661316163383962353237343534633339 -38386462323162653039393735393661326665386638323934613439353830663632306332656137 -61363233383535356536333761666564643464316436306235613331356134613834666561303161 -34333830333139333733663632303838653037306135633533363865346432343734303837633061 -64616134393636383331613164393465386630353461623764396534326462623866663066353530 -61643736633430616232633933363364303533336338636230643039386530353233316266656436 -66643433316338353262333661356563633266346331393965643561663864653663663533383665 -37323363343861343737633134666530646237313364323165393732393737646465343163666630 -64643536336433303134333238393861323463663436356433353635326134323439366438353134 -65643065396366363964343236663635313866373265663033326363353034323561666336363762 -64626532393537326539636266323162666662383333663363326232333139363536393537333734 -30333032626162613533613165353165356437376230616335643564623034356131666439613262 -64653533386265303866396135616538633661613036623864313165336632643333626264363639 -66643864376236373266613761323038326664373533363931643264623065633835346331623261 -38313664663062663331633338363036613761366130313464666539393933316564303662666661 -66646232353262616636643034343530313835666163373433633833613837633565386164656235 -66343032316136356232623739613135643165653366623162346234353630306365653438376332 -62316536393831383733303735643436653735396236646430643232346535396533643635356332 -39623031393336313635656535653535613933376232323135376165356662353239333638366633 -30646362663362646439643932303030313738386535363262306438333039376133313935326339 -64363663313934353265326638306262373662373636383135303334386136636166386266613535 -64323235383435363761656234393034646531353836626135303863636637613333383137346235 -37613636363438373830623039623236353736373365363038333637656265383135656164353731 -62323935346535343535333863616363383766333937636464376331306239636563343938303534 -39336337646137363135383134393163306637623964646339663366646130623539303735303833 -36396135316432356534356365316235323437353331346464663739343561353536623031643338 -32613131366235633434373034613766626463623530613032663839336366383335623763656666 -64613634383364643232316166653333356566356232646662666234363635643538653364316565 -63626531376566313933636635653231636438653033346563613964616437366339353131373961 -38656535616332656462626361363364613034623633636138343231643062653936316637333838 -32303131623034343233373336306635663038343234626561376264303635383338663734356237 -62393634633565653331363462346664663434353461623965323838666231666335313031323864 -65353364623330613131366539306564303061383134316362623665666636613936306135386363 -32636536356235323266643961643534653331663361636665353031323464376639356130363765 -63343262316661393931343336363437373336356163663835636366653364323537346532643661 -34666531313064353537666533303837663237313635633934653036353966323765646435626336 -61653338326161333035353631663239366335353239303737616137313364306265326134663037 -31636465623039616361646332303962663937633039666337393762393532313166323633633539 -33666236336133326630323766626533373035316330303262643264633839363337316161383439 -33613165363964356130663963393961626438383531613163663830613835333038336339366465 -36653461306166653633353738393666396261353538393834393637326636616439343131636536 -35653234633566653563383738653538363635316239633736386563393865623264316266373863 -34623235626132336165373134336438653032633534623639663864383438326437386238613062 -39643330633430336435643361643664336330303466333539306361386362366265623734633830 -62663565626366396533643130363662373830623164633536313665656230373830343036633237 -62343332616364653930383766396336386165383133373431623665653038643931313536643732 -34353831323038653963623533336465356337653130333264396231613235303961323230636534 -38623935653833366264316535663133623632363130646136643730373338613230336532343633 -35376463303936346562306161616231623236653164326261323164623735303834363266316537 -36353161613864633131666663646266663463306562646331656563346435386164363132366637 -35316132616661353637303265303137643863366537626533313264656166383461633066336437 -37323732653533643165393931616465626230626663643933313737396537316165326230653463 -61653166396165623464643438626238646630303865313330646234343635623365646665333437 -35333333346338303733306639393533346166653565333362316536356235616162333234633737 -36613030646365666363373063373564656337663837663039643333363365326161326537626335 -65393136306161396166346239323337393232323235373535643765323932353563313631643863 -31613465333439376665363664643433653539666533323531636437356330656361616637376231 -66353139373864636534333966613263613039653832343464313466633235393631323161336330 -66366266616365386538633130333034396138396162663733393836656137336337613062393837 -66323661666137333335393939626232663334333035623434356663336135643837363433306535 -31633564363130336639666538343038323834646536663332306336383864306165373033393563 -33623135333561666265666439353666343437393833613637393634663330656562653631343035 -32336666393131363334323637303939663133613261353965393934633933613534303438333538 -65353930303864646337383237396133346136336136353131323461323262343730323334343035 -62653766366136303338343964643961373532636630353333343032376631353165633438356239 -36323365663366653630323364646465373861643637316538396433333463633934636162643562 -39366532666434313439383864656166323233353763383935333964313438333630636364363366 -39383261623864363633323666663033366564363664356231663032653639623362663061656632 -33373562663932346534393631376663666231303238303232363532663536663630636363366639 -62326631613034366266633834383966613632656664323965393631323665623831343437356363 -32313666633164386232643538663238323932336638396136386238313663313433343031353934 -36353238636539326337303161663135616433633764666462393662313662633466303335633866 -35313637336232353236616139306130326263313336326664313934626561313633346530353134 -35303765366233653635633034633764613861316533633437623261383633373261356135313731 -66316565666134356263393761303533623862613138333134383566326134656435346537353037 -33666635373233323430346565353937396237376232303561356237353632313835326535376631 -30636566386239643036353133393165363939626235323366393431363363303164353261303939 -34633135646132323234383766346263613934393434366535373634376139366233366134366433 -38363738396539393434663361346130383331646565306362343266323131303538323933313430 -64316134653634323962353136353661376466656566383630653963353831363038326535323165 -64383962343563306566613837653432363366313433646631303537316339623162363563373332 -65616239316135333464643730373061616162653833346131633033313633303539636262613763 -65633561623432316435373061633335616530353963313164313535366163623861613464623237 -32343663323636643933663539393538313765623939643331396166333836653730656236663536 -65303961396161386261386630363833633634613431656565326331333136323437326137356263 -34316362376238626333393136346437626535643639393937633532336461333237353765633966 -30666339656661336638376435373561346134383638363566373661333437646362386262646538 -61383232633337336438303761376666336338393133383034343139376264306330333135323030 -61376235663738636435643966306331366433316530396666353365646366316539323038613439 -35656434623163323661376130383061393038633532386563393465643834626630346132323461 -35633966623064623336376665343437613031616237613066336331326339646535363761346163 -37303533336561366133653633366263383132326438326632646661636333383436626535376264 -34363830646664653133363539666534366666653138346235623338363365373263663439396563 -36386331626665653662643164363566656239633564636633396562393037326663356266356339 -38653239616531376664643165633634396533643732613038313361356535616461373235623961 -36376132643932393130663061343366383436666437336366363562373639373465303537313166 -37346265653166306231313635653962363761303733626133633862356161316134326166346362 -32646633363964353937353730623938353061346364373235306132326532616634366330643631 -37353337306261343462373332343133323136363432616165356631356566656134313432363639 -31623066396466383465303262343265623235313261636163376238343861333132356339383663 -36383232383239656635386566666663323762323062636138656265353736323638393933616235 -63346165663930333065653066366532343332366262323662346565333332343532313563393438 -32626231343537313632303137376364626163666462326266646337303262303530323237613365 -38666231646237626238653038363135356531383132366635653163326537633630643063393661 -32323930366436336432633864646565633236616162303439343731306139386463396231313136 -61636434336364303230373432636233343131376163363138666538663763343330646330646465 -66393263313661396266623862393037396330666533643738623966336431633935373863306566 -63356430333232636339376662363463653631323162646666393262363930613166643334313537 -62313463393961336663363338353436366632386461313135653364643937616435363162636235 -39643231333363383531666131313439333331366264656362333439663264396636333263306363 -33363434353331656666363966396135323065363564393835646663643631346530353565326332 -34656431333936663163643238353565326537643839643336653535323432613536633737346332 -66346634613663366630336533633239613238306537376166326231363439333462643534343035 -63643666313765333465333164313332633664383163636238363966363039363662313831353733 -64373435666136303337653333353066643731363433656536666630313464643465313239623462 -39323930343461323037343064653666653738396631613030393034333032666231633936343732 -38396530313734303135303063613765663766303662373562663566303431633937643938313430 -38633061313337383438326134346665303561386431623334616166633036383063323137633239 -35373561353163666262306630353061613861353633616535636236653831373231386337386136 -62303631313538613330353635656562626362663032383236633233343431653237633034316264 -61353839623937366339353865343935313062623965386433633932356466346661393639663135 -65653938363661356562666663326234376330626161663161376135363565663535373562383231 -61333733333365663130313264396130316336656332343934353564653365353863366661666362 -34376161613464653461613830373061323330646130376631363235353935323835643461333065 -36386264653132316364646230313334353639656134396163393136316332613434313536376338 -65383839363432363835653131363963313965346231653137383937623464303439663533636539 -38623430653339353731393764616636376537666366653763346337623535393961313232376434 -36636236303262363737336433653362386633303135336465653764326662646338613537353931 -34336363393737313462646564663761383366316663303530643332326135333962616264643830 -32353162346239636665356339353436333232396635613138303065366534323261623736373633 -38623331663238336661333938383661323939363537356562323533373330336335343063613133 -63373162643738346566303732303531303530316230623432366532633234366262646234303837 -61373733353535343037326164373865313633656238373938396264663537656566643136633535 -65353634333765386562316138633531616437396163366630303931346434336230626138643234 -31666637373464633565326131666234663633376639393662373630383630393336356333366162 -65323630373230313439336565633465363361333661346262313037396131363535633637633530 -38396632393061623534333935366235356136643264363439383731633730306637623437316333 -39383936653031326532656661303361306232393134663231336263313939333233393832666134 -32363931323034366333643066383765386361666266623237623932666532633564323832666264 -39623364626331643063333930666166393533656263653436336265353433303761333861626566 -36633362333331663865366334353730636132643038346661333561363835393031356638393134 -38366565346430383065343532643331303831323566393138653135383338663439393662306563 -34353737376439633837353033626332346632396331643432306339366235616332316634353162 -61323162656666353666623333633238663933646132363338353365336632363937636532666264 -61323838323333353564373635633164383031663434326638653130346334303236326363343435 -35306664333233303965353166346131343136313966366232326535376435346534616431623337 -32353065323638336665613630306232666462613033633032633130633566396266396532393261 -36383831373733353633633963636161646130633763633034356137383038656461343139623430 -31653066386536333633323263666237316461626534623465636536393664643936366434646438 -36333933646263346534316539666132636664383365653939636630333435626532313366356630 -30663035356164376262373036633132636533373065326163313266333262666265616666326132 -36616530316530666639396330373935326438353733386235386664363465343232613236336130 -38333264323462386662393764333364386564303331356534373863343534356433383337353135 -33353961363034363865323331646532333838303135616464616337363935336236333964643632 -63643630343731323331393539613733363033303832323362343761313963366561306464346432 -63313332653037353365323631313230383132333736306338353239346162363931653163313932 -62613333396131323732646161303036623033333763383731306133656237343039313034353030 -34373538376162656266333231336365356562353766386261323566643962623133336465646337 -61373535643133373434633165383538333339346635383735643061343262643535633435396338 -62616234646534396339313636646464386366653235633861373730643361363938376631653563 -39613431343964393933373034363365653239643230363338623234666534343332303236373231 -34313833346263613832326562376563326461333861366139363638306432316438643164623234 -35383338376264306434363739383733313838663964333261333939383364343538396333313136 -63396536613135646235343966303634636636326236356634343930386631633663343134663739 -32313164323539343737663263636365663463313063623139363363383965656333353931623632 -37346161616233396534636563646436363033353839666635343532663965653663653061323934 -30663561353263393634376361373066386530323765343161646364303835666662306562393233 -31393235643536623433646136393732306538646330306163623835313135613762363933643037 -35303666336237373565323262376461393436326665636261323639386262366634336661313565 -39306331396364613939636164626532656438373862303838623438303064623739383639323637 -37386131663465343137383832363737303934633432353438343035623938326435663763656163 -32636337303366333865316131643135363833333562386562633365303266623861306266626330 -64373531346263316364353231383230393737346463303939336163386634313032313733633530 -66616534613237653436643363323237396631393339646534393533316334336364626662663038 -36386438653165383161626230393532656463663238643566303166656238393638343664643163 -62306634633364663166333761386434386635323034306531353562386164633137306462313339 -63333166643136383335346130383436376361373765636438663735393830306631333539343439 -63346464336564313434313538646438393865376562613733393739343239313864666635643832 -34616136613161643933343361633037613266333933363339363130363566623739636532386263 -64383331616161663561613830376430366663303931653534666539663165643061343339383138 -64336261333731393063316162313832633765653665633839613330343062316330623831353331 -62646333373166303538366439663535356661373632636539653333646239663630316138653161 -39376534373862336264393634303339313166383632613564616633396463653731623433323637 -63653433393531376639363037313963366231623161343239643538616534353437653137623738 -39323563633038386462323862636261383031663935353934323563663764343532323338393063 -61323165336530656366316533333432356331316534663131333239373432383830656561393836 -65383263356631323337363963346634633537353131386537303635623834653661393538343366 -65303466373132666536396261636361316365653561633731613539393630323063633761393538 -30356262653562666562643662383430346635326433316138663734303838383635616565326537 -36326330306630313430383538366165643337306262663166306462366139643438323932616635 -64303533373066376263356533376163376339316564316163313335343835663238316337306461 -35393765626338373032306663333337616130326439306164353132666331646635343039653732 -32653662353761656664366335353033643436376231373439323335646562373837306236323635 -39666134306365393762633766313538383635393864353835363366313562343537353163396337 -35376638303361323463313366386162626533323135313934343730396134336365613938643139 -66363435353838666464653833376636333961636235303433656463636132396266326339653566 -31383865323339323962333733323062323264626239653665346232346539363539353539333230 -65653137383831323539356163623465313964653964663234636433396631333165643134383435 -31353132346434393635653833313236393831396664386566613032386534343537306563636631 -36353861663530313534643962366537336139633436323136636530623165303865666435383065 -31653665353833366134386132363162396330353465373462333263393537653839323563373838 -35613166313537353565323766323864656361303165653737356264633634656235666331653634 -63636138656530656264333462613962633434656134353662373165666530623363623834633632 -62313434626131313362333430643432336564613130633366643330346533366633353237666233 -33353137383236383362653361623732356330333833316631343137666164396538323034323165 -66633838326665346531306534613237643938643866303034363137303664366665343634303237 -63646534626338326632303264313737636236393237643935396134656661326435363133653566 -64643562343235326432303532646665363431393063626664626335303438633639323635363766 -32343662343664313139333565326365333630323332646262316535613262353236363537633961 -37306137326139353337396466643932623539326331323736393038373261656665393732353134 -66303065666137336563333164396464653038303530326662613635383563623766353365393162 -31646635303632626233303131303237313438633462376262666463326430323031323165623933 -62613965656661343563383066343530333564626438326262323265326363656530643362326434 -39663337626137333533346434313465393432653266313835343663393936396162356533313034 -34313932363632623363363763376338303131656161326637666436333237633061313537623639 -65333637666432646231343538633865343239613434343839616563656261633562373066643364 -31633166643263393636346539303037666165343131656363633465653566323461623234386130 -62633164333830303633353464613637333031633630386163333531396534376530663330616234 -34356237313430646565346663636138363635623635346561353961316531363038663961343536 -61386532363064396663636236303938393166666439386638633933383633383561663763393062 -61646465326532336236303833353361353638653363376338316163653061616137613864626635 -61636135623139333434336537356663653137336464346565633161666132363562613732313166 -34663964633437393932613534336665366361656535333530613262653564623433393437353835 -32343831323932353163336364343230333962393165666262313736633234643661313837303965 -61623061316462316636366166656634353462343063343064616136643537386562336362373532 -64653631333634616566383637326161663935646266306563313339313339383138633139613136 -66623939666631343466383935613766646631393962633963336263383635383034333761366133 -63333234313731393837616635343634663161393634656165353535323765663331623266343937 -39303562383936323163633165666437383065336631333264646662333464303631386137306531 -66386339663739303230303531616439666137633961623666383935623230353334356432366338 -62633965613539373732653439313334643533383033323837613165653262396462343937626133 -65646432336630613736636233336136633562386233313631306231303132383632386533303734 -64306466323533656632313133633361316163386338303336646130653734343562323362653861 -31383261373432346266386235666261383733346464396163396466333331353634633062343738 -31396438643738303530383131666134366662646164343866383138346465653362663137376262 -35313838663334646235643861636335393038633431643565363632623966633463386532323939 -65393135323930303362373134313266356436323838326665346166346633333936376131313430 -30323361383865343530383536333164313530626363373335353166653066393831383134306464 -62653538373130316266396261356639666436343562383639353839633336613666616366666431 -63346161636134346433623439313635653831353531353536383439383037353534613465626532 -34373538633838646530663764666532643865623334366366323131343032643266376436663231 -37616363363339363734373165353864303365343633636466623734373736633963303839636632 -62663139616137393334346661353438623236326561626639383635343636656131396164343466 -38616233353038316139303739333461666337393631383834613938653166613766623034653839 -64666265383539303163373539616631323733356134663839643162303964633337656564346265 -62396532323139323166383135373637633639316432373738313666386230336133353737626331 -32373532333437343262636135623632636335653632623735306263393562613866653561316131 -65663133396161613131653738643039316533333739636437323966643936346336366365633963 -66333538643737383238343866623235626434346637633164646138336566636535613961666132 -38383932653861613036303562666531383039363031636336663063333662653733323130633966 -39373262363632343438343239666433366534363530333262326666663434373533646635356533 -61613935326664383634623530343636626135336637633837343138313861343462633438326362 -66353938383432326238316131663933326136633731326465346633353962613064323663353134 -32336436646162643934313138643037643333663835646464643863626134663963616230326535 -66323434323536616639633963393537623239613664633130343738663663336538343037386435 -61666332306161663334383736636638386237643230343433313830353734363238326334663266 -63353333666537626139306335323964633635303638356265396265386636613539393561653730 -33323265633035643364636365623566643739323634656461613063643639306539323634343261 -66326333666136306164643166336235313134373035346665653133623239373763653938626365 -32643162313662623935396363633236386561386531376365616662646332376235663334303561 -34653861303630623266333035613631643738353936623636393839343539323334386431396437 -38643338323963363964363332343731643365313835383961313637333038643738653366353663 -30343062303632663562303134326463333636313066343233333132353266313766343734373138 -61396561396635346539333164383964653539326465613362663836636333613462333731346437 -37656162636331363536636433313534613038383130616164623866653436323836323232393862 -66343266633231653734643630303437396134396631366336626663346662313861356362323866 -31646563323066353961366134336339356638363239363138386662376234663764353761396361 -62316434323564373338383464323265303866303561336133376239343636626665663561613366 -61656463643564336437343136646635386533663062623066323664326561643938663330313064 -36323361383230613263653735336361393532303664653332613663613830393864643830666633 -62633737303332623039613838323063343932386136343966663437313163623938656663366236 -36356364323936363864313237353861613962613862396365386339663562623365656132666463 -30666535333930386236323939343563633362333636393334343231663734663965333434336331 -35663138363264323438376138363630643062356631343437303662313864663030613534386334 -62326462316331626230313261633533373964633766643631313736383964393864343961636439 -65633064313938346562376132326362396337353435323362626665383331336631653033333132 -33313832663934326435313162393865623331346132646433646564356131663536356166376132 -61316138373134646236356261316535326135393131306533313861636436663036656530363265 -38393136303263313238356161303830326435336666383133373430653631623063366336326666 -36306161363337303532653637323264356665326130333832303533393463393531323737643362 -62303530646538646566616164336334323239313135353237303263386162363238653964633936 -35393264306635363933646537303462346234656631613261356666653439643164663232373061 -64313132656630353432643231376664376164306163373234326635613339343833633365373331 -66376134383062373461306537386530386431323261663261663939303866343832656433633937 -36616563383133346231376237363431386338363762646534653362393937363564303566356161 -36363331383932383736356561626234383662356461393939643832633365333230626461343735 -39393939316235343764376666356363616335633937346262633735656539343431373736346163 -39646634326463373738323133643232316433373831306637336437353033613836343431633063 -63386565393630616532313038386434633066343764313963316262323236323336316536313362 -34396262303539303837623335313934633130663730326364623935323835663061393134363637 -64313065326239336166313735343962653930656332626364396536396461653537393662386435 -30333638316334373235623337666266376439336163396533373231623535373761666535633933 -63616230383835386463616133306633336262646365396631653230303062653962343530353066 -64326538636234623530313539333834346239626263396365353766363639626537313966663836 -63656437303863346266356561613562663134306465623135626361643736616663646330353231 -34356464393535653163396264366164353435623031646562383263636132363533 From 4d0dd635645d46b3583296c3946f04ff0297dd7f Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Wed, 3 Jan 2018 15:51:04 +0530 Subject: [PATCH 32/41] Issue #24 chore:Lable changes for username field --- .../ansible/artifacts/sunbird/messages/messages_en.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keycloak/scripts/ansible/artifacts/sunbird/messages/messages_en.properties b/keycloak/scripts/ansible/artifacts/sunbird/messages/messages_en.properties index ea9fa528..f7864409 100644 --- a/keycloak/scripts/ansible/artifacts/sunbird/messages/messages_en.properties +++ b/keycloak/scripts/ansible/artifacts/sunbird/messages/messages_en.properties @@ -44,8 +44,8 @@ recaptchaNotConfigured=Recaptcha is required, but not configured consentDenied=Consent denied. noAccount=New user? -username=Username -usernameOrEmail=Username or email +username=Username or phone +usernameOrEmail=Username or email or phone firstName=First name givenName=Given name fullName=Full name From fab77b102565bf73bda1d8b2323eadcb7812f4b3 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Wed, 7 Feb 2018 17:00:03 +0530 Subject: [PATCH 33/41] Issue #24 chore:Sunbird auth package build --- keycloak/scripts/ansible/roles/keycloak/tasks/deploy.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/deploy.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy.yml index e0a187ec..5474887d 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/deploy.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy.yml @@ -1,9 +1,14 @@ +- stat: + path: /etc/init.d/keycloak + register: keycloak_service + - name: status service become: yes command: /etc/init.d/keycloak status register: keycloak poll: 5 async: 10 + when: keycloak_service.stat.islnk is defined - name: stop service become: yes @@ -12,6 +17,7 @@ poll: 5 async: 10 ignore_errors: yes + when: keycloak_service.stat.islnk is defined - name: remove keycloak become: yes @@ -37,8 +43,8 @@ file: path=/opt/sunbird_auth_{{sunbird_auth_version}} state=absent - name: Create management user - command: "{{ wildfly_dir }}/bin/add-user-keycloak.sh -r master -u {{ keycloak_management_user }} -p {{ keycloak_management_password }}" become_user: "{{ wildfly_user }}" + command: "{{ wildfly_dir }}/bin/add-user-keycloak.sh -r master -u {{ keycloak_management_user }} -p {{ keycloak_management_password }}" when: keycloak_management_user is defined and keycloak_management_password is defined ignore_errors: yes @@ -48,3 +54,4 @@ command: /etc/init.d/keycloak start poll: 5 async: 5 + when: keycloak_service.stat.islnk is defined From 545b895bff906733c9f0a41dc3f42d7a2c338639 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Wed, 7 Feb 2018 17:17:28 +0530 Subject: [PATCH 34/41] Issue #24 chore:Sunbird auth package build --- keycloak/scripts/ansible/artifacts/sunbird/login.ftl | 10 +++++----- .../artifacts/sunbird/messages/messages_en.properties | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/keycloak/scripts/ansible/artifacts/sunbird/login.ftl b/keycloak/scripts/ansible/artifacts/sunbird/login.ftl index 7ef2ec3b..5d277c4e 100644 --- a/keycloak/scripts/ansible/artifacts/sunbird/login.ftl +++ b/keycloak/scripts/ansible/artifacts/sunbird/login.ftl @@ -20,7 +20,7 @@

- -
+
+
@@ -69,4 +69,4 @@ - \ No newline at end of file + diff --git a/keycloak/scripts/ansible/artifacts/sunbird/messages/messages_en.properties b/keycloak/scripts/ansible/artifacts/sunbird/messages/messages_en.properties index f7864409..e76fcab2 100644 --- a/keycloak/scripts/ansible/artifacts/sunbird/messages/messages_en.properties +++ b/keycloak/scripts/ansible/artifacts/sunbird/messages/messages_en.properties @@ -45,7 +45,7 @@ consentDenied=Consent denied. noAccount=New user? username=Username or phone -usernameOrEmail=Username or email or phone +usernameOrEmailOrPhone=Username or email or phone firstName=First name givenName=Given name fullName=Full name From deca9d37df5944608f5929912fe69c5982013b5b Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Fri, 16 Feb 2018 15:38:20 +0530 Subject: [PATCH 35/41] Issue #24 chore: Sunbird auth package build --- keycloak/scripts/ansible/roles/keycloak/tasks/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/deploy.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy.yml index 5474887d..414e3349 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/deploy.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/deploy.yml @@ -42,7 +42,7 @@ become: yes file: path=/opt/sunbird_auth_{{sunbird_auth_version}} state=absent -- name: Create management user +- name: Create admin user become_user: "{{ wildfly_user }}" command: "{{ wildfly_dir }}/bin/add-user-keycloak.sh -r master -u {{ keycloak_management_user }} -p {{ keycloak_management_password }}" when: keycloak_management_user is defined and From 7f126886f01baa7dc68dea9f2c2bd9831aab52c3 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Wed, 21 Feb 2018 15:16:03 +0530 Subject: [PATCH 36/41] Issue #SB-1306 fix: Login Page-Username or email or phone label should get updated with Username or email or phone number --- .../sunbird/messages/messages_en.properties | 2 +- .../ansible/roles/keycloak/tasks/provision.yml | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 keycloak/scripts/ansible/roles/keycloak/tasks/provision.yml diff --git a/keycloak/scripts/ansible/artifacts/sunbird/messages/messages_en.properties b/keycloak/scripts/ansible/artifacts/sunbird/messages/messages_en.properties index e76fcab2..eb94682c 100644 --- a/keycloak/scripts/ansible/artifacts/sunbird/messages/messages_en.properties +++ b/keycloak/scripts/ansible/artifacts/sunbird/messages/messages_en.properties @@ -45,7 +45,7 @@ consentDenied=Consent denied. noAccount=New user? username=Username or phone -usernameOrEmailOrPhone=Username or email or phone +usernameOrEmailOrPhone=Username or email or phone number firstName=First name givenName=Given name fullName=Full name diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/provision.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/provision.yml new file mode 100644 index 00000000..49a723bb --- /dev/null +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/provision.yml @@ -0,0 +1,12 @@ +--- +- name: Add group + group: name="{{ wildfly_group }}" state=present + become: true + +- name: Create user + user: name="{{ wildfly_user }}" group="{{ wildfly_group }}" shell=/bin/bash createhome=yes update_password=always + become: true + +- name: Copy service file to init.d + template: src=keycloak-service.j2 dest=/etc/init.d/keycloak mode=0755 + From a56fb99c9fb19be2f6b0de09cbaaaa21b7df5819 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Wed, 21 Feb 2018 17:55:12 +0530 Subject: [PATCH 37/41] Issue #28 chore:Show time in hour in password reset email- Overridden email theme --- .../sunbird/email/html/email-test.ftl | 5 ++++ .../sunbird/email/html/email-verification.ftl | 5 ++++ .../sunbird/email/html/event-login_error.ftl | 5 ++++ .../sunbird/email/html/event-remove_totp.ftl | 5 ++++ .../email/html/event-update_password.ftl | 5 ++++ .../sunbird/email/html/event-update_totp.ftl | 5 ++++ .../sunbird/email/html/executeActions.ftl | 5 ++++ .../email/html/identity-provider-link.ftl | 5 ++++ .../sunbird/email/html/password-reset.ftl | 5 ++++ .../email/messages/messages_ca.properties | 21 ++++++++++++++ .../email/messages/messages_de.properties | 24 ++++++++++++++++ .../email/messages/messages_en.properties | 27 ++++++++++++++++++ .../email/messages/messages_es.properties | 21 ++++++++++++++ .../email/messages/messages_fr.properties | 21 ++++++++++++++ .../email/messages/messages_it.properties | 24 ++++++++++++++++ .../email/messages/messages_ja.properties | 25 ++++++++++++++++ .../email/messages/messages_lt.properties | 24 ++++++++++++++++ .../email/messages/messages_no.properties | 24 ++++++++++++++++ .../email/messages/messages_pt_BR.properties | 19 ++++++++++++ .../email/messages/messages_ru.properties | 25 ++++++++++++++++ .../email/messages/messages_sv.properties | 25 ++++++++++++++++ .../sunbird/email/text/email-test.ftl | 1 + .../sunbird/email/text/email-verification.ftl | 1 + .../sunbird/email/text/event-login_error.ftl | 1 + .../sunbird/email/text/event-remove_totp.ftl | 1 + .../email/text/event-update_password.ftl | 1 + .../sunbird/email/text/event-update_totp.ftl | 1 + .../sunbird/email/text/executeActions.ftl | 1 + .../email/text/identity-provider-link.ftl | 1 + .../sunbird/email/text/password-reset.ftl | 1 + .../artifacts/sunbird/email/theme.properties | 1 + .../{ => login}/login-reset-password.ftl | 0 .../{ => login}/login-update-password.ftl | 0 .../artifacts/sunbird/{ => login}/login.ftl | 0 .../messages/messages_en.properties | 0 .../{ => login}/resources/css/login.css | 0 .../resources/css/semantic.min.css | 0 .../{ => login}/resources/css/styles.css | 0 .../{ => login}/resources/img/bkgrnd.png | Bin .../{ => login}/resources/img/logo.png | Bin .../sunbird/{ => login}/theme.properties | 0 41 files changed, 335 insertions(+) create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/html/email-test.ftl create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/html/email-verification.ftl create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/html/event-login_error.ftl create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/html/event-remove_totp.ftl create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/html/event-update_password.ftl create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/html/event-update_totp.ftl create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/html/executeActions.ftl create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/html/identity-provider-link.ftl create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/html/password-reset.ftl create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_ca.properties create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_de.properties create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_en.properties create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_es.properties create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_fr.properties create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_it.properties create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_ja.properties create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_lt.properties create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_no.properties create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_pt_BR.properties create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_ru.properties create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_sv.properties create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/text/email-test.ftl create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/text/email-verification.ftl create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/text/event-login_error.ftl create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/text/event-remove_totp.ftl create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/text/event-update_password.ftl create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/text/event-update_totp.ftl create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/text/executeActions.ftl create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/text/identity-provider-link.ftl create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/text/password-reset.ftl create mode 100644 keycloak/scripts/ansible/artifacts/sunbird/email/theme.properties rename keycloak/scripts/ansible/artifacts/sunbird/{ => login}/login-reset-password.ftl (100%) rename keycloak/scripts/ansible/artifacts/sunbird/{ => login}/login-update-password.ftl (100%) rename keycloak/scripts/ansible/artifacts/sunbird/{ => login}/login.ftl (100%) rename keycloak/scripts/ansible/artifacts/sunbird/{ => login}/messages/messages_en.properties (100%) rename keycloak/scripts/ansible/artifacts/sunbird/{ => login}/resources/css/login.css (100%) rename keycloak/scripts/ansible/artifacts/sunbird/{ => login}/resources/css/semantic.min.css (100%) rename keycloak/scripts/ansible/artifacts/sunbird/{ => login}/resources/css/styles.css (100%) rename keycloak/scripts/ansible/artifacts/sunbird/{ => login}/resources/img/bkgrnd.png (100%) rename keycloak/scripts/ansible/artifacts/sunbird/{ => login}/resources/img/logo.png (100%) rename keycloak/scripts/ansible/artifacts/sunbird/{ => login}/theme.properties (100%) diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/html/email-test.ftl b/keycloak/scripts/ansible/artifacts/sunbird/email/html/email-test.ftl new file mode 100644 index 00000000..604415d2 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/html/email-test.ftl @@ -0,0 +1,5 @@ + + +${msg("emailTestBodyHtml",realmName)} + + diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/html/email-verification.ftl b/keycloak/scripts/ansible/artifacts/sunbird/email/html/email-verification.ftl new file mode 100644 index 00000000..eb7682a2 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/html/email-verification.ftl @@ -0,0 +1,5 @@ + + +${msg("emailVerificationBodyHtml",link, linkExpiration, realmName)} + + diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/html/event-login_error.ftl b/keycloak/scripts/ansible/artifacts/sunbird/email/html/event-login_error.ftl new file mode 100644 index 00000000..d3141030 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/html/event-login_error.ftl @@ -0,0 +1,5 @@ + + +${msg("eventLoginErrorBodyHtml",event.date,event.ipAddress)} + + diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/html/event-remove_totp.ftl b/keycloak/scripts/ansible/artifacts/sunbird/email/html/event-remove_totp.ftl new file mode 100644 index 00000000..91699ea3 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/html/event-remove_totp.ftl @@ -0,0 +1,5 @@ + + +${msg("eventRemoveTotpBodyHtml",event.date, event.ipAddress)} + + diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/html/event-update_password.ftl b/keycloak/scripts/ansible/artifacts/sunbird/email/html/event-update_password.ftl new file mode 100644 index 00000000..8a6da60a --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/html/event-update_password.ftl @@ -0,0 +1,5 @@ + + +${msg("eventUpdatePasswordBodyHtml",event.date, event.ipAddress)} + + diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/html/event-update_totp.ftl b/keycloak/scripts/ansible/artifacts/sunbird/email/html/event-update_totp.ftl new file mode 100644 index 00000000..c0190c72 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/html/event-update_totp.ftl @@ -0,0 +1,5 @@ + + +${msg("eventUpdateTotpBodyHtml",event.date, event.ipAddress)} + + diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/html/executeActions.ftl b/keycloak/scripts/ansible/artifacts/sunbird/email/html/executeActions.ftl new file mode 100644 index 00000000..f75e10fa --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/html/executeActions.ftl @@ -0,0 +1,5 @@ + + +${msg("executeActionsBodyHtml",link, linkExpiration, realmName)} + + diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/html/identity-provider-link.ftl b/keycloak/scripts/ansible/artifacts/sunbird/email/html/identity-provider-link.ftl new file mode 100644 index 00000000..9c2db808 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/html/identity-provider-link.ftl @@ -0,0 +1,5 @@ + + +${msg("identityProviderLinkBodyHtml", identityProviderAlias, realmName, identityProviderContext.username, link, linkExpiration)} + + \ No newline at end of file diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/html/password-reset.ftl b/keycloak/scripts/ansible/artifacts/sunbird/email/html/password-reset.ftl new file mode 100644 index 00000000..846b45da --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/html/password-reset.ftl @@ -0,0 +1,5 @@ + + +${msg("passwordResetBodyHtml",link, linkExpiration, realmName)} + + \ No newline at end of file diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_ca.properties b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_ca.properties new file mode 100644 index 00000000..7f8504ae --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_ca.properties @@ -0,0 +1,21 @@ +emailVerificationSubject=Verificaci\u00F3 d''email +emailVerificationBody=Alg\u00FA ha creat un compte de {2} amb aquesta adre\u00E7a de correu electr\u00F2nic. Si has estat tu, fes clic a l''enlla\u00E7 seg\u00FCent per verificar la teva adre\u00E7a de correu electr\u00F2nic.\n\n{0}\n\nAquest enlla\u00E7 expirar\u00E0 en {1} minuts.\n\nSi tu no has creat aquest compte, simplement ignora aquest missatge. +emailVerificationBodyHtml=

Alg\u00FA ha creat un compte de {2} amb aquesta adre\u00E7a de correu electr\u00F2nic. Si has estat tu, fes clic a l''enlla\u00E7 seg\u00FCent per verificar la teva adre\u00E7a de correu electr\u00F2nic.

{0}

Aquest enlla\u00E7 expirar\u00E0 en {1} minuts.

Si tu no has creat aquest compte, simplement ignora aquest missatge.

+passwordResetSubject=Reinicia contrasenya +passwordResetBody=Alg\u00FA ha demanat de canviar les credencials del teu compte de {2}. Si has estat tu, fes clic a l''enlla\u00E7 seg\u00FCent per a reiniciar-les.\n\n{0}\n\nAquest enlla\u00E7 expirar\u00E0 en {1} minuts.\n\nSi no vols reiniciar les teves credencials, simplement ignora aquest missatge i no es realitzar\u00E0 cap canvi. +passwordResetBodyHtml=

Alg\u00FA ha demanat de canviar les credencials del teu compte de {2}. Si has estat tu, fes clic a l''enlla\u00E7 seg\u00FCent per a reiniciar-les.

{0}

Aquest enlla\u00E7 expirar\u00E0 en {1} minuts.

Si no vols reiniciar les teves credencials, simplement ignora aquest missatge i no es realitzar\u00E0 cap canvi.

+executeActionsSubject=Actualitza el teu compte +executeActionsBody=L''administrador ha sol\u00B7licitat que actualitzis el teu compte de {2}. Fes clic a l''enlla\u00E7 inferior per iniciar aquest proc\u00E9s.\n\n{0}\n\nAquest enlla\u00E7 expirar\u00E0 en {1} minutes.\n\nSi no est\u00E0s al tant que l''administrador hagi sol\u00B7licitat aix\u00F2, simplement ignora aquest missatge i no es realitzar\u00E0 cap canvi. +executeActionsBodyHtml=

L''administrador ha sol\u00B7licitat que actualitzis el teu compte de {2}. Fes clic a l''enlla\u00E7 inferior per iniciar aquest proc\u00E9s.

{0}

Aquest enlla\u00E7 expirar\u00E0 en {1} minutes.

Si no est\u00E0s al tant que l''administrador hagi sol\u00B7licitat aix\u00F2, simplement ignora aquest missatge i no es realitzar\u00E0 cap canvi.

+eventLoginErrorSubject=Fallada en l''inici de sessi\u00F3 +eventLoginErrorBody=S''ha detectat un intent d''acc\u00E9s fallit al teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador. +eventLoginErrorBodyHtml=

S''ha detectat un intent d''acc\u00E9s fallit al teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador.

+eventRemoveTotpSubject=Esborrat TOTP +eventRemoveTotpBody=TOTP s''ha eliminat del teu compte el {0} des de {1}. Si no has estat tu, per favor contacta amb l''administrador. +eventRemoveTotpBodyHtml=

TOTP s''ha eliminat del teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador. +eventUpdatePasswordSubject=Actualitzaci\u00F3 de contrasenya +eventUpdatePasswordBody=La teva contrasenya s''ha actualitzat el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador. +eventUpdatePasswordBodyHtml=

La teva contrasenya s''ha actualitzat el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador.

+eventUpdateTotpSubject=Actualitzaci\u00F3 de TOTP +eventUpdateTotpBody=TOTP s''ha actualitzat al teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador. +eventUpdateTotpBodyHtml=

TOTP s''ha actualitzat al teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador.

diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_de.properties b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_de.properties new file mode 100644 index 00000000..9068321b --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_de.properties @@ -0,0 +1,24 @@ +emailVerificationSubject=E-Mail verifizieren +emailVerificationBody=Jemand hat ein {2} Konto mit dieser E-Mail Adresse erstellt. Falls Sie das waren, dann klicken Sie auf den Link, um die E-Mail Adresse zu verifizieren.\n\n{0}\n\nDieser Link wird in {1} Minuten ablaufen.\n\nFalls Sie dieses Konto nicht erstellt haben, dann k\u00F6nnen sie diese Nachricht ignorieren. +emailVerificationBodyHtml=

Jemand hat ein {2} Konto mit dieser E-Mail Adresse erstellt. Falls das Sie waren, klicken Sie auf den Link, um die E-Mail Adresse zu verifizieren.

{0}

Dieser Link wird in {1} Minuten ablaufen.

Falls Sie dieses Konto nicht erstellt haben, dann k\u00F6nnen sie diese Nachricht ignorieren.

+identityProviderLinkSubject=Link {0} +identityProviderLinkBody=Es wurde beantragt Ihren Account {1} mit dem Account {0} von Benutzer {2} zu verlinken. Sollten Sie dies beantragt haben, klicken Sie auf den unten stehenden Link.\n\n{3}\n\n Die G\u00FCltigkeit des Links wird in {4} Minuten verfallen.\n\nSollten Sie Ihren Account nicht verlinken wollen, ignorieren Sie diese Nachricht. Wenn Sie die Accounts verlinken wird ein Login auf {1} \u00FCber {0} erm\u00F6glicht. +identityProviderLinkBodyHtml=

Es wurde beantragt Ihren Account {1} mit dem Account {0} von Benutzer {2} zu verlinken. Sollten Sie dies beantragt haben, klicken Sie auf den unten stehenden Link.

Link zur Best\u00E4tigung der Kontoverkn\u00FCpfung

Die G\u00FCltigkeit des Links wird in {4} Minuten verfallen.

Sollten Sie Ihren Account nicht verlinken wollen, ignorieren Sie diese Nachricht. Wenn Sie die Accounts verlinken wird ein Login auf {1} \u00FCber {0} erm\u00F6glicht.

+passwordResetSubject=Passwort zur\u00FCcksetzen +passwordResetBody=Es wurde eine \u00C4nderung der Anmeldeinformationen f\u00FCr Ihren Account {2} angefordert. Wenn Sie diese \u00C4nderung beantragt haben, klicken Sie auf den unten stehenden Link.\n\n{0}\n\nDie G\u00FCltigkeit des Links wird in {1} Minuten verfallen.\n\nSollten Sie keine \u00C4nderung vollziehen wollen k\u00F6nnen Sie diese Nachricht ignorieren und an Ihrem Account wird nichts ge\u00E4ndert. +passwordResetBodyHtml=

Es wurde eine \u00C4nderung der Anmeldeinformationen f\u00FCr Ihren Account {2} angefordert. Wenn Sie diese \u00C4nderung beantragt haben, klicken Sie auf den unten stehenden Link.

Link zum Zur\u00FCcksetzen von Anmeldeinformationen

Die G\u00FCltigkeit des Links wird in {1} Minuten verfallen.

Sollten Sie keine \u00C4nderung vollziehen wollen k\u00F6nnen Sie diese Nachricht ignorieren und an Ihrem Account wird nichts ge\u00E4ndert.

+executeActionsSubject=Aktualisieren Sie Ihr Konto +executeActionsBody=Ihr Administrator hat Sie aufgefordert Ihren Account {2} zu aktualisieren. Klicken Sie auf den unten stehenden Link um den Prozess zu starten.\n\n{0}\n\nDie G\u00FCltigkeit des Links wird in {1} Minuten verfallen.\n\nSollten Sie sich dieser Aufforderung nicht bewusst sein, ignorieren Sie diese Nachricht und Ihr Account bleibt unver\u00E4ndert. +executeActionsBodyHtml=

Ihr Administrator hat Sie aufgefordert Ihren Account {2} zu aktualisieren. Klicken Sie auf den unten stehenden Link um den Prozess zu starten.

Link zum Account-Update

Die G\u00FCltigkeit des Links wird in {1} Minuten verfallen.

Sollten Sie sich dieser Aufforderung nicht bewusst sein, ignorieren Sie diese Nachricht und Ihr Account bleibt unver\u00E4ndert.

+eventLoginErrorSubject=Fehlgeschlagene Anmeldung +eventLoginErrorBody=Jemand hat um {0} von {1} versucht, sich mit ihrem Konto anzumelden. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin. +eventLoginErrorBodyHtml=

Jemand hat um {0} von {1} versucht, sich mit ihrem Konto anzumelden. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.

+eventRemoveTotpSubject=TOTP Entfernt +eventRemoveTotpBody=TOTP wurde von ihrem Konto am {0} von {1} entfernt. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin. +eventRemoveTotpBodyHtml=

TOTP wurde von ihrem Konto am {0} von {1} entfernt. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.

+eventUpdatePasswordSubject=Passwort Aktualisiert +eventUpdatePasswordBody=Ihr Passwort wurde am {0} von {1} ge\u00E4ndert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin. +eventUpdatePasswordBodyHtml=

Ihr Passwort wurde am {0} von {1} ge\u00E4ndert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.

+eventUpdateTotpSubject=TOTP Aktualisiert +eventUpdateTotpBody=TOTP wurde am {0} von {1} ge\u00E4ndert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin. +eventUpdateTotpBodyHtml=

TOTP wurde am {0} von {1} ge\u00E4ndert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.

diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_en.properties b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_en.properties new file mode 100644 index 00000000..8a0ae92b --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_en.properties @@ -0,0 +1,27 @@ +emailVerificationSubject=Verify email +emailVerificationBody=Someone has created a {2} account with this email address. If this was you, click the link below to verify your email address\n\n{0}\n\nThis link will expire within {1} minutes.\n\nIf you didn''t create this account, just ignore this message. +emailVerificationBodyHtml=

Someone has created a {2} account with this email address. If this was you, click the link below to verify your email address

Link to e-mail address verification

This link will expire within {1} minutes.

If you didn''t create this account, just ignore this message.

+emailTestSubject=[KEYCLOAK] - SMTP test message +emailTestBody=This is a test message +emailTestBodyHtml=

This is a test message

+identityProviderLinkSubject=Link {0} +identityProviderLinkBody=Someone wants to link your "{1}" account with "{0}" account of user {2} . If this was you, click the link below to link accounts\n\n{3}\n\nThis link will expire within {4} minutes.\n\nIf you don''t want to link account, just ignore this message. If you link accounts, you will be able to login to {1} through {0}. +identityProviderLinkBodyHtml=

Someone wants to link your {1} account with {0} account of user {2} . If this was you, click the link below to link accounts

Link to confirm account linking

This link will expire within {4} minutes.

If you don''t want to link account, just ignore this message. If you link accounts, you will be able to login to {1} through {0}.

+passwordResetSubject=Reset password +passwordResetBody=Someone just requested to change your {2} account''s credentials. If this was you, click on the link below to reset them.\n\n{0}\n\nThis link and code will expire within {1} minutes.\n\nIf you don''t want to reset your credentials, just ignore this message and nothing will be changed. +passwordResetBodyHtml=

Someone just requested to change your {2} account''s credentials. If this was you, click on the link below to reset them.

Link to reset credentials

This link will expire within {1} minutes.

If you don''t want to reset your credentials, just ignore this message and nothing will be changed.

+executeActionsSubject=Update Your Account +executeActionsBody=Your administrator has just requested that you update your {2} account. Click on the link below to start this process.\n\n{0}\n\nThis link will expire within {1} minutes.\n\nIf you are unaware that your admin has requested this, just ignore this message and nothing will be changed. +executeActionsBodyHtml=

Your administrator has just requested that you update your {2} account. Click on the link below to start this process.

Link to account update

This link will expire within {1} minutes.

If you are unaware that your admin has requested this, just ignore this message and nothing will be changed.

+eventLoginErrorSubject=Login error +eventLoginErrorBody=A failed login attempt was detected to your account on {0} from {1}. If this was not you, please contact an admin. +eventLoginErrorBodyHtml=

A failed login attempt was detected to your account on {0} from {1}. If this was not you, please contact an admin.

+eventRemoveTotpSubject=Remove TOTP +eventRemoveTotpBody=TOTP was removed from your account on {0} from {1}. If this was not you, please contact an admin. +eventRemoveTotpBodyHtml=

TOTP was removed from your account on {0} from {1}. If this was not you, please contact an admin.

+eventUpdatePasswordSubject=Update password +eventUpdatePasswordBody=Your password was changed on {0} from {1}. If this was not you, please contact an admin. +eventUpdatePasswordBodyHtml=

Your password was changed on {0} from {1}. If this was not you, please contact an admin.

+eventUpdateTotpSubject=Update TOTP +eventUpdateTotpBody=TOTP was updated for your account on {0} from {1}. If this was not you, please contact an admin. +eventUpdateTotpBodyHtml=

TOTP was updated for your account on {0} from {1}. If this was not you, please contact an admin.

diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_es.properties b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_es.properties new file mode 100644 index 00000000..16160143 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_es.properties @@ -0,0 +1,21 @@ +emailVerificationSubject=Verificaci\u00F3n de email +emailVerificationBody=Alguien ha creado una cuenta de {2} con esta direcci\u00F3n de email. Si has sido t\u00FA, haz click en el enlace siguiente para verificar tu direcci\u00F3n de email.\n\n{0}\n\nEste enlace expirar\u00E1 en {1} minutos.\n\nSi t\u00FA no has creado esta cuenta, simplemente ignora este mensaje. +emailVerificationBodyHtml=

Alguien ha creado una cuenta de {2} con esta direcci\u00F3n de email. Si has sido t\u00FA, haz click en el enlace siguiente para verificar tu direcci\u00F3n de email.

{0}

Este enlace expirar\u00E1 en {1} minutos.

Si t\u00FA no has creado esta cuenta, simplemente ignora este mensaje.

+passwordResetSubject=Reiniciar contrase\u00F1a +passwordResetBody=Alguien ha solicitado cambiar las credenciales de tu cuenta de {2}. Si has sido t\u00FA, haz clic en el enlace siguiente para reiniciarlas.\n\n{0}\n\nEste enlace expirar\u00E1 en {1} minutos.\n\nSi no quieres reiniciar tus credenciales, simplemente ignora este mensaje y no se realizar\u00E1 ning\u00FAn cambio. +passwordResetBodyHtml=

Alguien ha solicitado cambiar las credenciales de tu cuenta de {2}. Si has sido t\u00FA, haz clic en el enlace siguiente para reiniciarlas.

{0}

Este enlace expirar\u00E1 en {1} minutos.

Si no quieres reiniciar tus credenciales, simplemente ignora este mensaje y no se realizar\u00E1 ning\u00FAn cambio.

+executeActionsSubject=Actualiza tu cuenta +executeActionsBody=El administrador ha solicitado que actualices tu cuenta de {2}. Haz clic en el enlace inferior para iniciar este proceso.\n\n{0}\n\nEste enlace expirar\u00E1 en {1} minutes.\n\nSi no est\u00E1s al tanto de que el administrador haya solicitado esto, simplemente ignora este mensaje y no se realizar\u00E1 ning\u00FAn cambio. +executeActionsBodyHtml=

El administrador ha solicitado que actualices tu cuenta de {2}. Haz clic en el enlace inferior para iniciar este proceso.

{0}

Este enlace expirar\u00E1 en {1} minutes.

Si no est\u00E1s al tanto de que el administrador haya solicitado esto, simplemente ignora este mensaje y no se realizar\u00E1 ning\u00FAn cambio.

+eventLoginErrorSubject=Fallo en el inicio de sesi\u00F3n +eventLoginErrorBody=Se ha detectado un intento de acceso fallido a tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador. +eventLoginErrorBodyHtml=

Se ha detectado un intento de acceso fallido a tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador.

+eventRemoveTotpSubject=Borrado TOTP +eventRemoveTotpBody=TOTP fue eliminado de tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador. +eventRemoveTotpBodyHtml=

TOTP fue eliminado de tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador.

+eventUpdatePasswordSubject=Actualizaci\u00F3n de contrase\u00F1a +eventUpdatePasswordBody=Tu contrase\u00F1a se ha actualizado el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador. +eventUpdatePasswordBodyHtml=

Tu contrase\u00F1a se ha actualizado el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador.

+eventUpdateTotpSubject=Actualizaci\u00F3n de TOTP +eventUpdateTotpBody=TOTP se ha actualizado en tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador. +eventUpdateTotpBodyHtml=

TOTP se ha actualizado en tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador.

diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_fr.properties b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_fr.properties new file mode 100644 index 00000000..3467dec8 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_fr.properties @@ -0,0 +1,21 @@ +emailVerificationSubject=V\u00e9rification du courriel +emailVerificationBody=Quelqu''un vient de cr\u00e9er un compte "{2}" avec votre courriel. Si vous \u00eates \u00e0 l''origine de cette requ\u00eate, veuillez cliquer sur le lien ci-dessous afin de v\u00e9rifier votre adresse de courriel\n\n{0}\n\nCe lien expire dans {1} minute(s).\n\nSinon, veuillez ignorer ce message. +emailVerificationBodyHtml=

Quelqu''un vient de cr\u00e9er un compte "{2}" avec votre courriel. Si vous \u00eates \u00e0 l''origine de cette requ\u00eate, veuillez cliquer sur le lien ci-dessous afin de v\u00e9rifier votre adresse de courriel

{0}

Ce lien expire dans {1} minute(s).

Sinon, veuillez ignorer ce message.

+passwordResetSubject=R\u00e9initialiser le mot de passe +passwordResetBody=Quelqu''un vient de demander une r\u00e9initialisation de mot de passe pour votre compte {2}. Si vous \u00eates \u00e0 l''origine de cette requ\u00eate, veuillez cliquer sur le lien ci-dessous pour le mettre \u00e0 jour.\n\n{0}\n\nCe lien expire dans {1} minute(s).\n\nSinon, veuillez ignorer ce message ; aucun changement ne sera effectu\u00e9 sur votre compte. +passwordResetBodyHtml=

Quelqu''un vient de demander une r\u00e9initialisation de mot de passe pour votre compte {2}. Si vous \u00eates \u00e0 l''origine de cette requ\u00eate, veuillez cliquer sur le lien ci-dessous pour le mettre \u00e0 jour.

{0}

Ce lien expire dans {1} minute(s).

Sinon, veuillez ignorer ce message ; aucun changement ne sera effectu\u00e9 sur votre compte.

+executeActionsSubject=Mettre \u00e0 jour votre compte +executeActionsBody=Votre administrateur vient de demander une mise \u00e0 jour de votre compte {2}. Veuillez cliquer sur le lien ci-dessous afin de commencer le processus.\n\n{0}\n\nCe lien expire dans {1} minute(s).\n\nSi vous n''\u00eates pas \u00e0 l''origine de cette requ\u00eate, veuillez ignorer ce message ; aucun changement ne sera effectu\u00e9 sur votre compte. +executeActionsBodyHtml=

Votre administrateur vient de demander une mise \u00e0 jour de votre compte {2}. Veuillez cliquer sur le lien ci-dessous afin de commencer le processus.

{0}

Ce lien expire dans {1} minute(s).

Si vous n''\u00eates pas \u00e0 l''origine de cette requ\u00eate, veuillez ignorer ce message ; aucun changement ne sera effectu\u00e9 sur votre compte.

+eventLoginErrorSubject=Erreur de connexion +eventLoginErrorBody=Une tentative de connexion a \u00e9t\u00e9 d\u00e9tect\u00e9e sur votre compte {0} depuis {1}. Si vous n''\u00eates pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur. +eventLoginErrorBodyHtml=

Une tentative de connexion a \u00e9t\u00e9 d\u00e9tect\u00e9e sur votre compte {0} depuis {1}. Si vous n''\u00eates pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur.

+eventRemoveTotpSubject=Suppression du TOTP +eventRemoveTotpBody=Le TOTP a \u00e9t\u00e9 supprim\u00e9 de votre compte {0} depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur. +eventRemoveTotpBodyHtml=

Le TOTP a \u00e9t\u00e9 supprim\u00e9 de votre compte {0} depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur.

+eventUpdatePasswordSubject=Mise \u00e0 jour du mot de passe +eventUpdatePasswordBody=Votre mot de passe pour votre compte {0} a \u00e9t\u00e9 modifi\u00e9 depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur. +eventUpdatePasswordBodyHtml=

Votre mot de passe pour votre compte {0} a \u00e9t\u00e9 modifi\u00e9 depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur.

+eventUpdateTotpSubject=Mise \u00e0 jour du TOTP +eventUpdateTotpBody=Le TOTP a \u00e9t\u00e9 mis \u00e0 jour pour votre compte {0} depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur. +eventUpdateTotpBodyHtml=

Le TOTP a \u00e9t\u00e9 mis \u00e0 jour pour votre compte {0} depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur.

diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_it.properties b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_it.properties new file mode 100644 index 00000000..b877b91a --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_it.properties @@ -0,0 +1,24 @@ +emailVerificationSubject=Verifica l''email +emailVerificationBody=Qualcuno ha creato un {2} account con questo indirizzo email. Se sei stato tu, fai clic sul pulsante seguente per verificare il tuo indirizzo email\n\n{0}\n\nQuesto link scadr\u00e0 in {1} minuti.\n\nSe non sei stato tu a creare questo account, ignora questo messaggio. +emailVerificationBodyHtml=

Qualcuno ha creato un {2} account con questo indirizzo email. Se sei stato tu, fai clic sul pulsante seguente per verificare il tuo indirizzo email

{0}

Questo link scadr\u00e0 in {1} minuti.

Se non sei stato tu a creare questo account, ignora questo messaggio.

+identityProviderLinkSubject=Link {0} +identityProviderLinkBody=Qualcuno vuole associare il tuo "{1}" account con "{0}" l''account dell''utente {2} . Se sei stato tu, fai clic sul pulsante seguente per associare gli account\n\n{3}\n\nQuesto link scadr\u00e0 in {4} minuti.\n\nSe non vuoi associare l''account, ignora questo messaggio. Se associ gli account, potrai accedere a {1} attraverso {0}. +identityProviderLinkBodyHtml=

Qualcuno vuole associare il tuo {1} account con {0} l''account dell''utente {2} . Se sei stato tu, fai clic sul pulsante seguente per associare gli account

{3}

Questo link scadr\u00e0 in {4} minuti.

Se non vuoi associare l''account, ignora questo messaggio. Se associ gli account, potrai accedere a {1} attraverso {0}.

+passwordResetSubject=Reimposta la password +passwordResetBody= Qualcuno ha appena richiesto di cambiare le {2} credenziali di accesso al tuo account. Se sei stato tu, fai clic sul pulsante seguente reimpostarle.\n\n{0}\n\nQuesto link e codice scadranno in {1} minuti.\n\nSe non vuoi reimpostare le tue credenziali di accesso, ignora questo messaggio e non verr\u00e0 effettuato nessun cambio. +passwordResetBodyHtml=

Qualcuno ha appena richiesto di cambiare le {2} credenziali di accesso al tuo account. Se sei stato tu, fai clic sul pulsante seguente reimpostarle.

{0}

Questo link scadr\u00e0 in {1} minuti.

Se non vuoi reimpostare le tue credenziali di accesso, ignora questo messaggio e non verr\u00e0 effettuato nessun cambio.

+executeActionsSubject=Aggiorna il tuo account +executeActionsBody=Il tuo amministratore ha appena richiesto un aggiornamento del tuo {2} account. Fai clic sul pulsante seguente per iniziare questo processo.\n\n{0}\n\nQuesto link scadr\u00e0 in {1} minuti.\n\nSe non sei a conoscenza della richiesta del tuo amministratore, ignora questo messaggio e non verr\u00e0 effettuato nessun cambio. +executeActionsBodyHtml=

Il tuo amministratore ha appena richiesto un aggiornamento del tuo {2} account. Fai clic sul pulsante seguente per iniziare questo processo.

{0}

Questo link scadr\u00e0 in {1} minuti.

Se non sei a conoscenza della richiesta del tuo amministratore, ignora questo messaggio e non verr\u00e0 effettuato nessun cambio.

+eventLoginErrorSubject=Errore di accesso +eventLoginErrorBody=\u00c8 stato rilevato un tentativo fallito di accesso al tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore. +eventLoginErrorBodyHtml=

\u00c8 stato rilevato un tentativo fallito di accesso al tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore.

+eventRemoveTotpSubject=Rimuovi TOTP (Password temporanea valida una volta sola) +eventRemoveTotpBody=TOTP (Password temporanea valida una volta sola) \u00e8 stata rimossa dal tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore. +eventRemoveTotpBodyHtml=

TOTP (Password temporanea valida una volta sola) \u00e8 stata rimossa dal tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore.

+eventUpdatePasswordSubject=Aggiornamento password +eventUpdatePasswordBody=La tua password \u00e8 stata cambiata il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore. +eventUpdatePasswordBodyHtml=

La tua password \u00e8 stata cambiata il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore.

+eventUpdateTotpSubject=Aggiornamento TOTP (Password temporanea valida una volta sola) +eventUpdateTotpBody=TOTP (Password temporanea valida una volta sola) \u00e8 stata aggiornata per il tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore. +eventUpdateTotpBodyHtml=

TOTP (Password temporanea valida una volta sola) \u00e8 stata aggiornata per il tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore.

diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_ja.properties b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_ja.properties new file mode 100644 index 00000000..a60ffe3d --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_ja.properties @@ -0,0 +1,25 @@ +# encoding: utf-8 +emailVerificationSubject=Eメールの確認 +emailVerificationBody=このメールアドレスで {2} アカウントが作成されたました。以下のリンクをクリックしてメールアドレスの確認を完了してください。\n\n{0}\n\nこのリンクは {1} 分間だけ有効です。\n\nもしこのアカウントの作成に心当たりがない場合は、このメールを無視してください。 +emailVerificationBodyHtml=

このメールアドレスで {2} アカウントが作成されました。以下のリンクをクリックしてメールアドレスの確認を完了してください。

メールアドレスの確認

このリンクは {1} 分間だけ有効です。

もしこのアカウントの作成に心当たりがない場合は、このメールを無視してください。

+identityProviderLinkSubject=リンク {0} +identityProviderLinkBody=あなたの "{1}" アカウントと {2} ユーザーの "{0}" アカウントのリンクが要求されました。以下のリンクをクリックしてアカウントのリンクを行ってください。\n\n{3}\n\nこのリンクは {4} 分間だけ有効です。\n\nもしアカウントのリンクを行わない場合は、このメッセージを無視してください。アカウントのリンクを行うことで、{0} 経由で {1} にログインすることができるようになります。 +identityProviderLinkBodyHtml=

あなたの {1} アカウントと {2} ユーザーの {0} アカウントのリンクが要求されました。以下のリンクをクリックしてアカウントのリンクを行ってください。

アカウントリンクの確認

このリンクは {4} 分間だけ有効です。

もしアカウントのリンクを行わない場合は、このメッセージを無視してください。アカウントのリンクを行うことで、{0} 経由で {1} にログインすることができるようになります。

+passwordResetSubject=パスワードのリセット +passwordResetBody=あなたの {2} アカウントのパスワードの変更が要求されています。以下のリンクをクリックしてパスワードのリセットを行ってください。\n\n{0}\n\nこのリンクは {1} 分間だけ有効です。\n\nもしパスワードのリセットを行わない場合は、このメッセージを無視してください。何も変更されません。 +passwordResetBodyHtml=

あなたの {2} アカウントのパスワードの変更が要求されています。以下のリンクをクリックしてパスワードのリセットを行ってください。

パスワードのリセット

このリンクは {1} 分間だけ有効です。

もしパスワードのリセットを行わない場合は、このメッセージを無視してください。何も変更されません。

+executeActionsSubject=アカウントの更新 +executeActionsBody=管理者よりあなたの {2} アカウントの更新が要求されています。以下のリンクをクリックしてこのプロセスを開始してください。\n\n{0}\n\nこのリンクは {1} 分間だけ有効です。\n\n管理者からのこの変更要求についてご存知ない場合は、このメッセージを無視してください。何も変更されません。 +executeActionsBodyHtml=

管理者よりあなたの {2} アカウントの更新が要求されています。以下のリンクをクリックしてこのプロセスを開始してください。

アカウントの更新

このリンクは {1} 分間だけ有効です。

管理者からのこの変更要求についてご存知ない場合は、このメッセージを無視してください。何も変更されません。

+eventLoginErrorSubject=ログインエラー +eventLoginErrorBody={0} に {1} からのログイン失敗があなたのアカウントで検出されました。心当たりがない場合は、管理者に連絡してください。 +eventLoginErrorBodyHtml=

{0} に {1} からのログイン失敗があなたのアカウントで検出されました。心当たりがない場合は管理者に連絡してください。

+eventRemoveTotpSubject=TOTPの削除 +eventRemoveTotpBody={0} に {1} からの操作で TOTP が削除されました。心当たりがない場合は、管理者に連絡してください。 +eventRemoveTotpBodyHtml=

{0} に {1} からの操作で TOTP が削除されました。心当たりがない場合は、管理者に連絡してください。

+eventUpdatePasswordSubject=パスワードの更新 +eventUpdatePasswordBody={0} に {1} からの操作であなたのパスワードが変更されました。心当たりがない場合は、管理者に連絡してください。 +eventUpdatePasswordBodyHtml=

{0} に {1} からの操作であなたのパスワードが変更されました。心当たりがない場合は、管理者に連絡してください。

+eventUpdateTotpSubject=TOTPの更新 +eventUpdateTotpBody={0} に {1} からの操作で TOTP が更新されました。心当たりがない場合は、管理者に連絡してください。 +eventUpdateTotpBodyHtml=

{0} に {1} からの操作で TOTP が更新されました。心当たりがない場合は、管理者に連絡してください。

diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_lt.properties b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_lt.properties new file mode 100644 index 00000000..a1b59ade --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_lt.properties @@ -0,0 +1,24 @@ +emailVerificationSubject=El. pa\u0161to patvirtinimas +emailVerificationBody=Paskyra {2} sukurta naudojant \u0161\u012F el. pa\u0161to adres\u0105. Jei tai buvote J\u016Bs, tuomet paspauskite \u017Eemiau esan\u010Di\u0105 nuorod\u0105\n\n{0}\n\n\u0160i nuoroda galioja {1} min.\n\nJei paskyros nek\u016Br\u0117te, tuomet ignuoruokite \u0161\u012F lai\u0161k\u0105. +emailVerificationBodyHtml=

Paskyra {2} sukurta naudojant \u0161\u012F el. pa\u0161to adres\u0105. Jei tao buvote J\u016Bs, tuomet paspauskite \u017Eemiau esan\u010Di\u0105 nuorod\u0105

{0}

\u0160i nuoroda galioja {1} min.

nJei paskyros nek\u016Br\u0117te, tuomet ignuoruokite \u0161\u012F lai\u0161k\u0105.

+identityProviderLinkSubject=S\u0105saja {0} +identityProviderLinkBody=Ka\u017Eas pageidauja susieti J\u016Bs\u0173 "{1}" paskyr\u0105 su "{0}" {2} naudotojo paskyr\u0105. Jei tai buvote J\u016Bs, tuomet paspauskite \u017Eemiau esan\u010Di\u0105 nuorod\u0105 nor\u0117dami susieti paskyras\n\n{3}\n\n\u0160i nuoroda galioja {4} min.\n\nJei paskyr\u0173 susieti nenorite, tuomet ignoruokite \u0161\u012F lai\u0161k\u0105. Jei paskyras susiesite, tuomet prie {1} gal\u0117siste prisijungti per {0}. +identityProviderLinkBodyHtml=

\u017Eas pageidauja susieti J\u016Bs\u0173 {1} paskyr\u0105 su {0} {2} naudotojo paskyr\u0105. Jei tai buvote J\u016Bs, tuomet paspauskite \u017Eemiau esan\u010Di\u0105 nuorod\u0105 nor\u0117dami susieti paskyras

{3}

\u0160i nuoroda galioja {4} min.

Jei paskyr\u0173 susieti nenorite, tuomet ignoruokite \u0161\u012F lai\u0161k\u0105. Jei paskyras susiesite, tuomet prie {1} gal\u0117siste prisijungti per {0}.

+passwordResetSubject=Slapta\u017Eod\u017Eio atk\u016Brimas +passwordResetBody=Ka\u017Ekas pageidauja pakeisti J\u016Bs\u0173 paskyros {2} slapta\u017Eod\u012F. Jei tai buvote J\u016Bs, tuomet paspauskite \u017Eemiau esan\u010Di\u0105 nuorod\u0105 slapta\u017Eod\u017Eio pakeitimui.\n\n{0}\n\n\u0160i nuoroda ir kodas galioja {1} min.\n\nJei nepageidajate keisti slapta\u017Eod\u017Eio, tuomet ignoruokite \u0161\u012F lai\u0161k\u0105 ir niekas nebus pakeista. +passwordResetBodyHtml=

Ka\u017Ekas pageidauja pakeisti J\u016Bs\u0173 paskyros {2} slapta\u017Eod\u012F. Jei tai buvote J\u016Bs, tuomet paspauskite \u017Eemiau esan\u010Di\u0105 nuorod\u0105 slapta\u017Eod\u017Eio pakeitimui.

{0}

\u0160i nuoroda ir kodas galioja {1} min.

Jei nepageidajate keisti slapta\u017Eod\u017Eio, tuomet ignoruokite \u0161\u012F lai\u0161k\u0105 ir niekas nebus pakeista.

+executeActionsSubject=Atnaujinkite savo paskyr\u0105 +executeActionsBody=Sistemos administratorius pageidauja, kad J\u016Bs atnaujintum\u0117te savo {2} paskyr\u0105. Paspauskite \u017Eemiau esan\u010Di\u0105 nuorod\u0105 paskyros duomen\u0173 atnaujinimui.\n\n{0}\n\n\u0160i nuoroda galioja {1} min.\n\nJei J\u016Bs neasate tikri, kad tai administratoriaus pageidavimas, tuomet ignoruokite \u0161\u012F lai\u0161k\u0105 ir niekas nebus pakeista. +executeActionsBodyHtml=

Sistemos administratorius pageidauja, kad J\u016Bs atnaujintum\u0117te savo {2} paskyr\u0105. Paspauskite \u017Eemiau esan\u010Di\u0105 nuorod\u0105 paskyros duomen\u0173 atnaujinimui.

{0}

\u0160i nuoroda galioja {1} min.

Jei J\u016Bs neasate tikri, kad tai administratoriaus pageidavimas, tuomet ignoruokite \u0161\u012F lai\u0161k\u0105 ir niekas nebus pakeista.

+eventLoginErrorSubject=Nes\u0117kmingas bandymas prisijungti prie j\u016Bs\u0173 paskyros +eventLoginErrorBody=Bandymas prisijungti prie j\u016Bs\u0173 paskyros {0} i\u0161 {1} nes\u0117kmingas. Jei tai nebuvote j\u016Bs, tuomet susisiekite su administratoriumi +eventLoginErrorBodyHtml=

Bandymas prisijungti prie j\u016Bs\u0173 paskyros {0} i\u0161 {1} nes\u0117kmingas. Jei tai nebuvote j\u016Bs, tuomet susisiekite su administratoriumi

+eventRemoveTotpSubject=TOTP pa\u0161alinimas +eventRemoveTotpBody=Ka\u017Ekas pageidauja atsieti TOPT J\u016Bs\u0173 {1} paskyroje su {0}. Jei tai nebuvote J\u016Bs, tuomet susisiekite su administratoriumi +eventRemoveTotpBodyHtml=

Ka\u017Ekas pageidauja atsieti TOPT J\u016Bs\u0173 {1} paskyroje su {0}. Jei tai nebuvote J\u016Bs, tuomet susisiekite su administratoriumi

+eventUpdatePasswordSubject=Slapta\u017Eod\u017Eio atnaujinimas +eventUpdatePasswordBody={1} paskyroje {0} pakeisas j\u016Bs\u0173 slapta\u017Eodis. Jei J\u016Bs nekeit\u0117te, tuomet susisiekite su administratoriumi +eventUpdatePasswordBodyHtml=

{1} paskyroje {0} pakeisas j\u016Bs\u0173 slapta\u017Eodis. Jei J\u016Bs nekeit\u0117te, tuomet susisiekite su administratoriumi

+eventUpdateTotpSubject=TOTP atnaujinimas +eventUpdateTotpBody=TOTP J\u016Bs\u0173 {1} paskyroje su {0} buvo atnaujintas. Jei tai nebuvote J\u016Bs, tuomet susisiekite su administratoriumi +eventUpdateTotpBodyHtml=

TOTP J\u016Bs\u0173 {1} paskyroje su {0} buvo atnaujintas. Jei tai nebuvote J\u016Bs, tuomet susisiekite su administratoriumi

\ No newline at end of file diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_no.properties b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_no.properties new file mode 100644 index 00000000..32334e9d --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_no.properties @@ -0,0 +1,24 @@ +emailVerificationSubject=Bekreft e-postadresse +emailVerificationBody=Noen har opprettet en {2} konto med denne e-postadressen. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 bekrefte e-postadressen din\n\n{0}\n\nDenne lenken vil utl\u00F8pe om {1} minutter.\n\nHvis du ikke opprettet denne kontoen, vennligst ignorer denne meldingen. +emailVerificationBodyHtml=

Noen har opprettet en {2} konto med denne e-postadressen. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 bekrefte e-postadressen din

{0}

Denne lenken vil utl\u00F8pe om {1} minutter.

Hvis du ikke opprettet denne kontoen, vennligst ignorer denne meldingen.

+identityProviderLinkSubject=Lenke {0} +identityProviderLinkBody=Noen vil koble din {1} konto med {0} konto til bruker {2}. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 koble kontoene\n\n{3}\n\nDenne lenken vil utl\u00F8pe om {4} minutter\n\nHvis du ikke vil koble kontoene, vennligst ignorer denne meldingen. Hvis du kobler kontoene sammen vil du kunne logge inn til {1} gjennom {0}. +identityProviderLinkBodyHtml=

Noen vil koble din {1} konto med {0} konto til bruker {2}. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 koble kontoene.

{3}

Denne lenken vil utl\u00F8pe om {4} minutter.

Hvis du ikke vil koble kontoene, vennligst ignorer denne meldingen. Hvis du kobler kontoene sammen vil du kunne logge inn til {1} gjennom {0}.

+passwordResetSubject=Tilbakestill passord +passwordResetBody=Noen har bedt om \u00E5 endre innloggingsdetaljene til din konto {2}. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 tilbakestille dem.\n\n{0}\n\nDenne lenken vil utl\u00F8pe om {1} minutter.\n\nHvis du ikke vil tilbakestille din innloggingsdata, vennligst ignorer denne meldingen og ingenting vil bli endret. +passwordResetBodyHtml=

Noen har bedt om \u00E5 endre innloggingsdetaljene til din konto {2}. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 tilbakestille dem.

{0}

Denne lenken vil utl\u00F8pe om {1} minutter.

Hvis du ikke vil tilbakestille din innloggingsdata, vennligst ignorer denne meldingen og ingenting vil bli endret.

+executeActionsSubject=Oppdater kontoen din +executeActionsBody=Administrator har anmodet at du oppdaterer din {2} konto. Klikk p\u00E5 lenken nedenfor for \u00E5 starte denne prosessen\n\n{0}\n\nDenne lenken vil utl\u00F8pe om {1} minutter.\n\nHvis du ikke var klar over at administrator har bedt om dette, vennligst ignorer denne meldingen og ingenting vil bli endret. +executeActionsBodyHtml=

Administrator har anmodet at du oppdaterer din {2} konto. Klikk p\u00E5 linken nedenfor for \u00E5 starte denne prosessen.

{0}

Denne lenken vil utl\u00F8pe om {1} minutter.

Hvis du ikke var klar over at administrator har bedt om dette, ignorer denne meldingen og ingenting vil bli endret.

+eventLoginErrorSubject=Innlogging feilet +eventLoginErrorBody=Et mislykket innloggingsfors\u00F8k ble oppdaget p\u00E5 din konto p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. +eventLoginErrorBodyHtml=

Et mislykket innloggingsfors\u00F8k ble oppdaget p\u00E5 din konto p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator.

+eventRemoveTotpSubject=Fjern engangskode +eventRemoveTotpBody=Engangskode ble fjernet fra kontoen din p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. +eventRemoveTotpBodyHtml=

Engangskode ble fjernet fra kontoen din p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator.

+eventUpdatePasswordSubject=Oppdater passord +eventUpdatePasswordBody=Ditt passord ble endret i {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. +eventUpdatePasswordBodyHtml=

Ditt passord ble endret i {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator.

+eventUpdateTotpSubject=Oppdater engangskode +eventUpdateTotpBody=Engangskode ble oppdatert for kontoen din p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. +eventUpdateTotpBodyHtml=

Engangskode ble oppdatert for kontoen din p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator.

diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_pt_BR.properties b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_pt_BR.properties new file mode 100644 index 00000000..cfe97376 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_pt_BR.properties @@ -0,0 +1,19 @@ +emailVerificationSubject=Verifica\u00E7\u00E3o de e-mail +emailVerificationBody=Algu\u00E9m criou uma conta {2} com este endere\u00E7o de e-mail. Se foi voc\u00EA, clique no link abaixo para verificar o seu endere\u00E7o de email\n\n{0}\n\nEste link ir\u00E1 expirar dentro de {1} minutos.\n\nSe n\u00E3o foi voc\u00EA que criou esta conta, basta ignorar esta mensagem. +emailVerificationBodyHtml=

Algu\u00E9m criou uma conta {2} com este endere\u00E7o de e-mail. Se foi voc\u00EA, clique no link abaixo para verificar o seu endere\u00E7o de email

{0}

Este link ir\u00E1 expirar dentro de {1} minutos.

Se n\u00E3o foi voc\u00EA que criou esta conta, basta ignorar esta mensagem.

+identityProviderLinkSubject=Vincular {0} +identityProviderLinkBody=Algu\u00E9m quer vincular sua conta "{1}" com a conta "{0}" do usu\u00E1rio {2} . Se foi voc\u00EA, clique no link abaixo para vincular as contas.\n\n{3}\n\nEste link ir\u00E1 expirar em {4} minutos.\n\nSe voc\u00EA n\u00E3o quer vincular a conta, apenas ignore esta mensagem. Se voc\u00EA vincular as contas, voc\u00EA ser\u00E1 capaz de logar em {1} atr\u00E1v\u00E9s de {0}. +identityProviderLinkBodyHtml=

Algu\u00E9m quer vincular sua conta {1} com a conta {0} do usu\u00E1rio {2} . Se foi voc\u00EA, clique no link abaixo para vincular as contas.

{3}

Este link ir\u00E1 expirar em {4} minutos.

Se voc\u00EA n\u00E3o quer vincular a conta, apenas ignore esta mensagem. Se voc\u00EA vincular as contas, voc\u00EA ser\u00E1 capaz de logar em {1} atr\u00E1v\u00E9s de {0}.

+passwordResetSubject=Redefini\u00E7\u00E3o de senha +eventLoginErrorSubject=Erro de login +eventLoginErrorBody=Uma tentativa de login mal sucedida para a sua conta foi detectada em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador. +eventLoginErrorBodyHtml=

Uma tentativa de login mal sucedida para a sua conta foi detectada em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador.

+eventRemoveTotpSubject=Remover TOTP +eventRemoveTotpBody=TOTP foi removido da sua conta em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador. +eventRemoveTotpBodyHtml=

TOTP foi removido da sua conta em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador.

+eventUpdatePasswordSubject=Atualiza\u00E7\u00E3o de senha +eventUpdatePasswordBody=Sua senha foi alterada em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador. +eventUpdatePasswordBodyHtml=

Sua senha foi alterada em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador.

+eventUpdateTotpSubject=Atualiza\u00E7\u00E3o TOTP +eventUpdateTotpBody=TOTP foi atualizado para a sua conta em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador. +eventUpdateTotpBodyHtml=

TOTP foi atualizado para a sua conta em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador.

\ No newline at end of file diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_ru.properties b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_ru.properties new file mode 100644 index 00000000..13557886 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_ru.properties @@ -0,0 +1,25 @@ +# encoding: utf-8 +emailVerificationSubject=Подтверждение E-mail +emailVerificationBody=Кто-то создал учетную запись {2} с этим E-mail. Если это были Вы, нажмите на следующую ссылку для подтверждения вашего email\n\n{0}\n\nЭта ссылка устареет через {1} минут.\n\nЕсли Вы не создавали учетную запись, просто проигнорируйте это письмо. +emailVerificationBodyHtml=

Кто-то создал учетную запись {2} с этим E-mail. Если это были Вы, нажмите по ссылке для подтверждения вашего E-mail

{0}

Эта ссылка устареет через {1} минут.

Если Вы не создавали учетную запись, просто проигнорируйте это письмо.

+identityProviderLinkSubject=Ссылка {0} +identityProviderLinkBody=Кто-то хочет связать вашу учетную запись "{1}" с "{0}" учетной записью пользователя {2} . Если это были Вы, нажмите по следующей ссылке, чтобы связать учетные записи\n\n{3}\n\nЭта ссылка устареет через {4} минут.\n\nЕсли это не хотите объединять учетные записи, просто проигнориуйте это письмо. После объединения учетных записей Вы можете войти в {1} через {0}. +identityProviderLinkBodyHtml=

Кто-то хочет связать вашу учетную запись {1} с {0} учетной записью пользователя {2} . Если это были Вы, нажмите по следующей ссылке, чтобы связать учетные записи

{3}

Эта ссылка устареет через {4} минут.

Если это не хотите объединять учетные записи, просто проигнориуйте это письмо. После объединения учетных записей Вы можете войти в {1} через {0}.

+passwordResetSubject=Сброс пароля +passwordResetBody=Кто-то только что запросил изменение пароля от Вашей учетной записи {2}. Если это были Вы, нажмите на следующую ссылку, чтобы сбросить его.\n\n{0}\n\nЭта ссылка устареет через {1} минут.\n\nЕсли Вы не хотите сбрасывать пароль, просто проигнорируйте это письмо. +passwordResetBodyHtml=

Кто-то только что запросил изменение пароля от Вашей учетной записи {2}. Если это были Вы, нажмите на следующую ссылку, чтобы сбросить его.

{0}

Эта ссылка устареет через {1} минут.

Если Вы не хотите сбрасывать пароль, просто проигнорируйте это письмо и ничего не изменится.

+executeActionsSubject=Обновление Вашей учетной записи +executeActionsBody=Администратор просит Вас обновить данные Вашей учетной записи {2}. Нажмите по следующей ссылке чтобы начать этот процесс.\n\n{0}\n\nЭта ссылка устареет через {1} минут.\n\nЕсли у вас есть подозрения, что администратор не мог сделать такой запрос, просто проигнорируйте это письмо. +executeActionsBodyHtml=

Администратор просит Вас обновить данные Вашей учетной записи {2}. Нажмите по следующей ссылке чтобы начать этот процесс.

{0}

Эта ссылка устареет через {1} минут.

Если у вас есть подозрения, что администратор не мог сделать такой запрос, просто проигнорируйте это письмо.

+eventLoginErrorSubject=Ошибка входа +eventLoginErrorBody=Была зафиксирована неудачная попытка входа в Вашу учетную запись {0} с {1}. Если это были не Вы, пожалуйста, свяжитесь с администратором. +eventLoginErrorBodyHtml=

Была зафиксирована неудачная попытка входа в Вашу учетную запись {0} с {1}. Если это были не Вы, пожалуйста, свяжитесь с администратором.

+eventRemoveTotpSubject=Удалить TOTP +eventRemoveTotpBody=TOTP был удален из вашей учетной записи {0} c {1}. Если это были не Вы, пожалуйста, свяжитесь с администратором. +eventRemoveTotpBodyHtml=

TOTP был удален из вашей учетной записи {0} c {1}. Если это были не Вы, пожалуйста, свяжитесь с администратором.

+eventUpdatePasswordSubject=Обновление пароля +eventUpdatePasswordBody=Ваш пароль был изменен в {0} с {1}. Если это были не Вы, пожалуйста, свяжитесь с администратором. +eventUpdatePasswordBodyHtml=

Ваш пароль был изменен в {0} с {1}. Если это были не Вы, пожалуйста, свяжитесь с администратором.

+eventUpdateTotpSubject=Обновление TOTP +eventUpdateTotpBody=TOTP был обновлен в вашей учетной записи {0} с {1}. Если это были не Вы, пожалуйста, свяжитесь с администратором. +eventUpdateTotpBodyHtml=

TOTP был обновлен в вашей учетной записи {0} с {1}. Если это были не Вы, пожалуйста, свяжитесь с администратором.

diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_sv.properties b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_sv.properties new file mode 100644 index 00000000..5b5ac6d5 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/messages/messages_sv.properties @@ -0,0 +1,25 @@ +# encoding: utf-8 +emailVerificationSubject=Verifiera e-post +emailVerificationBody=Någon har skapat ett {2} konto med den här e-postadressen. Om det var du, klicka då på länken nedan för att verifiera din e-postadress\n\n{0}\n\nDen här länken kommer att upphöra inom {1} minuter.\n\nOm det inte var du som skapade det här kontot, ignorera i så fall det här meddelandet. +emailVerificationBodyHtml=

Någon har skapat ett {2} konto med den här e-postadressen. Om det var du, klicka då på länken nedan för att verifiera din e-postadress

{0}

Den här länken kommer att upphöra inom {1} minuter.

Om det inte var du som skapade det här kontot, ignorera i så fall det här meddelandet.

+identityProviderLinkSubject=Länk {0} +identityProviderLinkBody=Någon vill länka ditt "{1}" konto med "{0}" kontot tillhörande användaren {2} . Om det var du, klicka då på länken nedan för att länka kontona\n\n{3}\n\nDen här länken kommer att upphöra inom {4} minuter.\n\nOm du inte vill länka kontot, ignorera i så fall det här meddelandet. Om du länkar kontona, så kan du logga in till {1} genom {0}. +identityProviderLinkBodyHtml=

Någon vill länka ditt {1} konto med {0} kontot tillhörande användaren {2} . Om det var du, klicka då på länken nedan för att länka kontona

{3}

Den här länken kommer att upphöra inom {4} minuter.

Om du inte vill länka kontot, ignorera i så fall det här meddelandet. Om du länkar kontona, så kan du logga in till {1} genom {0}.

+passwordResetSubject=Återställ lösenord +passwordResetBody=Någon har precis bett om att ändra ditt {2} kontos användaruppgifter. Om det var du, klicka då på länken nedan för att återställa dem.\n\n{0}\n\nDen här länken och koden kommer att upphöra inom {1} minuter.\n\nOm du inte vill återställa dina kontouppgifter, ignorera i så fall det här meddelandet så kommer inget att ändras. +passwordResetBodyHtml=

Någon har precis bett om att ändra ditt {2} kontos användaruppgifter. Om det var du, klicka då på länken nedan för att återställa dem.

{0}

Den här länken och koden kommer att upphöra inom {1} minuter.

Om du inte vill återställa dina kontouppgifter, ignorera i så fall det här meddelandet så kommer inget att ändras.

+executeActionsSubject=Uppdatera Ditt Konto +executeActionsBody=Din administratör har precis bett om att du skall uppdatera ditt {2} konto. Klicka på länken för att påbörja processen.\n\n{0}\n\nDen här länken kommer att upphöra inom {1} minuter.\n\nOm du är omedveten om att din administratör har bett om detta, ignorera i så fall det här meddelandet så kommer inget att ändras. +executeActionsBodyHtml=

Din administratör har precis bett om att du skall uppdatera ditt {2} konto. Klicka på länken för att påbörja processen.

{0}

Den här länken kommer att upphöra inom {1} minuter.

Om du är omedveten om att din administratör har bett om detta, ignorera i så fall det här meddelandet så kommer inget att ändras.

+eventLoginErrorSubject=Inloggningsfel +eventLoginErrorBody=Ett misslyckat inloggningsförsök har upptäckts på ditt konto på {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör. +eventLoginErrorBodyHtml=

Ett misslyckat inloggningsförsök har upptäckts på ditt konto den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör.

+eventRemoveTotpSubject=Ta bort TOTP +eventRemoveTotpBody=TOTP togs bort från ditt konto den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör. +eventRemoveTotpBodyHtml=

TOTP togs bort från ditt konto den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör.

+eventUpdatePasswordSubject=Uppdatera lösenord +eventUpdatePasswordBody=Ditt lösenord ändrades den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör. +eventUpdatePasswordBodyHtml=

Ditt lösenord ändrades den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör.

+eventUpdateTotpSubject=Uppdatera TOTP +eventUpdateTotpBody=TOTP uppdaterades för ditt konto den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör. +eventUpdateTotpBodyHtml=

TOTP uppdaterades för ditt konto den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör.

\ No newline at end of file diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/text/email-test.ftl b/keycloak/scripts/ansible/artifacts/sunbird/email/text/email-test.ftl new file mode 100644 index 00000000..19942c79 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/text/email-test.ftl @@ -0,0 +1 @@ +${msg("emailTestBody", realmName)} \ No newline at end of file diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/text/email-verification.ftl b/keycloak/scripts/ansible/artifacts/sunbird/email/text/email-verification.ftl new file mode 100644 index 00000000..0ae601f7 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/text/email-verification.ftl @@ -0,0 +1 @@ +${msg("emailVerificationBody",link, linkExpiration, realmName)} \ No newline at end of file diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/text/event-login_error.ftl b/keycloak/scripts/ansible/artifacts/sunbird/email/text/event-login_error.ftl new file mode 100644 index 00000000..7835c914 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/text/event-login_error.ftl @@ -0,0 +1 @@ +${msg("eventLoginErrorBody",event.date,event.ipAddress)} \ No newline at end of file diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/text/event-remove_totp.ftl b/keycloak/scripts/ansible/artifacts/sunbird/email/text/event-remove_totp.ftl new file mode 100644 index 00000000..8930b64d --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/text/event-remove_totp.ftl @@ -0,0 +1 @@ +${msg("eventRemoveTotpBody",event.date, event.ipAddress)} \ No newline at end of file diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/text/event-update_password.ftl b/keycloak/scripts/ansible/artifacts/sunbird/email/text/event-update_password.ftl new file mode 100644 index 00000000..754daac5 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/text/event-update_password.ftl @@ -0,0 +1 @@ +${msg("eventUpdatePasswordBody",event.date, event.ipAddress)} \ No newline at end of file diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/text/event-update_totp.ftl b/keycloak/scripts/ansible/artifacts/sunbird/email/text/event-update_totp.ftl new file mode 100644 index 00000000..3a7b0f71 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/text/event-update_totp.ftl @@ -0,0 +1 @@ +${msg("eventUpdateTotpBody",event.date, event.ipAddress)} \ No newline at end of file diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/text/executeActions.ftl b/keycloak/scripts/ansible/artifacts/sunbird/email/text/executeActions.ftl new file mode 100644 index 00000000..a33758f1 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/text/executeActions.ftl @@ -0,0 +1 @@ +${msg("executeActionsBody",link, linkExpiration, realmName)} \ No newline at end of file diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/text/identity-provider-link.ftl b/keycloak/scripts/ansible/artifacts/sunbird/email/text/identity-provider-link.ftl new file mode 100644 index 00000000..a8c0d54e --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/text/identity-provider-link.ftl @@ -0,0 +1 @@ +${msg("identityProviderLinkBody", identityProviderAlias, realmName, identityProviderContext.username, link, linkExpiration)} \ No newline at end of file diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/text/password-reset.ftl b/keycloak/scripts/ansible/artifacts/sunbird/email/text/password-reset.ftl new file mode 100644 index 00000000..aba4fd19 --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/text/password-reset.ftl @@ -0,0 +1 @@ +${msg("passwordResetBody",link, linkExpiration, realmName)} \ No newline at end of file diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/theme.properties b/keycloak/scripts/ansible/artifacts/sunbird/email/theme.properties new file mode 100644 index 00000000..6b2b6e8f --- /dev/null +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/theme.properties @@ -0,0 +1 @@ +locales=ca,de,en,es,fr,it,ja,lt,no,pt-BR,ru,sv \ No newline at end of file diff --git a/keycloak/scripts/ansible/artifacts/sunbird/login-reset-password.ftl b/keycloak/scripts/ansible/artifacts/sunbird/login/login-reset-password.ftl similarity index 100% rename from keycloak/scripts/ansible/artifacts/sunbird/login-reset-password.ftl rename to keycloak/scripts/ansible/artifacts/sunbird/login/login-reset-password.ftl diff --git a/keycloak/scripts/ansible/artifacts/sunbird/login-update-password.ftl b/keycloak/scripts/ansible/artifacts/sunbird/login/login-update-password.ftl similarity index 100% rename from keycloak/scripts/ansible/artifacts/sunbird/login-update-password.ftl rename to keycloak/scripts/ansible/artifacts/sunbird/login/login-update-password.ftl diff --git a/keycloak/scripts/ansible/artifacts/sunbird/login.ftl b/keycloak/scripts/ansible/artifacts/sunbird/login/login.ftl similarity index 100% rename from keycloak/scripts/ansible/artifacts/sunbird/login.ftl rename to keycloak/scripts/ansible/artifacts/sunbird/login/login.ftl diff --git a/keycloak/scripts/ansible/artifacts/sunbird/messages/messages_en.properties b/keycloak/scripts/ansible/artifacts/sunbird/login/messages/messages_en.properties similarity index 100% rename from keycloak/scripts/ansible/artifacts/sunbird/messages/messages_en.properties rename to keycloak/scripts/ansible/artifacts/sunbird/login/messages/messages_en.properties diff --git a/keycloak/scripts/ansible/artifacts/sunbird/resources/css/login.css b/keycloak/scripts/ansible/artifacts/sunbird/login/resources/css/login.css similarity index 100% rename from keycloak/scripts/ansible/artifacts/sunbird/resources/css/login.css rename to keycloak/scripts/ansible/artifacts/sunbird/login/resources/css/login.css diff --git a/keycloak/scripts/ansible/artifacts/sunbird/resources/css/semantic.min.css b/keycloak/scripts/ansible/artifacts/sunbird/login/resources/css/semantic.min.css similarity index 100% rename from keycloak/scripts/ansible/artifacts/sunbird/resources/css/semantic.min.css rename to keycloak/scripts/ansible/artifacts/sunbird/login/resources/css/semantic.min.css diff --git a/keycloak/scripts/ansible/artifacts/sunbird/resources/css/styles.css b/keycloak/scripts/ansible/artifacts/sunbird/login/resources/css/styles.css similarity index 100% rename from keycloak/scripts/ansible/artifacts/sunbird/resources/css/styles.css rename to keycloak/scripts/ansible/artifacts/sunbird/login/resources/css/styles.css diff --git a/keycloak/scripts/ansible/artifacts/sunbird/resources/img/bkgrnd.png b/keycloak/scripts/ansible/artifacts/sunbird/login/resources/img/bkgrnd.png similarity index 100% rename from keycloak/scripts/ansible/artifacts/sunbird/resources/img/bkgrnd.png rename to keycloak/scripts/ansible/artifacts/sunbird/login/resources/img/bkgrnd.png diff --git a/keycloak/scripts/ansible/artifacts/sunbird/resources/img/logo.png b/keycloak/scripts/ansible/artifacts/sunbird/login/resources/img/logo.png similarity index 100% rename from keycloak/scripts/ansible/artifacts/sunbird/resources/img/logo.png rename to keycloak/scripts/ansible/artifacts/sunbird/login/resources/img/logo.png diff --git a/keycloak/scripts/ansible/artifacts/sunbird/theme.properties b/keycloak/scripts/ansible/artifacts/sunbird/login/theme.properties similarity index 100% rename from keycloak/scripts/ansible/artifacts/sunbird/theme.properties rename to keycloak/scripts/ansible/artifacts/sunbird/login/theme.properties From e855598af3f034b879f21d3409817e5fcea3402f Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Wed, 21 Feb 2018 17:58:53 +0530 Subject: [PATCH 38/41] Issue #28 chore:Show time in hour in password reset email- Overridden email theme --- .../ansible/artifacts/sunbird/email/html/password-reset.ftl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keycloak/scripts/ansible/artifacts/sunbird/email/html/password-reset.ftl b/keycloak/scripts/ansible/artifacts/sunbird/email/html/password-reset.ftl index 846b45da..cfebd966 100644 --- a/keycloak/scripts/ansible/artifacts/sunbird/email/html/password-reset.ftl +++ b/keycloak/scripts/ansible/artifacts/sunbird/email/html/password-reset.ftl @@ -1,5 +1,5 @@ -${msg("passwordResetBodyHtml",link, linkExpiration, realmName)} +${msg("passwordResetBodyHtml",link, (linkExpiration/60)?string["0"], realmName)?no_esc} - \ No newline at end of file + From fc04ef06a4341e316faeb747e151a81d48f27f10 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Thu, 22 Feb 2018 16:46:31 +0530 Subject: [PATCH 39/41] Issue #28 chore:Show time in hour in password reset email- Overridden email theme --- .../ansible/roles/keycloak/tasks/build.yml | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml index c19490df..00f30642 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml @@ -16,6 +16,7 @@ state: directory mode: 0755 + - name: Get the postgresql driver get_url: url={{postgresql_driver_src}} dest="sunbird_auth_{{sunbird_auth_version}}/modules/system/layers/keycloak/org/postgresql/main/" force=no @@ -44,11 +45,35 @@ mode: 0755 - name: Copy Sunbird login theme - copy: src="artifacts/sunbird/" dest="sunbird_auth_{{sunbird_auth_version}}/themes/sunbird/login/" force="yes" + copy: src="artifacts/sunbird/login/" dest="sunbird_auth_{{sunbird_auth_version}}/themes/sunbird/login/" force="yes" - name: Copy Custom Validation theme html to sunbird login theme copy: src="../../sms-provider/templates/" dest="sunbird_auth_{{sunbird_auth_version}}/themes/sunbird/login/" force="yes" +- name: Create directory for sunbird email theme html folder + file: + path: sunbird_auth_{{sunbird_auth_version}}/themes/sunbird/email/html + state: directory + recurse: yes + mode: 0755 + +- name: Create directory for sunbird email theme messages folder + file: + path: sunbird_auth_{{sunbird_auth_version}}/themes/sunbird/email/messages + state: directory + recurse: yes + mode: 0755 + +- name: Create directory for sunbird email theme text folder + file: + path: sunbird_auth_{{sunbird_auth_version}}/themes/sunbird/email/text + state: directory + recurse: yes + mode: 0755 + +- name: Copy Sunbird email theme + copy: src="artifacts/sunbird/email" dest="sunbird_auth_{{sunbird_auth_version}}/themes/sunbird/" force="yes" + - name: Keycloak configuration XML file template: src: "roles/keycloak/templates/standalone-ha.xml" From 1abbfacb2199565dd2d5ccd18504478d3239c6ea Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Thu, 22 Feb 2018 16:46:31 +0530 Subject: [PATCH 40/41] Issue #28 chore: Deployment script for sunbird auth package --- .../inventories/dev/group_vars/dev-es.yml | 6 -- .../dev/group_vars/dev-kong-api.yml | 30 -------- .../inventories/dev/group_vars/dev-log-es.yml | 6 -- .../dev/group_vars/dev-postgresql-master.yml | 25 ------- keycloak/scripts/ansible/keycloak.yml | 2 +- .../keycloak/tasks/auth-deploy-config.yml | 69 +++++++++++++++++++ .../roles/keycloak/tasks/auth-deploy.yml | 57 +++++++++++++++ .../ansible/roles/keycloak/tasks/build.yml | 27 +++++++- 8 files changed, 153 insertions(+), 69 deletions(-) delete mode 100644 keycloak/scripts/ansible/inventories/dev/group_vars/dev-es.yml delete mode 100644 keycloak/scripts/ansible/inventories/dev/group_vars/dev-kong-api.yml delete mode 100644 keycloak/scripts/ansible/inventories/dev/group_vars/dev-log-es.yml delete mode 100644 keycloak/scripts/ansible/inventories/dev/group_vars/dev-postgresql-master.yml create mode 100644 keycloak/scripts/ansible/roles/keycloak/tasks/auth-deploy-config.yml create mode 100644 keycloak/scripts/ansible/roles/keycloak/tasks/auth-deploy.yml diff --git a/keycloak/scripts/ansible/inventories/dev/group_vars/dev-es.yml b/keycloak/scripts/ansible/inventories/dev/group_vars/dev-es.yml deleted file mode 100644 index 947c47f1..00000000 --- a/keycloak/scripts/ansible/inventories/dev/group_vars/dev-es.yml +++ /dev/null @@ -1,6 +0,0 @@ -es_heap_size: 1500m -es_etc_cluster_name: sunbird-dev -es_etc_discovery_zen_minimum_master_nodes: 2 -es_snapshot_host: "{{ groups['es-backup'][0] }}" -es_restore_host: "{{ groups['es-backup'][0] }}" -snapshot_base_path: application diff --git a/keycloak/scripts/ansible/inventories/dev/group_vars/dev-kong-api.yml b/keycloak/scripts/ansible/inventories/dev/group_vars/dev-kong-api.yml deleted file mode 100644 index ce04f0a5..00000000 --- a/keycloak/scripts/ansible/inventories/dev/group_vars/dev-kong-api.yml +++ /dev/null @@ -1,30 +0,0 @@ -# Consumers to be on-boarded -kong_consumers: - - username: api-management-test-user - groups: "{{ kong_all_consumer_groups }}" - state: present - rate_limits: "{{ premium_consumer_rate_limits }}" - - username: sunbird-integrator-test-user - groups: "{{ integration_partner_groups }}" - state: present - credential_algorithm: "RS256" - credential_rsa_public_key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvknOmYAnTRS2BJCm0EXT\nqs3Zg3HPFyhwHIlWp2vwOo5rKLUBmNlSM91yy2vAr7A3wwg+HKe+k+b8XZEJAJyf\nlvtlbRkbuDNpxaqPVav6h7hfUT2RvJOIZn828JLtgYzsA92kD3Ef4YnQoX2FoNLn\noQL0B8WfHbVFkKTbSlz59MlEp74Wx39lTSXjFDYG0wrLiUMW7Eq8ECTEj9ombB+o\nVnBq0mgRNqywtxQlAiFFkuP2H7FATttcHi5PuF8vYMJtpj6PSHmdsMc++VdVE3Pw\n4rQ9s/WY2ThV80RecL5c7jSlfXTyLDTnR10ZNZnMCEzcZAKBSdiIlDmLoZ4852P6\ncwIDAQAB\n-----END PUBLIC KEY-----" - credential_iss: "sunbird-integrator-test.org" - - username: mobile_admin - groups: "{{ mobile_admin_groups }}" - print_credentials: true - state: present - - username: mobile_app - groups: "{{ mobile_app_groups }}" - state: present - - username: mobile_device - groups: "{{ mobile_device_groups }}" - state: present - - username: add-any-consumer-to-be-deleted - state: absent - - username: apekx-integrator-user - groups: "{{ integration_partner_groups }}" - state: absent - credential_algorithm: "RS256" - credential_rsa_public_key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7PtN8+rUo1VnB0BQzEgE\ntaYgYTFk5fnfLB6djy/O0IGx59msT1/V92OwCXFRtXZgCJ/9YIqwprPh/MYcdtAv\nd8Rh/OFQHndwf+yT+3vm2S834hWrgmTNE3fTpgmbbbwm41dJQ2Nv/++SrY6UN+lJ\ncuF8WbizUWZxXHe8HFyIoi52JnBBHpCunXVlMgZL9NT6/hoz8DNfehqpRswveuCF\niW66UVN3MBzBvHEv+gMFyG20UvijdY5vtGYWo30/ExeiDesdGy1JC0fHpjW3FJqE\nBu+Q7Cy1AGFa0ZexLFaLKPspKSLwR0mgkzxV+5x9bhygDC8uXEA3ImuqtkdIXTYw\nUQIDAQAB\n-----END PUBLIC KEY-----" - credential_iss: "apekx" diff --git a/keycloak/scripts/ansible/inventories/dev/group_vars/dev-log-es.yml b/keycloak/scripts/ansible/inventories/dev/group_vars/dev-log-es.yml deleted file mode 100644 index a62feed5..00000000 --- a/keycloak/scripts/ansible/inventories/dev/group_vars/dev-log-es.yml +++ /dev/null @@ -1,6 +0,0 @@ -es_heap_size: 1500m -es_etc_cluster_name: sunbird-log-dev -es_snapshot_host: "{{ groups['log-es-backup'][0] }}" -es_restore_host: "{{ groups['log-es-backup'][0] }}" -snapshot_base_path: logger -es_host: "{{ groups['log-es'][0] }}" diff --git a/keycloak/scripts/ansible/inventories/dev/group_vars/dev-postgresql-master.yml b/keycloak/scripts/ansible/inventories/dev/group_vars/dev-postgresql-master.yml deleted file mode 100644 index 804b9da3..00000000 --- a/keycloak/scripts/ansible/inventories/dev/group_vars/dev-postgresql-master.yml +++ /dev/null @@ -1,25 +0,0 @@ -# postgresql_users should only be created in master and replicated to slave -postgresql_databases: - - name: "{{kong_postgres_database}}" - - name: "{{keycloak_postgres_database}}" - - name: "{{application_postgres_database}}" - -postgresql_users: - - name: "{{ postgres_replication_user_name }}" - password: "{{ postgres_replication_user_password }}" - role_attr_flags: REPLICATION - - name: "{{ postgres_exporter_user }}" - password: "{{ postgres_exporter_password }}" - role_attr_flags: SUPERUSER - - name: "{{kong_postgres_user}}" - password: "{{kong_postgres_password}}" - db: "{{kong_postgres_database}}" - priv: "ALL" - - name: "{{keycloak_postgres_user}}" - password: "{{keycloak_postgres_password}}" - db: "{{keycloak_postgres_database}}" - priv: "ALL" - - name: "{{application_postgres_user}}" - password: "{{application_postgres_password}}" - db: "{{application_postgres_database}}" - priv: "ALL" diff --git a/keycloak/scripts/ansible/keycloak.yml b/keycloak/scripts/ansible/keycloak.yml index bedfec20..fff6fbb3 100644 --- a/keycloak/scripts/ansible/keycloak.yml +++ b/keycloak/scripts/ansible/keycloak.yml @@ -1,5 +1,5 @@ --- -- hosts: all +- hosts: localhost become: true vars_files: - ['{{inventory_dir}}/secrets.yml'] diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/auth-deploy-config.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/auth-deploy-config.yml new file mode 100644 index 00000000..836ade4c --- /dev/null +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/auth-deploy-config.yml @@ -0,0 +1,69 @@ +- name: status service + become: yes + command: /etc/init.d/keycloak status + register: keycloak + poll: 5 + async: 10 + +- name: stop service + become: yes + command: /etc/init.d/keycloak stop && Pkill keycloak + when: "keycloak.stdout.find('running') != -1" + poll: 5 + async: 10 + ignore_errors: yes + +- name: Paste keycloak config package on server + copy: src="sunbird_auth_{{sunbird_auth_version}}.config.zip" dest="/tmp/" force=no owner={{wildfly_user}} group={{wildfly_group}} + +- name: extarct the folder + unarchive: src="/tmp/sunbird_auth_{{sunbird_auth_version}}.config.zip" dest=/tmp/ copy=no owner={{wildfly_user}} group={{wildfly_group}} + +- name: Keycloak configuration XML file + copy: + src: "/tmp/sunbird_auth_{{sunbird_auth_version}}.config/standalone-ha.xml" + dest: "{{keycloak_home}}/standalone/configuration/standalone-ha.xml" + mode: 0750 + owner: "{{wildfly_user}}" + group: "{{wildfly_group}}" + remote_src: yes + +- name: Postgresql Configuration- module.xml + copy: + src: "/tmp/sunbird_auth_{{sunbird_auth_version}}.config/module.xml" + dest: "{{keycloak_home}}/modules/system/layers/keycloak/org/postgresql/main/module.xml" + mode: 0750 + owner: "{{wildfly_user}}" + group: "{{wildfly_group}}" + remote_src: yes + +- name: Create a directory for SMS provider configuration + file: + path: "{{keycloak_home}}/bin/sms-provider" + state: directory + mode: 0755 + +- name: SMS provider configuration file + copy: + src: "/tmp/sunbird_auth_{{sunbird_auth_version}}.config/Msg91Creds.json" + dest: "{{keycloak_home}}/bin/sms-provider/Msg91Creds.json" + owner: "{{wildfly_user}}" + group: "{{wildfly_group}}" + mode: 0755 + remote_src: yes + +- name: Delete config directory + file: + path: "/tmp/sunbird_auth_{{sunbird_auth_version}}.config" + state: absent + +- name: Delete config directory zip + file: + path: "/tmp/sunbird_auth_{{sunbird_auth_version}}.config.zip" + state: absent + +- name: start service + become: yes + command: /etc/init.d/keycloak start + poll: 5 + async: 5 diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/auth-deploy.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/auth-deploy.yml new file mode 100644 index 00000000..414e3349 --- /dev/null +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/auth-deploy.yml @@ -0,0 +1,57 @@ +- stat: + path: /etc/init.d/keycloak + register: keycloak_service + +- name: status service + become: yes + command: /etc/init.d/keycloak status + register: keycloak + poll: 5 + async: 10 + when: keycloak_service.stat.islnk is defined + +- name: stop service + become: yes + command: /etc/init.d/keycloak stop && Pkill keycloak + when: "keycloak.stdout.find('running') != -1" + poll: 5 + async: 10 + ignore_errors: yes + when: keycloak_service.stat.islnk is defined + +- name: remove keycloak + become: yes + file: path="{{keycloak_home}}" state=absent + +- name: change build script permissions + become: yes + file: path=/opt owner={{wildfly_user}} group={{wildfly_group}} mode=0755 recurse=yes + +- name: Paste keycloak package on server + copy: src="sunbird_auth_{{sunbird_auth_version}}.zip" dest="/opt/" force=no owner={{wildfly_user}} group={{wildfly_group}} + +- name: extarct the folder + unarchive: src="/opt/sunbird_auth_{{sunbird_auth_version}}.zip" dest=/opt/ copy=no owner={{wildfly_user}} group={{wildfly_group}} + +- name: move the folder name + command: mv sunbird_auth_{{sunbird_auth_version}} keycloak + args: + chdir: /opt + +- name: remove the sunbird_auth_{{sunbird_auth_version}} + become: yes + file: path=/opt/sunbird_auth_{{sunbird_auth_version}} state=absent + +- name: Create admin user + become_user: "{{ wildfly_user }}" + command: "{{ wildfly_dir }}/bin/add-user-keycloak.sh -r master -u {{ keycloak_management_user }} -p {{ keycloak_management_password }}" + when: keycloak_management_user is defined and + keycloak_management_password is defined + ignore_errors: yes + +- name: start service + become: yes + command: /etc/init.d/keycloak start + poll: 5 + async: 5 + when: keycloak_service.stat.islnk is defined diff --git a/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml b/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml index c19490df..00f30642 100644 --- a/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml +++ b/keycloak/scripts/ansible/roles/keycloak/tasks/build.yml @@ -16,6 +16,7 @@ state: directory mode: 0755 + - name: Get the postgresql driver get_url: url={{postgresql_driver_src}} dest="sunbird_auth_{{sunbird_auth_version}}/modules/system/layers/keycloak/org/postgresql/main/" force=no @@ -44,11 +45,35 @@ mode: 0755 - name: Copy Sunbird login theme - copy: src="artifacts/sunbird/" dest="sunbird_auth_{{sunbird_auth_version}}/themes/sunbird/login/" force="yes" + copy: src="artifacts/sunbird/login/" dest="sunbird_auth_{{sunbird_auth_version}}/themes/sunbird/login/" force="yes" - name: Copy Custom Validation theme html to sunbird login theme copy: src="../../sms-provider/templates/" dest="sunbird_auth_{{sunbird_auth_version}}/themes/sunbird/login/" force="yes" +- name: Create directory for sunbird email theme html folder + file: + path: sunbird_auth_{{sunbird_auth_version}}/themes/sunbird/email/html + state: directory + recurse: yes + mode: 0755 + +- name: Create directory for sunbird email theme messages folder + file: + path: sunbird_auth_{{sunbird_auth_version}}/themes/sunbird/email/messages + state: directory + recurse: yes + mode: 0755 + +- name: Create directory for sunbird email theme text folder + file: + path: sunbird_auth_{{sunbird_auth_version}}/themes/sunbird/email/text + state: directory + recurse: yes + mode: 0755 + +- name: Copy Sunbird email theme + copy: src="artifacts/sunbird/email" dest="sunbird_auth_{{sunbird_auth_version}}/themes/sunbird/" force="yes" + - name: Keycloak configuration XML file template: src: "roles/keycloak/templates/standalone-ha.xml" From 3fbedec1c1dd3119860707c7baa01e8f7321f437 Mon Sep 17 00:00:00 2001 From: Amol Ghatol Date: Tue, 27 Feb 2018 17:02:47 +0530 Subject: [PATCH 41/41] Issue #28 chore: Deployment script for sunbird auth package --- .../pipelines/keycloak-deploy/Jenkinsfile.dev | 34 ------------------- .../JenkinsfileDeployConfig.dev | 34 ------------------- 2 files changed, 68 deletions(-) delete mode 100644 keycloak/scripts/pipelines/keycloak-deploy/Jenkinsfile.dev delete mode 100644 keycloak/scripts/pipelines/keycloak-deploy/JenkinsfileDeployConfig.dev diff --git a/keycloak/scripts/pipelines/keycloak-deploy/Jenkinsfile.dev b/keycloak/scripts/pipelines/keycloak-deploy/Jenkinsfile.dev deleted file mode 100644 index 34ea4088..00000000 --- a/keycloak/scripts/pipelines/keycloak-deploy/Jenkinsfile.dev +++ /dev/null @@ -1,34 +0,0 @@ -#!groovy - -node('general-dev') { - - currentBuild.result = "SUCCESS" - - try { - - stage('checkout') - { - sh('rm -rf sunbird-auth') - sh('git clone https://github.com/ahghatol/sunbird-auth.git') - } - - stage('Build'){ - - step ([$class: 'CopyArtifact', - projectName: 'New_Build/Sunbird_Auth_Build', - filter: 'sunbird_auth_1.0v.zip', - target: 'sunbird-auth/keycloak/scripts/ansible' ] - ); - - sh('cd sunbird-auth/keycloak/scripts/ansible && ansible-playbook -i inventories/dev keycloak.yml --limit keycloak --tags deploy --vault-password-file /run/secrets/vault-pass -vvv') - } - - stage('Archive'){ - archiveArtifacts 'sunbird-auth/keycloak/scripts/ansible/sunbird_auth_1.0v.zip' - } - } - catch (err) { - currentBuild.result = "FAILURE" - throw err - } -} diff --git a/keycloak/scripts/pipelines/keycloak-deploy/JenkinsfileDeployConfig.dev b/keycloak/scripts/pipelines/keycloak-deploy/JenkinsfileDeployConfig.dev deleted file mode 100644 index 81552e96..00000000 --- a/keycloak/scripts/pipelines/keycloak-deploy/JenkinsfileDeployConfig.dev +++ /dev/null @@ -1,34 +0,0 @@ -#!groovy - -node('general-dev') { - - currentBuild.result = "SUCCESS" - - try { - - stage('checkout') - { - sh('rm -rf sunbird-auth') - sh('git clone https://github.com/ahghatol/sunbird-auth.git') - } - - stage('Build'){ - - step ([$class: 'CopyArtifact', - projectName: 'New_Build/Sunbird_Auth_Config_Build', - filter: 'sunbird_auth_1.0v.config.zip', - target: 'sunbird-auth/keycloak/scripts/ansible' ] - ); - - sh('cd sunbird-auth/keycloak/scripts/ansible && ansible-playbook -i inventories/dev keycloak.yml --limit keycloak --tags deploy-config --vault-password-file /run/secrets/vault-pass -vvv') - } - - stage('Archive'){ - archiveArtifacts 'sunbird-auth/keycloak/scripts/ansible/sunbird_auth_1.0v.config.zip' - } - } - catch (err) { - currentBuild.result = "FAILURE" - throw err - } -}