diff --git a/.envrc b/.envrc new file mode 100644 index 0000000000..507debda3c --- /dev/null +++ b/.envrc @@ -0,0 +1,59 @@ +# +# 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. + +# If you're using https://direnv.net/, this file assists in ensuring that your environment is set up +# correctly. + +# Ensure you're running the correct virtual environment +layout python3 + +# Set all required environment variables. +export DATABASE_SERVICE_NAME=localhost +export LOCALHOST_SERVICE_HOST=localhost +export LOCALHOST_SERVICE_PORT=5432 +export DATABASE_ENGINE=postgresql +export DATABASE_NAME=gwells +export DATABASE_USER=gwells +export DATABASE_PASSWORD=gwells +export DATABASE_SCHEMA=public +export DJANGO_SECRET_KEY=blah +export DJANGO_DEBUG=True +export APP_CONTEXT_ROOT=gwells +export ENABLE_GOOGLE_ANALYTICS=False +export ENABLE_DATA_ENTRY=True +export AXIOS_BASEURL=http://127.0.0.1:8000/ +export LEGACY_DATABASE_USER=wells +export LEGACY_DATABASE_NAME=wells +export LEGACY_SCHEMA=wells +export SESSION_COOKIE_SECURE=False +export CSRF_COOKIE_SECURE=False +export ENABLE_ADDITIONAL_DOCUMENTS=True +export DJANGO_ADMIN_URL=admin +export REQUIRE_ENV_VARIABLES=True +export S3_HOST=s3.ca-central-1.amazonaws.com +export S3_ROOT_BUCKET=gwells-docs + + +# Check if requirements.txt has changed +echo "Checking if requirements has changed..." +read current_md5 _ <<< $(cat requirements.txt | md5 | awk '{print $1}') +read prev_md5 _ <<< $(cat requirements.md5) +if [ "$current_md5" != "$prev_md5" ] +then + echo "requirements.txt seems to have changed, running pip install." + pip install --upgrade -r requirements.txt + echo "Storing md5 for current requirements.txt..." + echo "$current_md5" > requirements.md5 +else + echo "requiremens.txt doesn't seem to have changed." +fi diff --git a/.gitignore b/.gitignore index 02fdc3bb01..78177d9f63 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,7 @@ .Trashes ehthumbs.db Thumbs.db +*.md5 ################## @@ -114,6 +115,7 @@ gwells.pyproj* *.sublime-project *.sublime-workspace .vscode +*.ipynb #functional-tests functional-tests/.gradle/ @@ -131,13 +133,12 @@ x.sh #virtual env /deactivate .venv -.envrc .direnv # Frontend files frontend/node_modules/ frontend/webpack-stats.json -registries/static/registries/bundles/ +gwells/static/vue sonar-runner/.gradle *.patch diff --git a/api-tests/registries_api_tests.json b/api-tests/registries_api_tests.json index 08f7ce9233..516f1d0edc 100644 --- a/api-tests/registries_api_tests.json +++ b/api-tests/registries_api_tests.json @@ -1,6 +1,6 @@ { "info": { - "_postman_id": "ca547e9d-cc46-4795-97f8-33d359c17843", + "_postman_id": "040a51d3-6494-4cfa-be50-cc7b7112035f", "name": "GWELLS API (Keycloak)", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, @@ -66,19 +66,16 @@ { "key": "grant_type", "value": "password", - "description": "", "type": "text" }, { "key": "client_id", "value": "{{client_id}}", - "description": "", "type": "text" }, { "key": "client_secret", "value": "{{client_secret}}", - "description": "", "type": "text" } ] @@ -203,7 +200,6 @@ { "key": "province_state", "value": "BC", - "description": "", "type": "text" } ] @@ -282,7 +278,10 @@ "value": "JWT {{token}}" } ], - "body": {}, + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{base_url}}/api/v1/organizations/?format=json", "host": [ @@ -353,7 +352,10 @@ "value": "JWT {{token}}" } ], - "body": {}, + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{base_url}}/api/v1/organizations/{{created_guid}}/?format=json", "host": [ @@ -489,7 +491,10 @@ "value": "JWT {{token}}" } ], - "body": {}, + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{base_url}}/api/v1/organizations/?format=json", "host": [ @@ -546,110 +551,10 @@ "value": "JWT {{token}}" } ], - "body": {}, - "url": { - "raw": "{{base_url}}/api/v1/organizations/{{created_guid}}/?format=json", - "host": [ - "{{base_url}}" - ], - "path": [ - "api", - "v1", - "organizations", - "{{created_guid}}", - "" - ], - "query": [ - { - "key": "format", - "value": "json" - } - ] - }, - "description": "Options for Organization retrieve/update/destroy endpoint" - }, - "response": [] - }, - { - "name": "Company delete", - "event": [ - { - "listen": "test", - "script": { - "id": "a743a15a-6712-486a-9310-5d1261bb03c1", - "type": "text/javascript", - "exec": [ - "pm.test(\"Status code is 204\", function () {", - " pm.response.to.have.status(204);", - "});", - "" - ] - } - } - ], - "request": { - "method": "DELETE", - "header": [ - { - "key": "Authorization", - "value": "JWT {{token}}" - } - ], - "body": {}, - "url": { - "raw": "{{base_url}}/api/v1/organizations/{{created_guid}}/?format=json", - "host": [ - "{{base_url}}" - ], - "path": [ - "api", - "v1", - "organizations", - "{{created_guid}}", - "" - ], - "query": [ - { - "key": "format", - "value": "json" - } - ] - }, - "description": "Delete request - deletes drilling organization specified by GUID." - }, - "response": [] - }, - { - "name": "Company retrieve after delete", - "event": [ - { - "listen": "test", - "script": { - "id": "d6a004fb-bf4e-4bf7-a966-8252283716b4", - "type": "text/javascript", - "exec": [ - "( function() {", - " pm.test(\"Status code is 404\", function () {", - " pm.response.to.have.status(404);", - " });", - "})();", - "" - ] - } - } - ], - "request": { - "auth": { - "type": "noauth" + "body": { + "mode": "raw", + "raw": "" }, - "method": "GET", - "header": [ - { - "key": "Authorization", - "value": "JWT {{token}}" - } - ], - "body": {}, "url": { "raw": "{{base_url}}/api/v1/organizations/{{created_guid}}/?format=json", "host": [ @@ -669,70 +574,7 @@ } ] }, - "description": "Make a get request for the Organization record that was just deleted" - }, - "response": [] - }, - { - "name": "Company List after delete", - "event": [ - { - "listen": "test", - "script": { - "id": "43017ea1-1f15-4963-9766-15549447a5be", - "type": "text/javascript", - "exec": [ - "( function() {", - " pm.test(\"Status code is 200\", function () {", - " pm.response.to.have.status(200);", - " });", - " ", - " var created_guid = pm.environment.get(\"created_guid\")", - "", - " pm.test(\"List of drilling companies does not include the created company (successfully deleted)\", function () {", - " // First check that our GUID resembles a valid UUID (i.e. we are not testing before created_guid is set)", - " pm.expect(created_guid.length).to.eql(36);", - " ", - " // Then check that created_guid is in the response body", - " pm.expect(pm.response.text()).to.not.include(created_guid);", - " });", - "})();", - "" - ] - } - } - ], - "request": { - "auth": { - "type": "noauth" - }, - "method": "GET", - "header": [ - { - "key": "Authorization", - "value": "JWT {{token}}" - } - ], - "body": {}, - "url": { - "raw": "{{base_url}}/api/v1/organizations/?format=json", - "host": [ - "{{base_url}}" - ], - "path": [ - "api", - "v1", - "organizations", - "" - ], - "query": [ - { - "key": "format", - "value": "json" - } - ] - }, - "description": "Driller model \"list\" view after deleting record" + "description": "Options for Organization retrieve/update/destroy endpoint" }, "response": [] }, @@ -837,7 +679,6 @@ { "key": "province_state", "value": "BC", - "description": "", "type": "text" } ] @@ -1078,7 +919,10 @@ "value": "JWT {{token}}" } ], - "body": {}, + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{base_url}}/api/v1/organizations/{{created_guid_bad_input}}/?format=json", "host": [ @@ -1170,7 +1014,7 @@ ], "body": { "mode": "raw", - "raw": "{\n \"first_name\": \"Bobby\",\n \"surname\": \"Driller\",\n \"registrations\": [{\"registries_activity\": \"DRILL\", \"status\": \"ACTIVE\"}],\n \"contact_info\": [{\"contact_tel\": \"555-1234\"}]\n}" + "raw": "{\n \"first_name\": \"Bobby\",\n \"surname\": \"Driller\",\n \"registrations\": [{\"registries_activity\": \"DRILL\", \"status\": \"ACTIVE\", \"organization\": \"{{created_guid}}\"}],\n \"contact_info\": [{\"contact_tel\": \"555-1234\"}]\n}" }, "url": { "raw": "{{base_url}}/api/v1/drillers/?format=json", @@ -1247,7 +1091,10 @@ "value": "JWT {{token}}" } ], - "body": {}, + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{base_url}}/api/v1/drillers/?format=json", "host": [ @@ -1316,7 +1163,10 @@ "value": "JWT {{token}}" } ], - "body": {}, + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{base_url}}/api/v1/drillers/{{created_driller_guid}}/?format=json", "host": [ @@ -1386,7 +1236,10 @@ "value": "JWT {{token}}" } ], - "body": {}, + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{base_url}}/api/v1/drillers/{{created_driller_guid}}/?format=json", "host": [ @@ -1411,49 +1264,28 @@ "response": [] }, { - "name": "Create company for driller", + "name": "Driller update", "event": [ { "listen": "test", "script": { - "id": "ee6cea12-4cd4-4d37-8b5d-30c164852137", + "id": "df2f2a93-db21-480d-baee-d1f71b9c474c", "type": "text/javascript", "exec": [ "( function() {", - " pm.test(\"Successful POST request\", function () {", - " pm.expect(pm.response.code, \"response code not 201\").to.be.oneOf([201,202]);", + " pm.test(\"Successful request (200 OK)\", function () {", + " pm.expect(pm.response.code).to.eql(200);", " });", " ", " var jsonData = pm.response.json()", - " pm.environment.set(\"created_guid\", jsonData.org_guid);", - " ", - " pm.test(\"The record's identifier is in UUID format\", function () {", - " var uuid_re = /\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}/;", - " var match = uuid_re.exec(jsonData.org_guid);", - " pm.expect(match, \"primary key not in UUID format\").to.be.ok;", - " pm.expect(match.length).to.be.ok;", - " pm.expect(match[0]).to.eql(jsonData.org_guid);", - " });", - " ", - " pm.test(\"Organization name equals name supplied in request\", function () {", - " pm.expect(jsonData.name, \"name does not match\").to.eql(\"Steve's Drilling Inc.\");", - " });", - " ", - " pm.test(\"Street address equals value supplied in request\", function () {", - " pm.expect(jsonData.street_address, \"address does not match\").to.eql(\"1012 Douglas\");", - " });", - " ", - " pm.test(\"Postal code equals value supplied in request\", function () {", - " pm.expect(jsonData.postal_code, \"postal code does not match\").to.eql(\"a1a 1a1\");", - " });", - " ", - " pm.test(\"City should be empty (it wasn't supplied)\", function () {", - " pm.expect(jsonData.city, \"city field has unexpected value\").to.not.be.ok;", + "", + " pm.test(\"Last name should now be Drillerson\", function () {", + " pm.expect(jsonData.surname).to.eql(\"Drillerson\");", " });", - " ", - " pm.test(\"Audit fields (who_created, when_created) were filled in by backend\", function () {", - " pm.expect(jsonData.create_user.length, \"create_user not present\").to.be.ok;", - " pm.expect(jsonData.create_date.length, \"create_date not present\").to.be.ok;", + "", + " pm.test(\"Audit fields (update_user, update_date) were filled in by backend\", function () {", + " pm.expect(jsonData.update_user.length).to.be.ok;", + " pm.expect(jsonData.update_date.length).to.be.ok;", " });", "})();", "" @@ -1465,7 +1297,7 @@ "auth": { "type": "noauth" }, - "method": "POST", + "method": "PATCH", "header": [ { "key": "Authorization", @@ -1476,139 +1308,25 @@ "mode": "formdata", "formdata": [ { - "key": "name", - "value": "Steve's Drilling Inc.", + "key": "surname", + "value": "Drillerson", "type": "text" - }, - { - "key": "street_address", - "value": "1012 Douglas", - "type": "text" - }, - { - "key": "city", - "value": "", - "type": "text" - }, - { - "key": "postal_code", - "value": "a1a 1a1", - "type": "text" - }, - { - "key": "main_tel", - "value": "", - "type": "text" - }, - { - "key": "fax_tel", - "value": "", - "type": "text" - }, - { - "key": "website_url", - "value": "", - "type": "text" - }, - { - "key": "province_state", - "value": "BC", - "description": "", - "type": "text" - } - ] - }, - "url": { - "raw": "{{base_url}}/api/v1/organizations/?format=json", - "host": [ - "{{base_url}}" - ], - "path": [ - "api", - "v1", - "organizations", - "" - ], - "query": [ - { - "key": "format", - "value": "json" - } - ] - } - }, - "response": [] - }, - { - "name": "Driller update", - "event": [ - { - "listen": "test", - "script": { - "id": "df2f2a93-db21-480d-baee-d1f71b9c474c", - "type": "text/javascript", - "exec": [ - "( function() {", - " pm.test(\"Successful request (200 OK)\", function () {", - " pm.expect(pm.response.code).to.eql(200);", - " });", - " ", - " var jsonData = pm.response.json()", - "", - " pm.test(\"Last name should now be Drillerson\", function () {", - " pm.expect(jsonData.surname).to.eql(\"Drillerson\");", - " });", - "", - " pm.test(\"Audit fields (update_user, update_date) were filled in by backend\", function () {", - " pm.expect(jsonData.update_user.length).to.be.ok;", - " pm.expect(jsonData.update_date.length).to.be.ok;", - " });", - "})();", - "" - ] - } - } - ], - "request": { - "auth": { - "type": "noauth" - }, - "method": "PATCH", - "header": [ - { - "key": "Authorization", - "value": "JWT {{token}}" - } - ], - "body": { - "mode": "formdata", - "formdata": [ - { - "key": "surname", - "value": "Drillerson", - "type": "text" - }, - { - "key": "organization", - "value": "{{created_guid}}", - "description": "", - "type": "text" - } - ] - }, - "url": { - "raw": "{{base_url}}/api/v1/drillers/{{created_driller_guid}}/?format=json", - "host": [ - "{{base_url}}" - ], - "path": [ - "api", - "v1", - "drillers", - "{{created_driller_guid}}", - "" - ], - "query": [ + } + ] + }, + "url": { + "raw": "{{base_url}}/api/v1/drillers/{{created_driller_guid}}/?format=json", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "v1", + "drillers", + "{{created_driller_guid}}", + "" + ], + "query": [ { "key": "format", "value": "json" @@ -1620,12 +1338,12 @@ "response": [] }, { - "name": "Driller retrieve after adding company", + "name": "Driller retrieve after update", "event": [ { "listen": "test", "script": { - "id": "756091c5-395e-45f5-b91d-e7b47674f8ec", + "id": "90c1a570-0bd4-40da-8017-b2adf4277172", "type": "text/javascript", "exec": [ "( function() {", @@ -1643,10 +1361,6 @@ " pm.expect(jsonData.surname).to.eql(\"Drillerson\");", " });", " ", - " pm.test(\"Company info is present\", function () {", - " pm.expect(jsonData.organization.name).to.eql(\"Steve's Drilling Inc.\")", - " });", - " ", " pm.test(\"Audit fields are present and show the user who created the record\", function () {", " pm.expect(jsonData.create_user.length).to.be.ok;", " pm.expect(jsonData.create_date.length).to.be.ok;", @@ -1669,7 +1383,10 @@ "value": "JWT {{token}}" } ], - "body": {}, + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{base_url}}/api/v1/drillers/{{created_driller_guid}}/?format=json", "host": [ @@ -1811,7 +1528,10 @@ "value": "JWT {{token}}" } ], - "body": {}, + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{base_url}}/api/v1/drillers/?format=json", "host": [ @@ -1868,7 +1588,10 @@ "value": "JWT {{token}}" } ], - "body": {}, + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{base_url}}/api/v1/drillers/{{created_driller_guid}}/?format=json", "host": [ @@ -1917,7 +1640,10 @@ "value": "JWT {{token}}" } ], - "body": {}, + "body": { + "mode": "raw", + "raw": "" + }, "url": { "raw": "{{base_url}}/api/v1/drillers/{{created_driller_guid}}/?format=json", "host": [ @@ -1942,46 +1668,44 @@ "response": [] }, { - "name": "Driller retrieve after delete", + "name": "Company delete", "event": [ { "listen": "test", "script": { - "id": "d6a004fb-bf4e-4bf7-a966-8252283716b4", + "id": "a743a15a-6712-486a-9310-5d1261bb03c1", "type": "text/javascript", "exec": [ - "( function() {", - " pm.test(\"Status code is 404\", function () {", - " pm.response.to.have.status(404);", - " });", - "})();", + "pm.test(\"Status code is 204\", function () {", + " pm.response.to.have.status(204);", + "});", "" ] } } ], "request": { - "auth": { - "type": "noauth" - }, - "method": "GET", + "method": "DELETE", "header": [ { "key": "Authorization", "value": "JWT {{token}}" } ], - "body": {}, + "body": { + "mode": "raw", + "raw": "" + }, "url": { - "raw": "{{base_url}}/api/v1/drillers/{{created_driller_guid}}/?format=json", + "raw": "{{base_url}}/api/v1/organizations/{{created_guid}}/?format=json", "host": [ "{{base_url}}" ], "path": [ "api", "v1", - "drillers", - "{{created_driller_guid}}", + "organizations", + "{{created_guid}}", "" ], "query": [ @@ -1991,17 +1715,17 @@ } ] }, - "description": "Make a request for the Driller record that was just deleted" + "description": "Delete request - deletes drilling organization specified by GUID." }, "response": [] }, { - "name": "Driller list after delete", + "name": "Company List after delete", "event": [ { "listen": "test", "script": { - "id": "811923c8-0326-4495-93c3-a88386c39178", + "id": "43017ea1-1f15-4963-9766-15549447a5be", "type": "text/javascript", "exec": [ "( function() {", @@ -2009,9 +1733,9 @@ " pm.response.to.have.status(200);", " });", " ", - " var created_guid = pm.environment.get(\"created_driller_guid\")", + " var created_guid = pm.environment.get(\"created_guid\")", "", - " pm.test(\"List of drillers does not include the deleted driller (successfully deleted)\", function () {", + " pm.test(\"List of drilling companies does not include the created company (successfully deleted)\", function () {", " // First check that our GUID resembles a valid UUID (i.e. we are not testing before created_guid is set)", " pm.expect(created_guid.length).to.eql(36);", " ", @@ -2035,16 +1759,19 @@ "value": "JWT {{token}}" } ], - "body": {}, + "body": { + "mode": "raw", + "raw": "" + }, "url": { - "raw": "{{base_url}}/api/v1/drillers/?format=json", + "raw": "{{base_url}}/api/v1/organizations/?format=json", "host": [ "{{base_url}}" ], "path": [ "api", "v1", - "drillers", + "organizations", "" ], "query": [ @@ -2054,26 +1781,22 @@ } ] }, - "description": "List driller records after deleting record, and make sure the deleted driller isn't there" + "description": "Driller model \"list\" view after deleting record" }, "response": [] }, { - "name": "Driller create attempt with missing input", + "name": "Company retrieve after delete", "event": [ { "listen": "test", "script": { - "id": "0d1b13bb-0660-48c8-9023-8b5ba1884e3e", + "id": "d6a004fb-bf4e-4bf7-a966-8252283716b4", "type": "text/javascript", "exec": [ "( function() {", - " pm.test(\"Request with missing required input should return 400 Bad Request\", function () {", - " pm.response.to.have.status(400);", - " });", - " ", - " pm.test(\"Response body contains useful error message\", function () {", - " pm.expect(pm.response.text()).to.include(\"field is required\");", + " pm.test(\"Status code is 404\", function () {", + " pm.response.to.have.status(404);", " });", "})();", "" @@ -2085,23 +1808,27 @@ "auth": { "type": "noauth" }, - "method": "POST", + "method": "GET", "header": [ { "key": "Authorization", "value": "JWT {{token}}" } ], - "body": {}, + "body": { + "mode": "raw", + "raw": "" + }, "url": { - "raw": "{{base_url}}/api/v1/drillers/?format=json", + "raw": "{{base_url}}/api/v1/organizations/{{created_guid}}/?format=json", "host": [ "{{base_url}}" ], "path": [ "api", "v1", - "drillers", + "organizations", + "{{created_guid}}", "" ], "query": [ @@ -2111,46 +1838,54 @@ } ] }, - "description": "Attempt to create a driller record with missing required input." + "description": "Make a get request for the Organization record that was just deleted" }, "response": [] }, { - "name": "Company delete", + "name": "Driller retrieve after delete", "event": [ { "listen": "test", "script": { - "id": "a743a15a-6712-486a-9310-5d1261bb03c1", + "id": "d6a004fb-bf4e-4bf7-a966-8252283716b4", "type": "text/javascript", "exec": [ - "pm.test(\"Status code is 204\", function () {", - " pm.response.to.have.status(204);", - "});", + "( function() {", + " pm.test(\"Status code is 404\", function () {", + " pm.response.to.have.status(404);", + " });", + "})();", "" ] } } ], "request": { - "method": "DELETE", + "auth": { + "type": "noauth" + }, + "method": "GET", "header": [ { "key": "Authorization", "value": "JWT {{token}}" } ], - "body": {}, + "body": { + "mode": "raw", + "raw": "" + }, "url": { - "raw": "{{base_url}}/api/v1/organizations/{{created_guid}}/?format=json", + "raw": "{{base_url}}/api/v1/drillers/{{created_driller_guid}}/?format=json", "host": [ "{{base_url}}" ], "path": [ "api", "v1", - "organizations", - "{{created_guid}}", + "drillers", + "{{created_driller_guid}}", "" ], "query": [ @@ -2160,36 +1895,162 @@ } ] }, - "description": "Delete request - deletes drilling organization specified by GUID." + "description": "Make a request for the Driller record that was just deleted" }, "response": [] - } - ], - "_postman_isSubFolder": true - }, - { - "name": "Registrations", - "description": "Well driller or well pump installer registration records for individuals", - "item": [ + }, { - "name": "Create new driller", + "name": "Driller list after delete", "event": [ { "listen": "test", "script": { - "id": "05a0005d-cae7-447a-b666-63de221afd22", + "id": "811923c8-0326-4495-93c3-a88386c39178", "type": "text/javascript", "exec": [ "( function() {", - " pm.test(\"Successful POST request\", function () {", - " pm.expect(pm.response.code).to.be.oneOf([201,202]);", + " pm.test(\"Status code is 200\", function () {", + " pm.response.to.have.status(200);", " });", " ", - " var jsonData = pm.response.json()", - " pm.environment.set(\"created_driller_guid\", jsonData.person_guid);", - " pm.environment.set(\"driller_audit_name\", jsonData.create_user);", - " ", - " pm.test(\"The record's identifier is in UUID format\", function () {", + " var created_guid = pm.environment.get(\"created_driller_guid\")", + "", + " pm.test(\"List of drillers does not include the deleted driller (successfully deleted)\", function () {", + " // First check that our GUID resembles a valid UUID (i.e. we are not testing before created_guid is set)", + " pm.expect(created_guid.length).to.eql(36);", + " ", + " // Then check that created_guid is in the response body", + " pm.expect(pm.response.text()).to.not.include(created_guid);", + " });", + "})();", + "" + ] + } + } + ], + "request": { + "auth": { + "type": "noauth" + }, + "method": "GET", + "header": [ + { + "key": "Authorization", + "value": "JWT {{token}}" + } + ], + "body": { + "mode": "raw", + "raw": "" + }, + "url": { + "raw": "{{base_url}}/api/v1/drillers/?format=json", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "v1", + "drillers", + "" + ], + "query": [ + { + "key": "format", + "value": "json" + } + ] + }, + "description": "List driller records after deleting record, and make sure the deleted driller isn't there" + }, + "response": [] + }, + { + "name": "Driller create attempt with missing input", + "event": [ + { + "listen": "test", + "script": { + "id": "0d1b13bb-0660-48c8-9023-8b5ba1884e3e", + "type": "text/javascript", + "exec": [ + "( function() {", + " pm.test(\"Request with missing required input should return 400 Bad Request\", function () {", + " pm.response.to.have.status(400);", + " });", + " ", + " pm.test(\"Response body contains useful error message\", function () {", + " pm.expect(pm.response.text()).to.include(\"field is required\");", + " });", + "})();", + "" + ] + } + } + ], + "request": { + "auth": { + "type": "noauth" + }, + "method": "POST", + "header": [ + { + "key": "Authorization", + "value": "JWT {{token}}" + } + ], + "body": { + "mode": "raw", + "raw": "" + }, + "url": { + "raw": "{{base_url}}/api/v1/drillers/?format=json", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "v1", + "drillers", + "" + ], + "query": [ + { + "key": "format", + "value": "json" + } + ] + }, + "description": "Attempt to create a driller record with missing required input." + }, + "response": [] + } + ], + "_postman_isSubFolder": true + }, + { + "name": "Registrations", + "description": "Well driller or well pump installer registration records for individuals", + "item": [ + { + "name": "Create new driller", + "event": [ + { + "listen": "test", + "script": { + "id": "05a0005d-cae7-447a-b666-63de221afd22", + "type": "text/javascript", + "exec": [ + "( function() {", + " pm.test(\"Successful POST request\", function () {", + " pm.expect(pm.response.code).to.be.oneOf([201,202]);", + " });", + " ", + " var jsonData = pm.response.json()", + " pm.environment.set(\"created_driller_guid\", jsonData.person_guid);", + " pm.environment.set(\"driller_audit_name\", jsonData.create_user);", + " ", + " pm.test(\"The record's identifier is in UUID format\", function () {", " var uuid_re = /\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}/;", " var match = uuid_re.exec(jsonData.person_guid);", " pm.expect(match).to.be.ok;", @@ -2324,13 +2185,11 @@ { "key": "registries_activity", "value": "DRILL", - "description": "", "type": "text" }, { "key": "status", "value": "ACTIVE", - "description": "", "type": "text" } ] @@ -2357,24 +2216,432 @@ "response": [] }, { - "name": "Edit registration", + "name": "Create company for driller", "event": [ { "listen": "test", "script": { - "id": "2d004a6a-680b-4ee1-b678-6468b609eabd", + "id": "720af7d5-bc68-454f-ad0b-e8bc1f569bf3", "type": "text/javascript", "exec": [ "( function() {", " pm.test(\"Successful POST request\", function () {", - " pm.expect(pm.response.code, \"response code not 200\").to.eql(200);", + " pm.expect(pm.response.code, \"response code not 201\").to.be.oneOf([201,202]);", " });", + " ", " var jsonData = pm.response.json()", - "", - " pm.test(\"Registration number updated\", function () {", - " pm.expect(jsonData.registration_no, \"registration number not updated\").to.eql(\"12345\");", + " pm.environment.set(\"created_guid\", jsonData.org_guid);", + " ", + " pm.test(\"The record's identifier is in UUID format\", function () {", + " var uuid_re = /\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}/;", + " var match = uuid_re.exec(jsonData.org_guid);", + " pm.expect(match, \"primary key not in UUID format\").to.be.ok;", + " pm.expect(match.length).to.be.ok;", + " pm.expect(match[0]).to.eql(jsonData.org_guid);", + " });", + " ", + " pm.test(\"Organization name equals name supplied in request\", function () {", + " pm.expect(jsonData.name, \"name does not match\").to.eql(\"Steve's Drilling Inc.\");", + " });", + " ", + " pm.test(\"Street address equals value supplied in request\", function () {", + " pm.expect(jsonData.street_address, \"address does not match\").to.eql(\"1012 Douglas\");", + " });", + " ", + " pm.test(\"Postal code equals value supplied in request\", function () {", + " pm.expect(jsonData.postal_code, \"postal code does not match\").to.eql(\"a1a 1a1\");", + " });", + " ", + " pm.test(\"Audit fields (who_created, when_created) were filled in by backend\", function () {", + " pm.expect(jsonData.create_user.length, \"create_user not present\").to.be.ok;", + " pm.expect(jsonData.create_date.length, \"create_date not present\").to.be.ok;", + " });", + "})();", + "" + ] + } + } + ], + "request": { + "auth": { + "type": "noauth" + }, + "method": "POST", + "header": [ + { + "key": "Authorization", + "value": "JWT {{token}}" + } + ], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "name", + "value": "Steve's Drilling Inc.", + "type": "text" + }, + { + "key": "street_address", + "value": "1012 Douglas", + "type": "text" + }, + { + "key": "city", + "value": "Drillerville", + "type": "text" + }, + { + "key": "postal_code", + "value": "a1a 1a1", + "type": "text" + }, + { + "key": "main_tel", + "value": "", + "type": "text" + }, + { + "key": "fax_tel", + "value": "", + "type": "text" + }, + { + "key": "website_url", + "value": "", + "type": "text" + }, + { + "key": "province_state", + "value": "BC", + "type": "text" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/v1/organizations/?format=json", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "v1", + "organizations", + "" + ], + "query": [ + { + "key": "format", + "value": "json" + } + ] + } + }, + "response": [] + }, + { + "name": "Edit registration", + "event": [ + { + "listen": "test", + "script": { + "id": "2d004a6a-680b-4ee1-b678-6468b609eabd", + "type": "text/javascript", + "exec": [ + "( function() {", + " pm.test(\"Successful POST request\", function () {", + " pm.expect(pm.response.code, \"response code not 200\").to.eql(200);", + " });", + " var jsonData = pm.response.json()", + "", + " pm.test(\"Registration number updated\", function () {", + " pm.expect(jsonData.registration_no, \"registration number not updated\").to.eql(\"12345\");", + " });", + "", + " pm.test(\"Audit fields (who_created, when_created) were filled in by backend\", function () {", + " pm.expect(jsonData.create_user.length, \"create_user not present\").to.be.ok;", + " pm.expect(jsonData.create_date.length, \"create_date not present\").to.be.ok;", + " });", + "})();", + "" + ] + } + } + ], + "request": { + "auth": { + "type": "noauth" + }, + "method": "PATCH", + "header": [ + { + "key": "Authorization", + "value": "JWT {{token}}" + } + ], + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "registration_no", + "value": "12345", + "type": "text" + }, + { + "key": "organization", + "value": "{{created_guid}}", + "type": "text" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/v1/registrations/{{created_registration_guid}}/?format=json", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "v1", + "registrations", + "{{created_registration_guid}}", + "" + ], + "query": [ + { + "key": "format", + "value": "json" + } + ] + }, + "description": "Edit registration record" + }, + "response": [] + }, + { + "name": "Registration ListCreate Options", + "event": [ + { + "listen": "test", + "script": { + "id": "6caabd10-a649-4a56-96c3-e1b4bffc917c", + "type": "text/javascript", + "exec": [ + "( function() {", + " pm.test(\"Status code is 200\", function () {", + " pm.response.to.have.status(200);", + " });", + "", + " var jsonData = pm.response.json();", + "", + " pm.test(\"Response describes allowed actions for this endpoint\", function () {", + " pm.response.to.have.header(\"Allow\");", + " });", + " ", + " pm.test(\"Response body has actions object, with POST object that lists fields\", function () {", + " pm.expect(jsonData.actions).to.be.ok;", + " pm.expect(jsonData.actions.POST).to.be.ok;", + " pm.expect(Object.keys(jsonData.actions.POST).length).to.be.ok;", + " });", + "})();", + "" + ] + } + } + ], + "request": { + "method": "OPTIONS", + "header": [ + { + "key": "Authorization", + "value": "JWT {{token}}" + } + ], + "body": { + "mode": "raw", + "raw": "" + }, + "url": { + "raw": "{{base_url}}/api/v1/registrations/?format=json", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "v1", + "registrations", + "" + ], + "query": [ + { + "key": "format", + "value": "json" + } + ] + }, + "description": "Options for Registration list/create endpoint" + }, + "response": [] + }, + { + "name": "Registration RetrieveUpdateDestroy Options", + "event": [ + { + "listen": "test", + "script": { + "id": "378cdf34-1e23-4ed1-b845-b0aeaa4c184f", + "type": "text/javascript", + "exec": [ + "( function() {", + " pm.test(\"Status code is 200\", function () {", + " pm.response.to.have.status(200);", + " });", + "", + " pm.test(\"Response describes allowed actions for this endpoint\", function () {", + " pm.response.to.have.header(\"Allow\");", + " });", + "})();", + "" + ] + } + } + ], + "request": { + "auth": { + "type": "noauth" + }, + "method": "OPTIONS", + "header": [ + { + "key": "Authorization", + "value": "JWT {{token}}" + } + ], + "body": { + "mode": "raw", + "raw": "" + }, + "url": { + "raw": "{{base_url}}/api/v1/drillers/{{created_driller_guid}}/?format=json", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "v1", + "drillers", + "{{created_driller_guid}}", + "" + ], + "query": [ + { + "key": "format", + "value": "json" + } + ] + }, + "description": "Options for Driller retrieve/update/destroy endpoint" + }, + "response": [] + }, + { + "name": "Registration List", + "event": [ + { + "listen": "test", + "script": { + "id": "16535aba-50f2-4758-a288-46fe0fc9c939", + "type": "text/javascript", + "exec": [ + "( function() {", + " pm.test(\"Status code is 200\", function () {", + " pm.response.to.have.status(200);", + " });", + " ", + " var jsonData = pm.response.json();", + " ", + " pm.test(\"List of registrations has valid objects\", function () {", + " // First check that our GUID resembles a valid UUID (i.e. we are not testing before created_guid is set)", + "", + " pm.expect(jsonData.results.length).to.be.above(0);", + "", + " for (var i; i < jsonData.results.length; i++) {", + " pm.expect(jsonData.results[i].person.length).to.eql(36);", + " pm.expect(jsonData.results[i].person_name.length).to.be.ok;", + " }", + " });", + "})();", + "" + ] + } + } + ], + "request": { + "auth": { + "type": "noauth" + }, + "method": "GET", + "header": [ + { + "key": "Authorization", + "value": "JWT {{token}}" + } + ], + "body": { + "mode": "raw", + "raw": "" + }, + "url": { + "raw": "{{base_url}}/api/v1/registrations/?format=json", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "v1", + "registrations", + "" + ], + "query": [ + { + "key": "format", + "value": "json" + } + ] + }, + "description": "Registration \"list\" view" + }, + "response": [] + }, + { + "name": "Create new application", + "event": [ + { + "listen": "test", + "script": { + "id": "4f553fb0-fe72-4e5b-9281-cf0f51929ff5", + "type": "text/javascript", + "exec": [ + "( function() {", + " pm.test(\"Successful POST request\", function () {", + " pm.expect(pm.response.code, \"response code not 201\").to.be.oneOf([201,202]);", + " });", + " ", + " var jsonData = pm.response.json()", + " pm.environment.set(\"created_application_guid\", jsonData.application_guid);", + "", + " pm.test(\"The record's identifier is in UUID format\", function () {", + " var uuid_re = /\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}/;", + " var match = uuid_re.exec(jsonData.application_guid);", + " pm.expect(match, \"primary key not in UUID format\").to.be.ok;", + " pm.expect(match.length).to.be.ok;", + " pm.expect(match[0]).to.eql(jsonData.application_guid);", + " });", + " ", + " pm.test(\"Application is pending\", function () {", + " pm.expect(jsonData.status_set.length, \"application status set not valid\").to.eql(1);", + " pm.expect(jsonData.status_set[0].description).to.eql('Pending')", " });", - "", + " ", " pm.test(\"Audit fields (who_created, when_created) were filled in by backend\", function () {", " pm.expect(jsonData.create_user.length, \"create_user not present\").to.be.ok;", " pm.expect(jsonData.create_date.length, \"create_date not present\").to.be.ok;", @@ -2389,7 +2656,7 @@ "auth": { "type": "noauth" }, - "method": "PATCH", + "method": "POST", "header": [ { "key": "Authorization", @@ -2400,23 +2667,26 @@ "mode": "formdata", "formdata": [ { - "key": "registration_no", - "value": "12345", - "description": "", + "key": "registration", + "value": "{{created_registration_guid}}", + "type": "text" + }, + { + "key": "subactivity", + "value": "WATER", "type": "text" } ] }, "url": { - "raw": "{{base_url}}/api/v1/registrations/{{created_registration_guid}}/?format=json", + "raw": "{{base_url}}/api/v1/applications/?format=json", "host": [ "{{base_url}}" ], "path": [ "api", "v1", - "registrations", - "{{created_registration_guid}}", + "applications", "" ], "query": [ @@ -2426,34 +2696,31 @@ } ] }, - "description": "Edit registration record" + "description": "Create a new application for a registration" }, "response": [] }, { - "name": "Registration ListCreate Options", + "name": "Update application - Pending, Water", "event": [ { "listen": "test", "script": { - "id": "6caabd10-a649-4a56-96c3-e1b4bffc917c", + "id": "9740e966-9bda-4937-ac03-3b18e22cbe8c", "type": "text/javascript", "exec": [ "( function() {", - " pm.test(\"Status code is 200\", function () {", - " pm.response.to.have.status(200);", + " pm.test(\"Successful POST request\", function () {", + " pm.expect(pm.response.code, \"response code not 200\").to.eql(200);", " });", - "", " var jsonData = pm.response.json();", - "", - " pm.test(\"Response describes allowed actions for this endpoint\", function () {", - " pm.response.to.have.header(\"Allow\");", + " ", + " pm.test(\"The record's current status is Pending\", function () {", + " pm.expect(jsonData.current_status.status, \"current status not P\").to.eql(\"P\");", " });", " ", - " pm.test(\"Response body has actions object, with POST object that lists fields\", function () {", - " pm.expect(jsonData.actions).to.be.ok;", - " pm.expect(jsonData.actions.POST).to.be.ok;", - " pm.expect(Object.keys(jsonData.actions.POST).length).to.be.ok;", + " pm.test(\"The record's subactivity is WATER\", function () {", + " pm.expect(jsonData.subactivity, \"current status not WATER\").to.eql(\"WATER\");", " });", "})();", "" @@ -2462,23 +2729,34 @@ } ], "request": { - "method": "OPTIONS", + "auth": { + "type": "noauth" + }, + "method": "PATCH", "header": [ { "key": "Authorization", "value": "JWT {{token}}" + }, + { + "key": "Content-Type", + "value": "application/json" } ], - "body": {}, + "body": { + "mode": "raw", + "raw": "{\n\t\"subactivity\": \"WATER\",\n\t\"current_status\": {\n\t\t\"status\": \"P\"\n\t}\n}" + }, "url": { - "raw": "{{base_url}}/api/v1/registrations/?format=json", + "raw": "{{base_url}}/api/v1/applications/{{created_application_guid}}/?format=json", "host": [ "{{base_url}}" ], "path": [ "api", "v1", - "registrations", + "applications", + "{{created_application_guid}}", "" ], "query": [ @@ -2488,26 +2766,31 @@ } ] }, - "description": "Options for Registration list/create endpoint" + "description": "Create a new application for a registration" }, "response": [] }, { - "name": "Registration RetrieveUpdateDestroy Options", + "name": "Update application - Active, Geotech", "event": [ { "listen": "test", "script": { - "id": "378cdf34-1e23-4ed1-b845-b0aeaa4c184f", + "id": "daa29f3c-9201-4949-8f85-71dcd5aaf5a7", "type": "text/javascript", "exec": [ "( function() {", - " pm.test(\"Status code is 200\", function () {", - " pm.response.to.have.status(200);", + " pm.test(\"Successful POST request\", function () {", + " pm.expect(pm.response.code, \"response code not 200\").to.eql(200);", " });", - "", - " pm.test(\"Response describes allowed actions for this endpoint\", function () {", - " pm.response.to.have.header(\"Allow\");", + " var jsonData = pm.response.json();", + " ", + " pm.test(\"The record's current status is Active\", function () {", + " pm.expect(jsonData.current_status.status, \"current status not A\").to.eql(\"A\");", + " });", + " ", + " pm.test(\"The record's subactivity is GEOTECH\", function () {", + " pm.expect(jsonData.subactivity, \"current status not GEOTECH\").to.eql(\"GEOTECH\");", " });", "})();", "" @@ -2519,24 +2802,31 @@ "auth": { "type": "noauth" }, - "method": "OPTIONS", + "method": "PATCH", "header": [ { "key": "Authorization", "value": "JWT {{token}}" + }, + { + "key": "Content-Type", + "value": "application/json" } ], - "body": {}, + "body": { + "mode": "raw", + "raw": "{\n\t\"subactivity\": \"GEOTECH\",\n\t\"current_status\": {\n\t\t\"status\": \"A\"\n\t}\n}" + }, "url": { - "raw": "{{base_url}}/api/v1/drillers/{{created_driller_guid}}/?format=json", + "raw": "{{base_url}}/api/v1/applications/{{created_application_guid}}/?format=json", "host": [ "{{base_url}}" ], "path": [ "api", "v1", - "drillers", - "{{created_driller_guid}}", + "applications", + "{{created_application_guid}}", "" ], "query": [ @@ -2546,35 +2836,33 @@ } ] }, - "description": "Options for Driller retrieve/update/destroy endpoint" + "description": "Create a new application for a registration" }, "response": [] }, { - "name": "Registration List", + "name": "Get registration", "event": [ { "listen": "test", "script": { - "id": "16535aba-50f2-4758-a288-46fe0fc9c939", + "id": "ba74aa9a-9a61-4f39-8238-255246e63f7f", "type": "text/javascript", "exec": [ "( function() {", - " pm.test(\"Status code is 200\", function () {", - " pm.response.to.have.status(200);", + " pm.test(\"Successful GET request\", function () {", + " pm.expect(pm.response.code, \"response code not 200\").to.eql(200);", " });", - " ", - " var jsonData = pm.response.json();", - " ", - " pm.test(\"List of registrations has valid objects\", function () {", - " // First check that our GUID resembles a valid UUID (i.e. we are not testing before created_guid is set)", + " var jsonData = pm.response.json()", "", - " pm.expect(jsonData.results.length).to.be.above(0);", + " pm.test(\"Registration has a person\", function () {", + " pm.expect(jsonData.person.length, \"registration not attached to a person\").to.eql(36);", + " pm.expect(jsonData.person_name, \"person name not available\").to.be.ok", + " });", "", - " for (var i; i < jsonData.results.length; i++) {", - " pm.expect(jsonData.results[i].person.length).to.eql(36);", - " pm.expect(jsonData.results[i].person_name.length).to.be.ok;", - " }", + " pm.test(\"Audit fields (who_created, when_created) were filled in by backend\", function () {", + " pm.expect(jsonData.create_user.length, \"create_user not present\").to.be.ok;", + " pm.expect(jsonData.create_date.length, \"create_date not present\").to.be.ok;", " });", "})();", "" @@ -2593,9 +2881,18 @@ "value": "JWT {{token}}" } ], - "body": {}, + "body": { + "mode": "formdata", + "formdata": [ + { + "key": "registration_no", + "value": "12345", + "type": "text" + } + ] + }, "url": { - "raw": "{{base_url}}/api/v1/registrations/?format=json", + "raw": "{{base_url}}/api/v1/registrations/{{created_registration_guid}}/?format=json", "host": [ "{{base_url}}" ], @@ -2603,6 +2900,7 @@ "api", "v1", "registrations", + "{{created_registration_guid}}", "" ], "query": [ @@ -2612,45 +2910,48 @@ } ] }, - "description": "Registration \"list\" view" + "description": "Get registration record" }, "response": [] }, { - "name": "Create new application", + "name": "City list", "event": [ { "listen": "test", "script": { - "id": "4f553fb0-fe72-4e5b-9281-cf0f51929ff5", + "id": "2a6de4fd-a7e5-4a57-b23f-c9d8a66d0600", "type": "text/javascript", "exec": [ "( function() {", - " pm.test(\"Successful POST request\", function () {", - " pm.expect(pm.response.code, \"response code not 201\").to.be.oneOf([201,202]);", + " pm.test(\"Status code is 200\", function () {", + " pm.response.to.have.status(200);", " });", " ", - " var jsonData = pm.response.json()", - " pm.environment.set(\"created_application_guid\", jsonData.application_guid);", - "", - " pm.test(\"The record's identifier is in UUID format\", function () {", - " var uuid_re = /\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}/;", - " var match = uuid_re.exec(jsonData.application_guid);", - " pm.expect(match, \"primary key not in UUID format\").to.be.ok;", - " pm.expect(match.length).to.be.ok;", - " pm.expect(match[0]).to.eql(jsonData.application_guid);", + " var jsonData = pm.response.json();", + " ", + " pm.test(\"List of cities has at least one object\", function () {", + " // Then check that created_guid is in the response body", + " pm.expect(jsonData.length).to.be.above(0);", " });", " ", - " pm.test(\"Application is pending\", function () {", - " pm.expect(jsonData.status_set.length, \"application status set not valid\").to.eql(1);", - " pm.expect(jsonData.status_set[0].description).to.eql('Pending')", + " pm.test(\"Each object has a city and province property\", function () {", + " // Then check that created_guid is in the response body", + " \"use strict\";", + " for (let i = 0; i < jsonData.length; i++) {", + " pm.expect(jsonData[i].city).to.be.ok;", + " }", + " for (let i = 0; i < jsonData.length; i++) {", + " pm.expect(jsonData[i].province_state).to.be.ok;", + " }", " });", " ", - " pm.test(\"Audit fields (who_created, when_created) were filled in by backend\", function () {", - " pm.expect(jsonData.create_user.length, \"create_user not present\").to.be.ok;", - " pm.expect(jsonData.create_date.length, \"create_date not present\").to.be.ok;", + " pm.test(\"List of cities includes the city where the test driller is based\", function () {", + " // Then check that created_guid is in the response body", + " pm.expect(jsonData.some((item) => item.city === \"Drillerville\")).to.be.ok;", " });", "})();", + "", "" ] } @@ -2660,7 +2961,7 @@ "auth": { "type": "noauth" }, - "method": "POST", + "method": "GET", "header": [ { "key": "Authorization", @@ -2668,30 +2969,19 @@ } ], "body": { - "mode": "formdata", - "formdata": [ - { - "key": "registration", - "value": "{{created_registration_guid}}", - "type": "text" - }, - { - "key": "subactivity", - "value": "WATER", - "description": "", - "type": "text" - } - ] + "mode": "raw", + "raw": "" }, "url": { - "raw": "{{base_url}}/api/v1/applications/?format=json", + "raw": "{{base_url}}/api/v1/cities/drillers/?format=json", "host": [ "{{base_url}}" ], "path": [ "api", "v1", - "applications", + "cities", + "drillers", "" ], "query": [ @@ -2701,45 +2991,29 @@ } ] }, - "description": "Create a new application for a registration" + "description": "Organization model \"list\" view" }, "response": [] }, { - "name": "Get registration", + "name": "Application delete", "event": [ { "listen": "test", "script": { - "id": "ba74aa9a-9a61-4f39-8238-255246e63f7f", + "id": "a743a15a-6712-486a-9310-5d1261bb03c1", "type": "text/javascript", "exec": [ - "( function() {", - " pm.test(\"Successful GET request\", function () {", - " pm.expect(pm.response.code, \"response code not 200\").to.eql(200);", - " });", - " var jsonData = pm.response.json()", - "", - " pm.test(\"Registration has a person\", function () {", - " pm.expect(jsonData.person.length, \"registration not attached to a person\").to.eql(36);", - " pm.expect(jsonData.person_name, \"person name not available\").to.be.ok", - " });", - "", - " pm.test(\"Audit fields (who_created, when_created) were filled in by backend\", function () {", - " pm.expect(jsonData.create_user.length, \"create_user not present\").to.be.ok;", - " pm.expect(jsonData.create_date.length, \"create_date not present\").to.be.ok;", - " });", - "})();", + "pm.test(\"Status code is 204\", function () {", + " pm.response.to.have.status(204);", + "});", "" ] } } ], "request": { - "auth": { - "type": "noauth" - }, - "method": "GET", + "method": "DELETE", "header": [ { "key": "Authorization", @@ -2747,26 +3021,19 @@ } ], "body": { - "mode": "formdata", - "formdata": [ - { - "key": "registration_no", - "value": "12345", - "description": "", - "type": "text" - } - ] + "mode": "raw", + "raw": "" }, "url": { - "raw": "{{base_url}}/api/v1/registrations/{{created_registration_guid}}/?format=json", + "raw": "{{base_url}}/api/v1/applications/{{created_application_guid}}/?format=json", "host": [ "{{base_url}}" ], "path": [ "api", "v1", - "registrations", - "{{created_registration_guid}}", + "applications", + "{{created_application_guid}}", "" ], "query": [ @@ -2776,12 +3043,12 @@ } ] }, - "description": "Get registration record" + "description": "Delete application specified by GUID." }, "response": [] }, { - "name": "Application delete", + "name": "Registration delete", "event": [ { "listen": "test", @@ -2805,17 +3072,20 @@ "value": "JWT {{token}}" } ], - "body": {}, + "body": { + "mode": "raw", + "raw": "" + }, "url": { - "raw": "{{base_url}}/api/v1/applications/{{created_application_guid}}/?format=json", + "raw": "{{base_url}}/api/v1/registrations/{{created_registration_guid}}/?format=json", "host": [ "{{base_url}}" ], "path": [ "api", "v1", - "applications", - "{{created_application_guid}}", + "registrations", + "{{created_registration_guid}}", "" ], "query": [ @@ -2830,7 +3100,7 @@ "response": [] }, { - "name": "Registration delete", + "name": "Driller delete", "event": [ { "listen": "test", @@ -2854,17 +3124,20 @@ "value": "JWT {{token}}" } ], - "body": {}, + "body": { + "mode": "raw", + "raw": "" + }, "url": { - "raw": "{{base_url}}/api/v1/registrations/{{created_registration_guid}}/?format=json", + "raw": "{{base_url}}/api/v1/drillers/{{created_driller_guid}}/?format=json", "host": [ "{{base_url}}" ], "path": [ "api", "v1", - "registrations", - "{{created_registration_guid}}", + "drillers", + "{{created_driller_guid}}", "" ], "query": [ @@ -2879,7 +3152,7 @@ "response": [] }, { - "name": "Driller delete", + "name": "Company delete", "event": [ { "listen": "test", @@ -2903,17 +3176,20 @@ "value": "JWT {{token}}" } ], - "body": {}, + "body": { + "mode": "raw", + "raw": "" + }, "url": { - "raw": "{{base_url}}/api/v1/drillers/{{created_driller_guid}}/?format=json", + "raw": "{{base_url}}/api/v1/organizations/{{created_guid}}/?format=json", "host": [ "{{base_url}}" ], "path": [ "api", "v1", - "drillers", - "{{created_driller_guid}}", + "organizations", + "{{created_guid}}", "" ], "query": [ @@ -2923,7 +3199,7 @@ } ] }, - "description": "Delete application specified by GUID." + "description": "Delete request - deletes drilling organization specified by GUID." }, "response": [] } diff --git a/database/code-tables/data-load-static-codes.sql b/database/code-tables/data-load-static-codes.sql index b4820c328f..9043d9846e 100644 --- a/database/code-tables/data-load-static-codes.sql +++ b/database/code-tables/data-load-static-codes.sql @@ -14,7 +14,8 @@ \copy well_subclass_code (well_subclass_guid,well_subclass_code,description,display_order,well_class_code,create_date,update_date,create_user,update_user) from 'well_subclass_code.csv' with header delimiter ',' CSV ; --PROVINCE_STATE -\echo '... loading province_state_code code table' +\echo '... skipping province_state_code code table, to' +\echo ' avoid impacting dependent Registries app.' \copy province_state_code (province_state_code,description,display_order,create_date,update_date,create_user,update_user) from 'province_state_code.csv' with header delimiter ',' CSV ; --YIELD UNIT diff --git a/database/code-tables/registries/registries_accredited_certificate_code.csv b/database/code-tables/registries/registries_accredited_certificate_code.csv index 7607cc67ca..9e80bfbfa3 100644 --- a/database/code-tables/registries/registries_accredited_certificate_code.csv +++ b/database/code-tables/registries/registries_accredited_certificate_code.csv @@ -7,7 +7,9 @@ create_user,create_date,update_user,update_date,acc_cert_guid,name,description,e "DATALOAD_USER","2018-01-01 00:00:00-08","DATALOAD_USER","2018-01-01 00:00:00-08","a17cc1f862c7471593fbb4c66986d9a7","Water Well Driller, Saskatchewan Journeyperson Certificate",,"1970-01-01 00:00:00-08",,"SK","DRILL" "DATALOAD_USER","2018-01-01 00:00:00-08","DATALOAD_USER","2018-01-01 00:00:00-08","9349a159673946239f7d80b904b8f885","Well Technician Class 1 Drilling",,"1970-01-01 00:00:00-08",,"ON","DRILL" "DATALOAD_USER","2018-01-01 00:00:00-08","DATALOAD_USER","2018-01-01 00:00:00-08","e368e066137b491aaf2ada3bf2936e6d","Grand-parent",,"1970-01-01 00:00:00-08",,"N/A","DRILL" +"DATALOAD_USER","2018-01-01 00:00:00-08","DATALOAD_USER","2018-01-01 00:00:00-08","e0d774bdaba94a6c9d5e4020cfe82865","Well Technician Certificate",,"1970-01-01 00:00:00-08",,"ON","DRILL" "DATALOAD_USER","2018-01-01 00:00:00-08","DATALOAD_USER","2018-01-01 00:00:00-08","7bf968aac6e04f57b4f458723214de80","Well Pump Installer Certificate",,"1970-01-01 00:00:00-08",,"BC","PUMP" "DATALOAD_USER","2018-01-01 00:00:00-08","DATALOAD_USER","2018-01-01 00:00:00-08","1886daa8e79949f0903433d02bad543d","Ground Water Pump Technician Certificate",,"1970-01-01 00:00:00-08",,"CGWA","PUMP" +"DATALOAD_USER","2018-01-01 00:00:00-08","DATALOAD_USER","2018-01-01 00:00:00-08","1dfd37f55082497abe4e6facd1d4dee9","Ground Water Pump Technician Certificate, Class 2",,"1970-01-01 00:00:00-08",,"CGWA","PUMP" "DATALOAD_USER","2018-01-01 00:00:00-08","DATALOAD_USER","2018-01-01 00:00:00-08","88d5d0aad2aa450a9708a911dce42f7f","Well Technician Certificate",,"1970-01-01 00:00:00-08",,"ON","PUMP" "DATALOAD_USER","2018-01-01 00:00:00-08","DATALOAD_USER","2018-01-01 00:00:00-08","a53d3f1e65eb46b78999e662d654df77","Grand-parent",,"1970-01-01 00:00:00-08",,"N/A","PUMP" diff --git a/database/code-tables/registries/registries_subactivity_code.csv b/database/code-tables/registries/registries_subactivity_code.csv index 686bbd8a9c..30afd60517 100644 --- a/database/code-tables/registries/registries_subactivity_code.csv +++ b/database/code-tables/registries/registries_subactivity_code.csv @@ -2,6 +2,4 @@ registries_subactivity_code,registries_activity_code,description,display_order,c "WATER","DRILL","Water Well Driller","2","2018-01-01 00:00:00-08","2018-01-01 00:00:00-08","DATALOAD_USER","DATALOAD_USER","2018-01-01 00:00:00-08", "GEOTECH","DRILL","Geotechnical/Environmental Driller","4","2018-01-01 00:00:00-08","2018-01-01 00:00:00-08","DATALOAD_USER","DATALOAD_USER","2018-01-01 00:00:00-08", "GEOXCHG","DRILL","Geoexchange Driller","6","2018-01-01 00:00:00-08","2018-01-01 00:00:00-08","DATALOAD_USER","DATALOAD_USER","2018-01-01 00:00:00-08", -"PUMPINST","PUMP","Pump Installer","8","2018-01-01 00:00:00-08","2018-01-01 00:00:00-08","DATALOAD_USER","DATALOAD_USER","2018-01-01 00:00:00-08", -"PHASE1","DRILL","Grandparented up to Nov 2006","10","2018-01-01 00:00:00-08","2018-01-01 00:00:00-08","DATALOAD_USER","DATALOAD_USER","1970-01-01 00:00:00-08","2018-04-01 00:00:00-08" -"PHASE2","DRILL","Grandparented up to Feb 29, 2016","10","2018-01-01 00:00:00-08","2018-01-01 00:00:00-08","DATALOAD_USER","DATALOAD_USER","1970-01-01 00:00:00-08","2018-04-01 00:00:00-08" \ No newline at end of file +"PUMPINST","PUMP","Pump Installer","8","2018-01-01 00:00:00-08","2018-01-01 00:00:00-08","DATALOAD_USER","DATALOAD_USER","2018-01-01 00:00:00-08", \ No newline at end of file diff --git a/database/code-tables/registries/registries_well_qualification.csv b/database/code-tables/registries/registries_well_qualification.csv index ae29999ba3..00a749c13e 100644 --- a/database/code-tables/registries/registries_well_qualification.csv +++ b/database/code-tables/registries/registries_well_qualification.csv @@ -10,10 +10,4 @@ registries_well_qualification_guid,registries_subactivity_code,registries_well_c "a2a5ef32fde24a70ac46bd2ccfad54c9","GEOTECH","REM","4","2018-01-01 00:00:00-08","2018-01-01 00:00:00-08","DATALOAD_USER","DATALOAD_USER" "2f734bc65e0e4ce7859e54b56b24d2fd","GEOTECH","GEO","6","2018-01-01 00:00:00-08","2018-01-01 00:00:00-08","DATALOAD_USER","DATALOAD_USER" "0cbac383d61a4c3292af0f9e56d72fc5","GEOXCHG","CLOS","2","2018-01-01 00:00:00-08","2018-01-01 00:00:00-08","DATALOAD_USER","DATALOAD_USER" -"2f8677d85c034ebd8814aeb7acad4426","PUMPINST","PUMP","2","2018-01-01 00:00:00-08","2018-01-01 00:00:00-08","DATALOAD_USER","DATALOAD_USER" -"799dfb94253940b4951ef57a7f8cffa6","PHASE2","WAT","2","2018-01-01 00:00:00-08","2018-01-01 00:00:00-08","DATALOAD_USER","DATALOAD_USER" -"440070a743ba42639531d216b13d4618","PHASE2","MON","4","2018-01-01 00:00:00-08","2018-01-01 00:00:00-08","DATALOAD_USER","DATALOAD_USER" -"2413004bcd0e4bdc8216a7c1aa35d93e","PHASE2","RECH","6","2018-01-01 00:00:00-08","2018-01-01 00:00:00-08","DATALOAD_USER","DATALOAD_USER" -"b4384c2816114c2a8ec6bcb8e7270922","PHASE2","DEWAT","8","2018-01-01 00:00:00-08","2018-01-01 00:00:00-08","DATALOAD_USER","DATALOAD_USER" -"20b31a3563bb4ce4a4d6a98fd0b3c13e","PHASE2","REM","10","2018-01-01 00:00:00-08","2018-01-01 00:00:00-08","DATALOAD_USER","DATALOAD_USER" -"fbfea5dd46fb44dfaeab417b2cb90ae4","PHASE2","GEO","12","2018-01-01 00:00:00-08","2018-01-01 00:00:00-08","DATALOAD_USER","DATALOAD_USER" \ No newline at end of file +"2f8677d85c034ebd8814aeb7acad4426","PUMPINST","PUMP","2","2018-01-01 00:00:00-08","2018-01-01 00:00:00-08","DATALOAD_USER","DATALOAD_USER" \ No newline at end of file diff --git a/database/code-tables/todel.gwells_lithology_weathering.csv b/database/code-tables/todel.gwells_lithology_weathering.csv deleted file mode 100644 index 04bc4bc868..0000000000 --- a/database/code-tables/todel.gwells_lithology_weathering.csv +++ /dev/null @@ -1,3 +0,0 @@ -lithology_weathering_guid,code,description,display_order,create_date,update_date,create_user,update_user -"f9d3fee062a711e7907ba6006ad3dba0","Mottled","Mottled","10","2017-07-01 00:00:00-08","2017-07-01 00:00:00-08","ETL_USER","ETL_USER" -"f9d4041c62a711e7907ba6006ad3dba0","Jointed","Jointed","20","2017-07-01 00:00:00-08","2017-07-01 00:00:00-08","ETL_USER","ETL_USER" \ No newline at end of file diff --git a/database/cron/reset-gwells-all.sh b/database/cron/reset-gwells-all.sh index 5bce0849dd..8ed1bd463d 100755 --- a/database/cron/reset-gwells-all.sh +++ b/database/cron/reset-gwells-all.sh @@ -64,6 +64,10 @@ PODNAME=$(oc get pods -n ${PROJECT} | grep postgresql-[0-9] | grep Running | hea # Drop tables # +# Fri 20 Apr 10:26:57 2018 GW Excluded "province_state_code", as this impacts the +# Registries app. As we move to a steady-state (in terms +# of lookup code tables, we will SKIP reloading them) +# oc exec ${PODNAME} -n ${PROJECT} -- /bin/bash -c 'export PGPASSWORD=$POSTGRESQL_PASSWORD;psql -h $POSTGRESQL_SERVICE_HOST -d $POSTGRESQL_DATABASE -U $POSTGRESQL_USER << EOF drop table if exists activity_submission cascade; drop table if exists activity_submission_water_quality cascade; @@ -111,7 +115,6 @@ drop table if exists online_survey cascade; drop table if exists perforation cascade; drop table if exists production_data cascade; drop table if exists profile cascade; -drop table if exists province_state_code cascade; drop table if exists registries_accredited_certificate cascade; drop table if exists registries_activity_code cascade; drop table if exists registries_application cascade; diff --git a/database/oc-dump.sh b/database/oc-dump.sh new file mode 100755 index 0000000000..b0b2ae1175 --- /dev/null +++ b/database/oc-dump.sh @@ -0,0 +1,116 @@ +#!/bin/sh +# +# Dumps from a GWells database and stores locally. Project namespace required. +# +# Based on TFRS' process: +# https://github.com/bcgov/gwells/tree/developer/database/xfer-registries-to-openshift +# +# NOTE: You need to be logged in with a token, via: +# https://console.pathfinder.gov.bc.ca:8443/oauth/token/request + + +# Halt conditions, verbosity and field separator +# +set -euo pipefail +[ "${VERBOSE:-x}" != true ]|| set -x +IFS=$'\n\t' + + +# Parameters +# +PROJECT=${1:-} +SAVE_TO=${2:-./${PROJECT}-$(date +%Y-%m-%d-%T)} + + +# APP and mode variables +# +APP_NAME=${APP_NAME:-gwells} +DB_NAME=${DB_NAME:-${APP_NAME}} +KEEP_APP_ONLINE=${KEEP_APP_ONLINE:-false} + + +# Repo directory +# +REPO_DIR=$( git rev-parse --show-toplevel ) + + +# Show message if passed any params +# +if [ "${#}" -eq 0 ]||[ "${#}" -gt 2 ] +then + echo + echo "Dumps from a GWells database to store locally" + echo + echo "Provide a project name." + echo " './oc-dump.sh '" + echo + exit +fi + + +# Check login +# +if ! oc whoami +then + echo + echo "Please obtain an OpenShift API token. A window will open shortly." + sleep 3 + open https://console.pathfinder.gov.bc.ca:8443/oauth/token/request + exit +fi + + +# Check project availability +# +CHECK=$( oc projects | tr -d '*' | grep -v "Using project" | grep "${PROJECT}" | awk '{ print $1 }' || echo ) +if [ "${PROJECT}" != "${CHECK}" ] +then + echo + echo "Unable to access project ${PROJECT}" + echo + exit +fi + + +# Put GWells into maintenance mode and scale down (deployment config) +# +if [ "${KEEP_APP_ONLINE}" != "true" ] +then + APPLICATION_NAME=${APP_NAME} ../maintenance/maintenance.sh ${PROJECT} on + oc scale -n ${PROJECT} --replicas=0 deploymentconfig ${APP_NAME} +fi + + +# Make sure $SAVE_TO ends in .gz +# +[ "$( echo ${SAVE_TO} | tail -c4 )" == ".gz" ]|| SAVE_TO="${SAVE_TO}.gz" + + +# Identify database and take a backup +# +POD_DB=$( oc get pods -n ${PROJECT} -o name | grep -Eo "postgresql-[0-9]+-[[:alnum:]]+" ) +SAVE_FILE=$( basename ${SAVE_TO} ) +SAVE_PATH=$( dirname ${SAVE_TO} ) +mkdir -p ${SAVE_PATH} +oc exec ${POD_DB} -n ${PROJECT} -- /bin/bash -c 'pg_dump '${DB_NAME}' | gzip > /tmp/'${SAVE_FILE} +oc rsync ${POD_DB}:/tmp/${SAVE_FILE} ${SAVE_PATH} -n ${PROJECT} --progress=true --no-perms=true +oc exec ${POD_DB} -n ${PROJECT} -- /bin/bash -c 'rm /tmp/'${SAVE_FILE} + + +# Take GWells out of maintenance mode and scale back up (deployment config) +# +if [ "${KEEP_APP_ONLINE}" != "true" ] +then + oc scale -n ${PROJECT} --replicas=1 deploymentconfig ${APP_NAME} + sleep 30 + APPLICATION_NAME=${APP_NAME} ../maintenance/maintenance.sh ${PROJECT} off +fi + + +# Summarize +# +echo +echo "DB: ${DB_NAME}" +echo "Size: $( du -h ${SAVE_TO} | awk '{ print $1 }' )" +echo "Name: ${SAVE_TO}" +echo diff --git a/database/scripts/load_legacy_db.sh b/database/scripts/load_legacy_db.sh deleted file mode 100755 index 95c6c62131..0000000000 --- a/database/scripts/load_legacy_db.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -x -# Add -x beside #!/bin/bash to debug. It will print out the executed commands. -# -# PRECONDITIONS: DATABASE_USER exists -eval wellsdump=${BACKUP_LOCATION} - -psql --dbname postgresql://${LEGACY_DATABASE_USER}:${LEGACY_DATABASE_USER_PASSWORD}@127.0.0.1:5432/postgres < '2016-02-29' +and xform.classofwelldriller like '%Water Well%'; + + +-- Pseudo-Application Statuses from "Water Well" Well Drillers, who were +-- grandfathered in 257 +\echo '... Approved entries' INSERT INTO registries_application_status ( create_user ,create_date @@ -537,25 +608,519 @@ SELECT ,'DATALOAD_USER' ,'2018-01-01 00:00:00-08' ,gen_random_uuid() -,trk.date_approval_letter_card_sent -,trk.app_approval_date +,xform.registrationdate -- default in this case +,xform.registrationdate -- default in this case ,null -- still Registered ,app.application_guid ,'A' from registries_register reg, - xform_registries_action_tracking_driller trk, registries_person per, - registries_application app + registries_application app, + xform_registries_drillers_reg xform WHERE per.person_guid = reg.person_guid AND app.register_guid = reg.register_guid AND reg.registries_status_code = 'ACTIVE' and reg.registries_activity_code = 'DRILL' and app.registries_subactivity_code = 'WATER' -and trim(both from trk.name) = concat(per.surname, ', ', per.first_name) --- until data cleanup -and trk.app_approval_date is not null; +and xform.registrationdate <= '2016-02-29' +and xform.name = concat(per.surname, ', ', per.first_name) +; + +-- Pseudo-Applications from post-2016-FEB-29 2016 Well Drillers (WATER) +-- 17 +\echo '... Approved entries' +INSERT INTO registries_application_status ( + create_user +,create_date +,update_user +,update_date +,application_status_guid +,notified_date +,effective_date +,expired_date +,application_guid +,registries_application_status_code +) +SELECT + 'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,gen_random_uuid() +,xform.registrationdate -- default in this case +,xform.registrationdate -- default in this case +,null -- still Registered +,app.application_guid +,'A' +from registries_register reg, + registries_person per, + registries_application app, + xform_registries_drillers_reg xform +WHERE per.person_guid = reg.person_guid +AND app.register_guid = reg.register_guid +AND reg.registries_status_code = 'ACTIVE' +and reg.registries_activity_code = 'DRILL' +and app.registries_subactivity_code = 'WATER' +and xform.registrationdate > '2016-02-29' +and xform.name = concat(per.surname, ', ', per.first_name) +; + + +-- 257 +\echo 'Inserting "Fake" Applications for pre-2016-FEB-29 grandfathered Well Drillers (GEOTECH)' +INSERT INTO registries_application ( + create_user +,create_date +,update_user +,update_date +,application_guid +,file_no +,over19_ind +,registrar_notes +,reason_denied +,primary_certificate_no +,acc_cert_guid +,register_guid +,registries_subactivity_code +) +SELECT + 'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,gen_random_uuid() +,xform.file_number +,TRUE +,xform.notes +,null +,COALESCE(xform.certificatenumber, 'N/A') +, (SELECT acc_cert_guid + from registries_accredited_certificate_code + where name = 'Grand-parent' + and registries_activity_code = 'DRILL' + ) +,reg.register_guid +,'GEOTECH' +from registries_register reg, + xform_registries_drillers_reg xform, + registries_person per +WHERE per.person_guid = reg.person_guid +AND reg.registries_status_code = 'ACTIVE' +and reg.registries_activity_code = 'DRILL' +and xform.reg_guid = per.person_guid +and xform.registrationdate <= '2016-02-29' +and xform.name = concat(per.surname, ', ', per.first_name); + + +-- Applications from post-2016-FEB-29 2016 Well Drillers +-- 10 +\echo 'Inserting "Fake" Applications for post-2016-FEB-29 Well Drillers (GEOTECH)' +INSERT INTO registries_application ( + create_user +,create_date +,update_user +,update_date +,application_guid +,file_no +,over19_ind +,registrar_notes +,reason_denied +,primary_certificate_no +,acc_cert_guid +,register_guid +,registries_subactivity_code +) +SELECT + 'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,gen_random_uuid() +,xform.file_number +,TRUE +,xform.notes +,null +,COALESCE(xform.certificatenumber, 'N/A') +,CASE typeofcertificate + WHEN 'Water Well Driller, Prov. Of BC' THEN 'a4b2e41c-3796-4c4c-ae28-eb6ad30202d9'::uuid + WHEN 'Geoexchange Driller, Prov. Of BC' THEN '28bf8730-dbb7-4218-8e9f-06bd51f60161'::uuid + WHEN 'Geotechnical/Envrionmental Driller, Prov. Of BC' THEN 'da85087a-9764-410b-908e-b2b65f3dfb48'::uuid + WHEN 'Geotechnical / Environmental, Prov. Of BC' THEN 'da85087a-9764-410b-908e-b2b65f3dfb48'::uuid + WHEN 'Geotechnical/Environmental Driller, Prov. Of BC' THEN 'da85087a-9764-410b-908e-b2b65f3dfb48'::uuid + WHEN 'Groundwater Drilling Technician, CGWA4' THEN '4a059930-265f-43f5-9dbb-c71862ccc5b5'::uuid + WHEN 'Ground Water Drilling Technician, CGWA' THEN '4a059930-265f-43f5-9dbb-c71862ccc5b5'::uuid + WHEN 'Water Well Driller, Alberta Journeyman Certificate' THEN '5856eb50-7ea3-45c7-b882-a8863cc36b73'::uuid + WHEN 'Water Well Driller, Saskatchewan Journeyperson Certificate' THEN 'a17cc1f8-62c7-4715-93fb-b4c66986d9a7'::uuid + WHEN 'Well Technician Class 1 Drilling, Ontario Ministry of Environment' THEN '9349a159-6739-4623-9f7d-80b904b8f885'::uuid + WHEN 'Ontario Well Technician Licence' THEN 'e0d774bd-aba9-4a6c-9d5e-4020cfe82865'::uuid + ELSE 'e368e066-137b-491a-af2a-da3bf2936e6d'::uuid + END AS acc_cert_guid +,reg.register_guid +,'GEOTECH' +from registries_register reg, + xform_registries_drillers_reg xform, + registries_person per +WHERE per.person_guid = reg.person_guid +AND reg.registries_status_code = 'ACTIVE' +and reg.registries_activity_code = 'DRILL' +and xform.reg_guid = per.person_guid +and xform.name = concat(per.surname, ', ', per.first_name) +and xform.registrationdate > '2016-02-29' +and (xform.classofwelldriller like '%Geotechnical%' + or xform.classofwelldriller like '%Geotechnical' + or xform.classofwelldriller like 'Geotechnical%'); + +-- 257 +\echo '... Approved entries' +INSERT INTO registries_application_status ( + create_user +,create_date +,update_user +,update_date +,application_status_guid +,notified_date +,effective_date +,expired_date +,application_guid +,registries_application_status_code +) +SELECT + 'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,gen_random_uuid() +,xform.registrationdate -- default in this case +,xform.registrationdate -- default in this case +,null -- still Registered +,app.application_guid +,'A' +from registries_register reg, + registries_person per, + registries_application app, + xform_registries_drillers_reg xform +WHERE per.person_guid = reg.person_guid +AND app.register_guid = reg.register_guid +AND reg.registries_status_code = 'ACTIVE' +and reg.registries_activity_code = 'DRILL' +and app.registries_subactivity_code = 'GEOTECH' +and xform.registrationdate <= '2016-02-29' +and xform.name = concat(per.surname, ', ', per.first_name) +; + + +-- Pseudo-Applications from post-2016-FEB-29 2016 Well Drillers (GEOTECH) +-- 10 +\echo '... Approved entries' +INSERT INTO registries_application_status ( + create_user +,create_date +,update_user +,update_date +,application_status_guid +,notified_date +,effective_date +,expired_date +,application_guid +,registries_application_status_code +) +SELECT + 'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,gen_random_uuid() +,xform.registrationdate -- default in this case +,xform.registrationdate -- default in this case +,null -- still Registered +,app.application_guid +,'A' +from registries_register reg, + registries_person per, + registries_application app, + xform_registries_drillers_reg xform +WHERE per.person_guid = reg.person_guid +AND app.register_guid = reg.register_guid +AND reg.registries_status_code = 'ACTIVE' +and reg.registries_activity_code = 'DRILL' +and app.registries_subactivity_code = 'GEOTECH' +and xform.registrationdate > '2016-02-29' +and xform.name = concat(per.surname, ', ', per.first_name) +; + +-- 257 +\echo 'Inserting "Fake" Applications for pre-2016-FEB-29 grandfathered Well Drillers (GEOXCHG)' +INSERT INTO registries_application ( + create_user +,create_date +,update_user +,update_date +,application_guid +,file_no +,over19_ind +,registrar_notes +,reason_denied +,primary_certificate_no +,acc_cert_guid +,register_guid +,registries_subactivity_code +) +SELECT + 'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,gen_random_uuid() +,xform.file_number +,TRUE +,xform.notes +,null +,COALESCE(xform.certificatenumber, 'N/A') +, (SELECT acc_cert_guid + from registries_accredited_certificate_code + where name = 'Grand-parent' + and registries_activity_code = 'DRILL' + ) +,reg.register_guid +,'GEOXCHG' +from registries_register reg, + xform_registries_drillers_reg xform, + registries_person per +WHERE per.person_guid = reg.person_guid +AND reg.registries_status_code = 'ACTIVE' +and reg.registries_activity_code = 'DRILL' +and xform.reg_guid = per.person_guid +and xform.registrationdate <= '2016-02-29' +and xform.name = concat(per.surname, ', ', per.first_name); + + +-- Applications from post-2016-FEB-29 2016 Well Drillers +-- 3 +\echo 'Inserting "Fake" Applications for post-2016-FEB-29 Well Drillers (GEOXCHG)' +INSERT INTO registries_application ( + create_user +,create_date +,update_user +,update_date +,application_guid +,file_no +,over19_ind +,registrar_notes +,reason_denied +,primary_certificate_no +,acc_cert_guid +,register_guid +,registries_subactivity_code +) +SELECT + 'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,gen_random_uuid() +,xform.file_number +,TRUE +,xform.notes +,null +,COALESCE(xform.certificatenumber, 'N/A') +,CASE typeofcertificate + WHEN 'Water Well Driller, Prov. Of BC' THEN 'a4b2e41c-3796-4c4c-ae28-eb6ad30202d9'::uuid + WHEN 'Geoexchange Driller, Prov. Of BC' THEN '28bf8730-dbb7-4218-8e9f-06bd51f60161'::uuid + WHEN 'Geotechnical/Envrionmental Driller, Prov. Of BC' THEN 'da85087a-9764-410b-908e-b2b65f3dfb48'::uuid + WHEN 'Geotechnical / Environmental, Prov. Of BC' THEN 'da85087a-9764-410b-908e-b2b65f3dfb48'::uuid + WHEN 'Geotechnical/Environmental Driller, Prov. Of BC' THEN 'da85087a-9764-410b-908e-b2b65f3dfb48'::uuid + WHEN 'Groundwater Drilling Technician, CGWA4' THEN '4a059930-265f-43f5-9dbb-c71862ccc5b5'::uuid + WHEN 'Ground Water Drilling Technician, CGWA' THEN '4a059930-265f-43f5-9dbb-c71862ccc5b5'::uuid + WHEN 'Water Well Driller, Alberta Journeyman Certificate' THEN '5856eb50-7ea3-45c7-b882-a8863cc36b73'::uuid + WHEN 'Water Well Driller, Saskatchewan Journeyperson Certificate' THEN 'a17cc1f8-62c7-4715-93fb-b4c66986d9a7'::uuid + WHEN 'Well Technician Class 1 Drilling, Ontario Ministry of Environment' THEN '9349a159-6739-4623-9f7d-80b904b8f885'::uuid + WHEN 'Ontario Well Technician Licence' THEN 'e0d774bd-aba9-4a6c-9d5e-4020cfe82865'::uuid + ELSE 'e368e066-137b-491a-af2a-da3bf2936e6d'::uuid + END AS acc_cert_guid +,reg.register_guid +,'GEOXCHG' +from registries_register reg, + xform_registries_drillers_reg xform, + registries_person per +WHERE per.person_guid = reg.person_guid +AND reg.registries_status_code = 'ACTIVE' +and reg.registries_activity_code = 'DRILL' +and xform.reg_guid = per.person_guid +and xform.name = concat(per.surname, ', ', per.first_name) +and xform.registrationdate > '2016-02-29' +and (trim(both from xform.classofwelldriller) = 'Geoexchange' + or xform.classofwelldriller like '%Geoexchange%'); + + + +\echo '... Approved entries' +-- 257 +INSERT INTO registries_application_status ( + create_user +,create_date +,update_user +,update_date +,application_status_guid +,notified_date +,effective_date +,expired_date +,application_guid +,registries_application_status_code +) +SELECT + 'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,gen_random_uuid() +,xform.registrationdate -- default in this case +,xform.registrationdate -- default in this case +,null -- still Registered +,app.application_guid +,'A' +from registries_register reg, + registries_person per, + registries_application app, + xform_registries_drillers_reg xform +WHERE per.person_guid = reg.person_guid +AND app.register_guid = reg.register_guid +AND reg.registries_status_code = 'ACTIVE' +and reg.registries_activity_code = 'DRILL' +and app.registries_subactivity_code = 'GEOXCHG' +and xform.registrationdate <= '2016-02-29' +and xform.name = concat(per.surname, ', ', per.first_name) +; + + +-- Pseudo-Applications from post-2016-FEB-29 2016 Well Drillers (GEOXCHG) +-- 3 +\echo '... Approved entries' +INSERT INTO registries_application_status ( + create_user +,create_date +,update_user +,update_date +,application_status_guid +,notified_date +,effective_date +,expired_date +,application_guid +,registries_application_status_code +) +SELECT + 'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,gen_random_uuid() +,xform.registrationdate -- default in this case +,xform.registrationdate -- default in this case +,null -- still Registered +,app.application_guid +,'A' +from registries_register reg, + registries_person per, + registries_application app, + xform_registries_drillers_reg xform +WHERE per.person_guid = reg.person_guid +AND app.register_guid = reg.register_guid +AND reg.registries_status_code = 'ACTIVE' +and reg.registries_activity_code = 'DRILL' +and app.registries_subactivity_code = 'GEOXCHG' +and xform.registrationdate > '2016-02-29' +and xform.name = concat(per.surname, ', ', per.first_name) +; + +-- 320 +\echo 'Inserting "Fake" Applications for Pump Installers (PUMPINST)' +\echo '.. to be fixed manually post-migration or via a ' +\echo '.. subsequent re-migration after data cleanup in' +\echo '.. the source MS Access tables.' +INSERT INTO registries_application ( + create_user +,create_date +,update_user +,update_date +,application_guid +,file_no +,over19_ind +,registrar_notes +,reason_denied +,primary_certificate_no +,acc_cert_guid +,register_guid +,registries_subactivity_code +) +SELECT + 'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,gen_random_uuid() +,xform.file_number +,TRUE +,CONCAT_WS('. ',xform.notes,'Pseudo-Applications until ACTION_TRACKING tables are fixed. ') +,null +,'N/A' -- why no cert #? +,CASE typeofcertificate + WHEN 'Ground Water Pump Technician, CGWA' THEN '1886daa8-e799-49f0-9034-33d02bad543d'::uuid + WHEN 'Ground Water Pump Technician, Class 2, CGWA' THEN '1dfd37f5-5082-497a-be4e-6facd1d4dee9'::uuid + WHEN 'Well Pump Installer, Prov. Of BC' THEN '7bf968aa-c6e0-4f57-b4f4-58723214de80'::uuid + WHEN 'ITA' THEN '7bf968aa-c6e0-4f57-b4f4-58723214de80'::uuid + WHEN 'Well Technician, Ontario Ministry of Environment' THEN '88d5d0aa-d2aa-450a-9708-a911dce42f7f'::uuid + ELSE 'a53d3f1e-65eb-46b7-8999-e662d654df77'::uuid + END AS acc_cert_guid +,reg.register_guid +,'PUMPINST' +from registries_register reg, + xform_registries_pump_installers_reg xform, + registries_person per +WHERE per.person_guid = reg.person_guid +AND reg.registries_status_code = 'ACTIVE' +and reg.registries_activity_code = 'PUMP' +-- and xform.reg_guid = per.person_guid CANNOT use this as the person_guid came +-- from previous well-driller creation +and xform.firstname = per.first_name +and xform.lastname = per.surname; + +-- 320 +\echo '... Approved entries for Pump Installers ' +INSERT INTO registries_application_status ( + create_user +,create_date +,update_user +,update_date +,application_status_guid +,notified_date +,effective_date +,expired_date +,application_guid +,registries_application_status_code +) +SELECT + 'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,'DATALOAD_USER' +,'2018-01-01 00:00:00-08' +,gen_random_uuid() +,xform.registrationdate -- default in this case +,xform.registrationdate -- default in this case +,null -- still Registered +,app.application_guid +,'A' +from registries_register reg, + registries_person per, + registries_application app, + xform_registries_pump_installers_reg xform +WHERE per.person_guid = reg.person_guid +AND app.register_guid = reg.register_guid +AND reg.registries_status_code = 'ACTIVE' +and reg.registries_activity_code = 'PUMP' +and xform.firstname = per.first_name +and xform.lastname = per.surname; +; + -*/ -- Historical Statuses for Applications from "Water Well" Well Drillers (ultimately successful) -- diff --git a/database/scripts/registries/post-deploy.sql b/database/scripts/registries/post-deploy.sql index d5399b6624..8640d59258 100644 --- a/database/scripts/registries/post-deploy.sql +++ b/database/scripts/registries/post-deploy.sql @@ -25,14 +25,15 @@ CREATE OR REPLACE VIEW vw_well_class AS SELECT subact.registries_activity_code AS activity_code ,subact.description AS subactivity -,class.description AS well_class +,class.description AS class_desc +,class.registries_well_class_code AS class_name + ---- Remainder are PK, FK, Audit columns (usually hidden from user) /* ,class.create_user AS class_create_user ,class.create_date AS class_create_date ,class.update_user AS class_update_user ,class.update_date AS class_update_date -,class.registries_well_class_code AS class_registries_well_class_code ,class.display_order AS class_display_order ,class.effective_date AS class_effective_date ,class.expired_date AS class_expired_date @@ -52,14 +53,13 @@ INNER JOIN registries_subactivity_code subact ON qual.registries_subactivity_code = subact.registries_subactivity_code ; - - -- GWELLS people in our system, with or without contact details DROP VIEW IF EXISTS vw_person; CREATE OR REPLACE VIEW vw_person AS SELECT per.first_name AS first_name ,per.surname AS surname +,con.contact_cell AS contact_cell ,con.contact_tel AS contact_tel ,con.contact_email AS contact_email ---- Remainder are PK, FK, Audit columns (usually hidden from user) @@ -71,46 +71,6 @@ SELECT ,per.person_guid AS per_person_guid ,per.effective_date AS per_effective_date ,per.expired_date AS per_expired_date -,per.organization_guid AS per_organization_guid -,con.create_user AS con_create_user -,con.create_date AS con_create_date -,con.update_user AS con_update_user -,con.update_date AS con_update_date -,con.contact_detail_guid AS con_contact_detail_guid -,con.effective_date AS con_effective_date -,con.expired_date AS con_expired_date -*/ -FROM registries_person per -LEFT JOIN registries_contact_detail con -ON per.person_guid = con.person_guid -; - --- People and the Company for which they work -DROP VIEW IF EXISTS vw_person_org; -CREATE OR REPLACE VIEW vw_person_org AS -SELECT - per.first_name AS first_name -,per.surname AS surname -,con.contact_tel AS contact_tel -,con.contact_email AS contact_email -,org.name AS org_name -,org.street_address AS org_street_address -,org.city AS org_city -,org.postal_code AS org_postal_code -,org.main_tel AS org_main_tel -,org.fax_tel AS org_fax_tel -,org.website_url AS org_website_url -,org.province_state_code AS org_province_state_code ----- Remainder are PK, FK, Audit columns (usually hidden from user) -/* -,per.create_user AS per_create_user -,per.create_date AS per_create_date -,per.update_user AS per_update_user -,per.update_date AS per_update_date -,per.person_guid AS per_person_guid -,per.effective_date AS per_effective_date -,per.expired_date AS per_expired_date -,per.organization_guid AS per_organization_guid ,con.create_user AS con_create_user ,con.create_date AS con_create_date ,con.update_user AS con_update_user @@ -118,27 +78,20 @@ SELECT ,con.contact_detail_guid AS con_contact_detail_guid ,con.effective_date AS con_effective_date ,con.expired_date AS con_expired_date -,org.create_user AS org_create_user -,org.create_date AS org_create_date -,org.update_user AS org_update_user -,org.update_date AS org_update_date -,org.org_guid AS org_org_guid -,org.effective_date AS org_effective_date -,org.expired_date AS org_expired_date */ FROM registries_person per LEFT JOIN registries_contact_detail con ON per.person_guid = con.person_guid -LEFT JOIN registries_organization org -ON per.organization_guid = org.org_guid ; -- "ACTIVE" Well Drillers on the Registry DROP VIEW IF EXISTS vw_well_driller_reg; CREATE OR REPLACE VIEW vw_well_driller_reg AS SELECT - per.first_name AS first_name + reg.register_guid AS reg_register_guid +,per.first_name AS first_name ,per.surname AS surname +,con.contact_cell AS contact_cell ,con.contact_tel AS contact_tel ,con.contact_email AS contact_email ,org.name AS org_name @@ -151,8 +104,9 @@ SELECT ,org.province_state_code AS org_province_state_code ,reg.registration_no AS reg_registration_no ,reg.registration_date AS reg_registration_date -,reg.registries_activity_code AS reg_registries_activity_code -,reg.registries_status_code AS reg_registries_status_code +,reg.registries_status_code AS reg_registries_status_code +,app.primary_certificate_no AS app_primary_certificate_no +,string_agg(app.registries_subactivity_code, ', ') as well_class_list -- Not relevant as only ACTIVE Drillers -- ,reg.register_removal_date AS reg_register_removal_date -- ,reg.person_guid AS reg_person_guid @@ -164,7 +118,6 @@ SELECT ,per.create_date AS per_create_date ,per.update_user AS per_update_user ,per.update_date AS per_update_date -,per.person_guid AS per_person_guid ,per.effective_date AS per_effective_date ,per.expired_date AS per_expired_date ,per.organization_guid AS per_organization_guid @@ -172,33 +125,74 @@ SELECT ,con.create_date AS con_create_date ,con.update_user AS con_update_user ,con.update_date AS con_update_date -,con.contact_detail_guid AS con_contact_detail_guid ,con.effective_date AS con_effective_date ,con.expired_date AS con_expired_date ,org.create_user AS org_create_user ,org.create_date AS org_create_date ,org.update_user AS org_update_user ,org.update_date AS org_update_date -,org.org_guid AS org_org_guid ,org.effective_date AS org_effective_date ,org.expired_date AS org_expired_date ,reg.create_user AS reg_create_user ,reg.create_date AS reg_create_date ,reg.update_user AS reg_update_user ,reg.update_date AS reg_update_date -,reg.register_guid AS reg_register_guid */ -FROM registries_person per -LEFT JOIN registries_contact_detail con -ON per.person_guid = con.person_guid -LEFT JOIN registries_organization org -ON per.organization_guid = org.org_guid -INNER JOIN registries_register reg -ON per.person_guid = reg.person_guid -WHERE reg.registries_activity_code = 'DRILL' +FROM registries_person per, + registries_contact_detail con, + registries_organization org, + registries_register reg, + registries_application app +WHERE per.person_guid = con.person_guid +AND per.person_guid = reg.person_guid +AND reg.organization_guid = org.org_guid +AND reg.registries_activity_code = 'DRILL' AND reg.registries_status_code = 'ACTIVE' +AND reg.register_guid = app.register_guid +GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18 ; +/* + + +select reg_register_guid,first_name, surname, org_name, reg_registration_no, reg_registration_date, +app_primary_certificate_no, well_class_list +,app.create_user +,app.create_date +,app.update_user +,app.update_date +,app.application_guid +,app.file_no +,app.over19_ind +,app.registrar_notes +,app.reason_denied +,app.primary_certificate_no +,app.acc_cert_guid +,app.register_guid +,app.registries_subactivity_code +,app.create_user +,app.create_date +,app.update_user +,app.update_date +,app.application_guid +,app.file_no +,app.over19_ind +,app.registrar_notes +,app.reason_denied +,app.primary_certificate_no +,app.acc_cert_guid +,app.register_guid +,app.registries_subactivity_code +from vw_well_driller_reg reg, + registries_application app +where reg.reg_register_guid = app.register_guid +order by surname, first_name; + + +*/ + + + -- "ACTIVE" Pump Installers on the Registry DROP VIEW IF EXISTS vw_pump_installer_reg; CREATE OR REPLACE VIEW vw_pump_installer_reg AS @@ -254,14 +248,14 @@ SELECT ,reg.update_date AS reg_update_date ,reg.register_guid AS reg_register_guid */ -FROM registries_person per -LEFT JOIN registries_contact_detail con -ON per.person_guid = con.person_guid -LEFT JOIN registries_organization org -ON per.organization_guid = org.org_guid -INNER JOIN registries_register reg -ON per.person_guid = reg.person_guid -WHERE reg.registries_activity_code = 'PUMP' +FROM registries_person per, + registries_contact_detail con, + registries_organization org, + registries_register reg +WHERE per.person_guid = con.person_guid +AND per.person_guid = reg.person_guid +AND reg.organization_guid = org.org_guid +AND reg.registries_activity_code = 'PUMP' AND reg.registries_status_code = 'ACTIVE' ; @@ -300,6 +294,7 @@ ON cert.cert_auth_code = auth.cert_auth_code; -- -- "Application History" of Well Drillers on the Registry +/* DROP VIEW IF EXISTS vw_well_driller_application; CREATE OR REPLACE VIEW vw_well_driller_application AS SELECT @@ -330,56 +325,55 @@ SELECT -- ,reg.registries_removal_reason_code AS reg_registries_removal_reason_code -- ---- Remainder are PK, FK, Audit columns (usually hidden from user) -/* -,per.create_user AS per_create_user -,per.create_date AS per_create_date -,per.update_user AS per_update_user -,per.update_date AS per_update_date -,per.person_guid AS per_person_guid -,per.effective_date AS per_effective_date -,per.expired_date AS per_expired_date -,per.organization_guid AS per_organization_guid -,con.create_user AS con_create_user -,con.create_date AS con_create_date -,con.update_user AS con_update_user -,con.update_date AS con_update_date -,con.contact_detail_guid AS con_contact_detail_guid -,con.effective_date AS con_effective_date -,con.expired_date AS con_expired_date -,org.create_user AS org_create_user -,org.create_date AS org_create_date -,org.update_user AS org_update_user -,org.update_date AS org_update_date -,org.org_guid AS org_org_guid -,org.effective_date AS org_effective_date -,org.expired_date AS org_expired_date -,reg.create_user AS reg_create_user -,reg.create_date AS reg_create_date -,reg.update_user AS reg_update_user -,reg.update_date AS reg_update_date -,reg.register_guid AS reg_register_guid -,app.create_user AS app_create_user -,app.create_date AS app_create_date -,app.update_user AS app_update_user -,app.update_date AS app_update_date -,app.application_guid AS app_application_guid -,app.file_no AS app_file_no -,app.over19_ind AS app_over19_ind -,app.registrar_notes AS app_registrar_notes -,app.reason_denied AS app_reason_denied -,app.primary_certificate_no AS app_primary_certificate_no -,app.acc_cert_guid AS app_acc_cert_guid -,app.register_guid AS app_register_guid -,status.create_user AS appstatus_create_user -,status.create_date AS appstatus_create_date -,status.update_user AS appstatus_update_user -,status.update_date AS appstatus_update_date -,status.application_status_guid AS appstatus_application_status_guid -,status.notified_date AS appstatus_notified_date -,status.effective_date AS appstatus_effective_date -,status.expired_date AS appstatus_expired_date -,status.application_guid AS appstatus_application_guid -*/ +-- ,per.create_user AS per_create_user +-- ,per.create_date AS per_create_date +-- ,per.update_user AS per_update_user +-- ,per.update_date AS per_update_date +-- ,per.person_guid AS per_person_guid +-- ,per.effective_date AS per_effective_date +-- ,per.expired_date AS per_expired_date +-- ,per.organization_guid AS per_organization_guid +-- ,con.create_user AS con_create_user +-- ,con.create_date AS con_create_date +-- ,con.update_user AS con_update_user +-- ,con.update_date AS con_update_date +-- ,con.contact_detail_guid AS con_contact_detail_guid +-- ,con.effective_date AS con_effective_date +-- ,con.expired_date AS con_expired_date +-- ,org.create_user AS org_create_user +-- ,org.create_date AS org_create_date +-- ,org.update_user AS org_update_user +-- ,org.update_date AS org_update_date +-- ,org.org_guid AS org_org_guid +-- ,org.effective_date AS org_effective_date +-- ,org.expired_date AS org_expired_date +-- ,reg.create_user AS reg_create_user +-- ,reg.create_date AS reg_create_date +-- ,reg.update_user AS reg_update_user +-- ,reg.update_date AS reg_update_date +-- ,reg.register_guid AS reg_register_guid +-- ,app.create_user AS app_create_user +-- ,app.create_date AS app_create_date +-- ,app.update_user AS app_update_user +-- ,app.update_date AS app_update_date +-- ,app.application_guid AS app_application_guid +-- ,app.file_no AS app_file_no +-- ,app.over19_ind AS app_over19_ind +-- ,app.registrar_notes AS app_registrar_notes +-- ,app.reason_denied AS app_reason_denied +-- ,app.primary_certificate_no AS app_primary_certificate_no +-- ,app.acc_cert_guid AS app_acc_cert_guid +-- ,app.register_guid AS app_register_guid +-- ,status.create_user AS appstatus_create_user +-- ,status.create_date AS appstatus_create_date +-- ,status.update_user AS appstatus_update_user +-- ,status.update_date AS appstatus_update_date +-- ,status.application_status_guid AS appstatus_application_status_guid +-- ,status.notified_date AS appstatus_notified_date +-- ,status.effective_date AS appstatus_effective_date +-- ,status.expired_date AS appstatus_expired_date +-- ,status.application_guid AS appstatus_application_guid +-- FROM registries_person per LEFT JOIN registries_contact_detail con ON per.person_guid = con.person_guid @@ -395,6 +389,7 @@ WHERE reg.registries_activity_code = 'DRILL' AND reg.registries_status_code = 'ACTIVE' ORDER BY per.person_guid, reg.register_guid, app.application_guid, status.effective_date desc ; +*/ /* 285 drillers @@ -405,3 +400,95 @@ select first_name, surname, reg_registration_no, reg_registration_date, appstatu from vw_well_driller_application; */ +/* + +gwells=> \d registries_certifying_authority_code; + Table "public.registries_certifying_authority_code" + Column | Type | Modifiers +----------------+--------------------------+----------- + create_user | character varying(60) | not null + create_date | timestamp with time zone | + update_user | character varying(60) | + update_date | timestamp with time zone | + cert_auth_code | character varying(50) | not null + description | character varying(100) | + effective_date | date | not null + expired_date | date | + + +gwells=> select * from registries_certifying_authority_code ; + create_user | create_date | update_user | update_date | cert_auth_code | description | effective_date | expired_date +---------------+------------------------+---------------+------------------------+----------------+-----------------------------------+----------------+-------------- + DATALOAD_USER | 2018-01-01 00:00:00-08 | DATALOAD_USER | 2018-01-01 00:00:00-08 | BC | Province of B.C. | 1970-01-01 | + DATALOAD_USER | 2018-01-01 00:00:00-08 | DATALOAD_USER | 2018-01-01 00:00:00-08 | CGWA | Canadian Ground Water Association | 1970-01-01 | + DATALOAD_USER | 2018-01-01 00:00:00-08 | DATALOAD_USER | 2018-01-01 00:00:00-08 | AB | Province of Alberta | 1970-01-01 | + DATALOAD_USER | 2018-01-01 00:00:00-08 | DATALOAD_USER | 2018-01-01 00:00:00-08 | SK | Province of Saskatchewan | 1970-01-01 | + DATALOAD_USER | 2018-01-01 00:00:00-08 | DATALOAD_USER | 2018-01-01 00:00:00-08 | ON | Province of Ontario | 1970-01-01 | + DATALOAD_USER | 2018-01-01 00:00:00-08 | DATALOAD_USER | 2018-01-01 00:00:00-08 | N/A | Grand-fathered | 1970-01-01 | +(6 rows) + + +gwells=> \d registries_accredited_certificate_code + Table "public.registries_accredited_certificate_code" + Column | Type | Modifiers +--------------------------+--------------------------+----------- + create_user | character varying(60) | not null + create_date | timestamp with time zone | + update_user | character varying(60) | + update_date | timestamp with time zone | + acc_cert_guid | uuid | not null + name | character varying(100) | not null + description | character varying(100) | + effective_date | date | not null + expired_date | date | + cert_auth_code | character varying(50) | not null + registries_activity_code | character varying(10) | not null + + + gwells=> select * from registries_accredited_certificate_code; + create_user | create_date | update_user | update_date | acc_cert_guid | name | description | effective_date | expired_date | cert_auth_code | registries_activity_code +---------------+------------------------+---------------+------------------------+--------------------------------------+------------------------------------------------------------+-------------+----------------+--------------+----------------+-------------------------- + DATALOAD_USER | 2018-01-01 00:00:00-08 | DATALOAD_USER | 2018-01-01 00:00:00-08 | a4b2e41c-3796-4c4c-ae28-eb6ad30202d9 | Water Well Driller Certificate | | 1970-01-01 | | BC | DRILL + DATALOAD_USER | 2018-01-01 00:00:00-08 | DATALOAD_USER | 2018-01-01 00:00:00-08 | 28bf8730-dbb7-4218-8e9f-06bd51f60161 | Geoexchange Driller Certificate | | 1970-01-01 | | BC | DRILL + DATALOAD_USER | 2018-01-01 00:00:00-08 | DATALOAD_USER | 2018-01-01 00:00:00-08 | da85087a-9764-410b-908e-b2b65f3dfb48 | Geotechnical/Environmental Driller Certificate | | 1970-01-01 | | BC | DRILL + DATALOAD_USER | 2018-01-01 00:00:00-08 | DATALOAD_USER | 2018-01-01 00:00:00-08 | 4a059930-265f-43f5-9dbb-c71862ccc5b5 | Ground Water Drilling Technician Certificate | | 1970-01-01 | | CGWA | DRILL + DATALOAD_USER | 2018-01-01 00:00:00-08 | DATALOAD_USER | 2018-01-01 00:00:00-08 | 5856eb50-7ea3-45c7-b882-a8863cc36b73 | Water Well Driller, Alberta Journeyman Certificate | | 1970-01-01 | | AB | DRILL + DATALOAD_USER | 2018-01-01 00:00:00-08 | DATALOAD_USER | 2018-01-01 00:00:00-08 | a17cc1f8-62c7-4715-93fb-b4c66986d9a7 | Water Well Driller, Saskatchewan Journeyperson Certificate | | 1970-01-01 | | SK | DRILL + DATALOAD_USER | 2018-01-01 00:00:00-08 | DATALOAD_USER | 2018-01-01 00:00:00-08 | 9349a159-6739-4623-9f7d-80b904b8f885 | Well Technician Class 1 Drilling | | 1970-01-01 | | ON | DRILL + DATALOAD_USER | 2018-01-01 00:00:00-08 | DATALOAD_USER | 2018-01-01 00:00:00-08 | e368e066-137b-491a-af2a-da3bf2936e6d | Grand-parent | | 1970-01-01 | | N/A | DRILL + DATALOAD_USER | 2018-01-01 00:00:00-08 | DATALOAD_USER | 2018-01-01 00:00:00-08 | 7bf968aa-c6e0-4f57-b4f4-58723214de80 | Well Pump Installer Certificate | | 1970-01-01 | | BC | PUMP + DATALOAD_USER | 2018-01-01 00:00:00-08 | DATALOAD_USER | 2018-01-01 00:00:00-08 | 1886daa8-e799-49f0-9034-33d02bad543d | Ground Water Pump Technician Certificate | | 1970-01-01 | | CGWA | PUMP + DATALOAD_USER | 2018-01-01 00:00:00-08 | DATALOAD_USER | 2018-01-01 00:00:00-08 | 88d5d0aa-d2aa-450a-9708-a911dce42f7f | Well Technician Certificate | | 1970-01-01 | | ON | PUMP + DATALOAD_USER | 2018-01-01 00:00:00-08 | DATALOAD_USER | 2018-01-01 00:00:00-08 | a53d3f1e-65eb-46b7-8999-e662d654df77 | Grand-parent | | 1970-01-01 | | N/A | PUMP +(12 rows) + + + +SELECT auth.cert_auth_code, auth.description, +cert.registries_activity_code, cert.name, cert.cert_auth_code +from registries_certifying_authority_code auth +, registries_accredited_certificate_code cert +where auth.cert_auth_code = cert.cert_auth_code; + + + cert_auth_code | description | registries_activity_code | name | cert_auth_code +----------------+-----------------------------------+--------------------------+------------------------------------------------------------+---------------- + BC | Province of B.C. | DRILL | Water Well Driller Certificate | BC + BC | Province of B.C. | DRILL | Geoexchange Driller Certificate | BC + BC | Province of B.C. | DRILL | Geotechnical/Environmental Driller Certificate | BC + CGWA | Canadian Ground Water Association | DRILL | Ground Water Drilling Technician Certificate | CGWA + AB | Province of Alberta | DRILL | Water Well Driller, Alberta Journeyman Certificate | AB + SK | Province of Saskatchewan | DRILL | Water Well Driller, Saskatchewan Journeyperson Certificate | SK + ON | Province of Ontario | DRILL | Well Technician Class 1 Drilling | ON + N/A | Grand-fathered | DRILL | Grand-parent | N/A + BC | Province of B.C. | PUMP | Well Pump Installer Certificate | BC + CGWA | Canadian Ground Water Association | PUMP | Ground Water Pump Technician Certificate | CGWA + ON | Province of Ontario | PUMP | Well Technician Certificate | ON + N/A | Grand-fathered | PUMP | Grand-parent | N/A +(12 rows) + + +*/ + + + diff --git a/database/scripts/replicate_bcgs.sql b/database/scripts/replicate_bcgs.sql index 15357ca5d0..50206c8132 100644 --- a/database/scripts/replicate_bcgs.sql +++ b/database/scripts/replicate_bcgs.sql @@ -7,20 +7,10 @@ BEGIN raise notice '...importing wells_screens data'; INSERT INTO bcgs_number ( - create_user - ,create_date - ,update_user - ,update_date - ,bcgs_id - ,bcgs_number + create_user, create_date, update_user, update_date, bcgs_id, bcgs_number ) SELECT - who_created - ,when_created - ,who_updated - ,when_updated - ,bcgs_id - ,bcgs_number + who_created ,when_created ,who_updated ,when_updated, bcgs_id, bcgs_number FROM WELLS.WELLS_BCGS_NUMBERS ORDER BY BCGS_NUMBER; diff --git a/database/scripts/replicate_casings.sql b/database/scripts/replicate_casings.sql index fe92f983b7..1ab6eb3cc9 100644 --- a/database/scripts/replicate_casings.sql +++ b/database/scripts/replicate_casings.sql @@ -7,19 +7,17 @@ BEGIN raise notice '...importing wells_casings data'; INSERT INTO casing( - casing_guid , -->PK - filing_number , -->FK - well_tag_number , -->FK + casing_guid , + filing_number , + well_tag_number , casing_from , casing_to , diameter , casing_material_code, wall_thickness , drive_shoe , - create_date , - update_date , - create_user , - update_user) + create_date, update_date, create_user, update_user + ) SELECT gen_random_uuid() , null , @@ -37,10 +35,7 @@ BEGIN WHEN 'Y' THEN TRUE WHEN 'N' THEN FALSE END , - casings.when_created , - casings.when_updated , - casings.who_created , - casings.who_updated + casings.when_created, casings.when_updated, casings.who_created, casings.who_updated FROM wells.wells_casings casings INNER JOIN xform_well xform ON xform.well_id=casings.well_id; diff --git a/database/scripts/replicate_lithology_descriptions.sql b/database/scripts/replicate_lithology_descriptions.sql index 37dd43648d..7131f63d8b 100644 --- a/database/scripts/replicate_lithology_descriptions.sql +++ b/database/scripts/replicate_lithology_descriptions.sql @@ -21,11 +21,8 @@ BEGIN well_yield_unit_code , lithology_observation , lithology_sequence_number , - create_user , - create_date , - update_user , - update_date - ) + create_user, create_date, update_user, update_date + ) SELECT gen_random_uuid() , null , @@ -44,10 +41,7 @@ BEGIN END AS well_yield_unit_code , wld.lithology_observation , wld.lithology_sequence_number , - wld.who_created , - wld.when_created , - COALESCE(wld.who_updated, wld.who_created) , - COALESCE(wld.when_updated, wld.when_created) + wld.who_created, wld.when_created, COALESCE(wld.who_updated, wld.who_created), COALESCE(wld.when_updated, wld.when_created) FROM wells.wells_lithology_descriptions wld INNER JOIN xform_well xform ON xform.well_id=wld.well_id INNER JOIN wells.wells_wells wells ON wells.well_id=wld.well_id; diff --git a/database/scripts/replicate_perforations.sql b/database/scripts/replicate_perforations.sql index 1da23b4e76..7c9287c6ee 100644 --- a/database/scripts/replicate_perforations.sql +++ b/database/scripts/replicate_perforations.sql @@ -14,11 +14,9 @@ BEGIN liner_to , liner_perforation_from , liner_perforation_to , - create_user , - create_date , - update_user , - update_date - ) SELECT + create_user, create_date, update_user, update_date + ) + SELECT gen_random_uuid() , xform.well_tag_number , perforations.liner_thickness , @@ -27,10 +25,7 @@ BEGIN perforations.liner_to , perforations.liner_perforation_from, perforations.liner_perforation_to , - perforations.who_created , - perforations.when_created , - perforations.who_updated , - perforations.when_updated + perforations.who_created, perforations.when_created, perforations.who_updated, perforations.when_updated FROM wells.wells_perforations perforations INNER JOIN xform_well xform ON perforations.well_id=xform.well_id WHERE NOT (liner_from is null diff --git a/database/scripts/replicate_production_data.sql b/database/scripts/replicate_production_data.sql index 849ebe2e19..40b5aabdad 100644 --- a/database/scripts/replicate_production_data.sql +++ b/database/scripts/replicate_production_data.sql @@ -16,11 +16,10 @@ BEGIN static_level , drawdown , hydro_fracturing_performed , - create_user , - create_date , - update_user , + create_user, create_date, + update_user, update_date - ) + ) SELECT gen_random_uuid() , null , @@ -38,14 +37,12 @@ BEGIN production_data.static_level , production_data.net_drawdown , false , - production_data.who_created , - production_data.when_created , + production_data.who_created, production_data.when_created, COALESCE(production_data.who_updated,production_data.who_created) , COALESCE(production_data.when_updated,production_data.when_created) FROM wells.wells_production_data production_data INNER JOIN xform_well xform ON production_data.well_id=xform.well_id; - raise notice '...wells_production_data data imported'; SELECT count(*) from production_data into row_count; raise notice '% rows loaded into the production_data table', row_count; diff --git a/database/scripts/todel.full_db_replication.sql b/database/scripts/todel.full_db_replication.sql deleted file mode 100644 index 505ac5c749..0000000000 --- a/database/scripts/todel.full_db_replication.sql +++ /dev/null @@ -1,35 +0,0 @@ -DROP FUNCTION IF EXISTS full_replicate(); - -/*** NOTE: There is no refresh of Code Tables, as that is done during GWELLS Application code deployment - This driver SQL script is meant to be run from the Database Pod, during nightly replications, - not as part of an application deployment. - - Therefore, there is a dependency on having all code tables populated, including BCGS numbers. - - On the Postgres DB Pod: - psql -d $POSTGRESQL_DATABASE -U $POSTGRESQL_USER -c 'SELECT full_replicate();' - - As a remote task: - oc exec postgresql-80-04n7h -- /bin/bash -c 'psql -d $POSTGRESQL_DATABASE -U $POSTGRESQL_USER -c "SELECT full_replicate();"' - - - - ***/ -CREATE OR REPLACE FUNCTION full_replicate() RETURNS void AS $$ -BEGIN - TRUNCATE TABLE well CASCADE; - PERFORM populate_xform(false); - PERFORM populate_well(); - PERFORM migrate_screens(); - PERFORM migrate_production(); - PERFORM migrate_casings(); - PERFORM migrate_perforations(); - PERFORM migrate_aquifers(); - PERFORM migrate_lithology(); - DROP TABLE IF EXISTS xform_well; -END; -$$ LANGUAGE plpgsql; - -COMMENT ON FUNCTION full_replicate () IS 'SQL Driver script to run full replication, without code table refresh.'; - - diff --git a/database/xfer-to-local-fdw/setup-xfer.gw.sh b/database/xfer-to-local-fdw/setup-xfer.gw.sh deleted file mode 100644 index 87d3a027dd..0000000000 --- a/database/xfer-to-local-fdw/setup-xfer.gw.sh +++ /dev/null @@ -1,256 +0,0 @@ -#!/bin/sh -# -# Fri Feb 9 08:46:56 2018 GW Shell script to copy down legacy Oracle tables via -# via the Oracle Foreign Data Wrapper on the postgres Pod. This script runs -# on a local developer workstation, calling renote 'oc exec' commands -# -# NOTE: You need to be logged in with a token, via: -# https://console.pathfinder.gov.bc.ca:8443/oauth/token/request -# -# Running on postgres database pod, as DB root access not enabled on gwells application pod - -oc project moe-gwells-test -podname=$(oc get pods -n moe-gwells-test | grep postgresql | grep Running | head -n 1 | awk '{print $1}') -oc exec ${podname} -n moe-gwells-test -- /bin/bash -c 'psql -d $POSTGRESQL_DATABASE -U $POSTGRESQL_USER << EOF -drop schema if exists xfer_wells cascade;create schema xfer_wells; -CREATE TABLE xfer_wells.gw_aquifer_attrs AS SELECT * FROM wells.gw_aquifer_attrs; -CREATE TABLE xfer_wells.gw_aquifer_attrs_old AS SELECT * FROM wells.gw_aquifer_attrs_old; -CREATE TABLE xfer_wells.gw_aquifer_wells AS SELECT * FROM wells.gw_aquifer_wells; -CREATE TABLE xfer_wells.gw_casing_material_codes AS SELECT * FROM wells.gw_casing_material_codes; -CREATE TABLE xfer_wells.gw_class_of_well_codes AS SELECT * FROM wells.gw_class_of_well_codes; -CREATE TABLE xfer_wells.gw_class_subclass_xrefs AS SELECT * FROM wells.gw_class_subclass_xrefs; -CREATE TABLE xfer_wells.gw_closure_method_codes AS SELECT * FROM wells.gw_closure_method_codes; -CREATE TABLE xfer_wells.gw_development_method_cds AS SELECT * FROM wells.gw_development_method_cds; -CREATE TABLE xfer_wells.gw_drilling_method_codes AS SELECT * FROM wells.gw_drilling_method_codes; -CREATE TABLE xfer_wells.gw_filter_pack_material_cds AS SELECT * FROM wells.gw_filter_pack_material_cds; -CREATE TABLE xfer_wells.gw_filter_pack_size_codes AS SELECT * FROM wells.gw_filter_pack_size_codes; -CREATE TABLE xfer_wells.gw_ground_elevaton_mthd_cds AS SELECT * FROM wells.gw_ground_elevaton_mthd_cds; -CREATE TABLE xfer_wells.gw_liner_material_codes AS SELECT * FROM wells.gw_liner_material_codes; -CREATE TABLE xfer_wells.gw_nts_mapsheets AS SELECT * FROM wells.gw_nts_mapsheets; -CREATE TABLE xfer_wells.gw_orientation_of_well_cds AS SELECT * FROM wells.gw_orientation_of_well_cds; -CREATE TABLE xfer_wells.gw_province_state_codes AS SELECT * FROM wells.gw_province_state_codes; -CREATE TABLE xfer_wells.gw_relative_hardness_codes AS SELECT * FROM wells.gw_relative_hardness_codes; -CREATE TABLE xfer_wells.gw_screen_assembly_type_cds AS SELECT * FROM wells.gw_screen_assembly_type_cds; -CREATE TABLE xfer_wells.gw_screen_bottom_codes AS SELECT * FROM wells.gw_screen_bottom_codes; -CREATE TABLE xfer_wells.gw_screen_intake_codes AS SELECT * FROM wells.gw_screen_intake_codes; -CREATE TABLE xfer_wells.gw_screen_material_codes AS SELECT * FROM wells.gw_screen_material_codes; -CREATE TABLE xfer_wells.gw_screen_opening_codes AS SELECT * FROM wells.gw_screen_opening_codes; -CREATE TABLE xfer_wells.gw_screen_type_codes AS SELECT * FROM wells.gw_screen_type_codes; -CREATE TABLE xfer_wells.gw_status_of_well_codes AS SELECT * FROM wells.gw_status_of_well_codes; -CREATE TABLE xfer_wells.gw_subclass_of_well_codes AS SELECT * FROM wells.gw_subclass_of_well_codes; -CREATE TABLE xfer_wells.gw_surface_seal_materil_cds AS SELECT * FROM wells.gw_surface_seal_materil_cds; -CREATE TABLE xfer_wells.gw_surface_seal_method_cds AS SELECT * FROM wells.gw_surface_seal_method_cds; -CREATE TABLE xfer_wells.gw_utm_zone_codes AS SELECT * FROM wells.gw_utm_zone_codes; -CREATE TABLE xfer_wells.gw_water_qual_chrctrstc_cds AS SELECT * FROM wells.gw_water_qual_chrctrstc_cds; -CREATE TABLE xfer_wells.gw_well_water_quality_xrefs AS SELECT * FROM wells.gw_well_water_quality_xrefs; -CREATE TABLE xfer_wells.gw_yield_estimated_mthd_cds AS SELECT * FROM wells.gw_yield_estimated_mthd_cds; -CREATE TABLE xfer_wells.wells_acceptance_status_code AS SELECT * FROM wells.wells_acceptance_status_code; -CREATE TABLE xfer_wells.wells_aquifer_lithology_codes AS SELECT * FROM wells.wells_aquifer_lithology_codes; -CREATE TABLE xfer_wells.wells_aquifer_subtype_codes AS SELECT * FROM wells.wells_aquifer_subtype_codes; -CREATE TABLE xfer_wells.wells_bcgs_numbers AS SELECT * FROM wells.wells_bcgs_numbers; -CREATE TABLE xfer_wells.wells_casings AS SELECT * FROM wells.wells_casings; -CREATE TABLE xfer_wells.wells_constant AS SELECT * FROM wells.wells_constant; -CREATE TABLE xfer_wells.wells_constr_method_codes AS SELECT * FROM wells.wells_constr_method_codes; -CREATE TABLE xfer_wells.wells_driller_codes AS SELECT * FROM wells.wells_driller_codes; -CREATE TABLE xfer_wells.wells_errors AS SELECT * FROM wells.wells_errors; -CREATE TABLE xfer_wells.wells_ground_water_authrzation AS SELECT * FROM wells.wells_ground_water_authrzation; -CREATE TABLE xfer_wells.wells_legal_land_dist_codes AS SELECT * FROM wells.wells_legal_land_dist_codes; -CREATE TABLE xfer_wells.wells_lith_description_codes AS SELECT * FROM wells.wells_lith_description_codes; -CREATE TABLE xfer_wells.wells_lithology_colour_codes AS SELECT * FROM wells.wells_lithology_colour_codes; -CREATE TABLE xfer_wells.wells_lithology_descriptions AS SELECT * FROM wells.wells_lithology_descriptions; -CREATE TABLE xfer_wells.wells_lithology_material_codes AS SELECT * FROM wells.wells_lithology_material_codes; -CREATE TABLE xfer_wells.wells_location_accuracy_code AS SELECT * FROM wells.wells_location_accuracy_code; -CREATE TABLE xfer_wells.wells_owners AS SELECT * FROM wells.wells_owners; -CREATE TABLE xfer_wells.wells_perforations AS SELECT * FROM wells.wells_perforations; -CREATE TABLE xfer_wells.wells_production_data AS SELECT * FROM wells.wells_production_data; -CREATE TABLE xfer_wells.wells_screens AS SELECT * FROM wells.wells_screens; -CREATE TABLE xfer_wells.wells_sequences AS SELECT * FROM wells.wells_sequences; -CREATE TABLE xfer_wells.wells_temp_access AS SELECT * FROM wells.wells_temp_access; -CREATE TABLE xfer_wells.wells_temp_access_lithology AS SELECT * FROM wells.wells_temp_access_lithology; -CREATE TABLE xfer_wells.wells_use_codes AS SELECT * FROM wells.wells_use_codes; -CREATE TABLE xfer_wells.wells_utm_description AS SELECT * FROM wells.wells_utm_description; -CREATE TABLE xfer_wells.wells_utm_scale_codes AS SELECT * FROM wells.wells_utm_scale_codes; -CREATE TABLE xfer_wells.wells_watershed_codes AS SELECT * FROM wells.wells_watershed_codes; -CREATE TABLE xfer_wells.wells_well_licence AS SELECT * FROM wells.wells_well_licence; -CREATE TABLE xfer_wells.wells_wells AS SELECT * FROM wells.wells_wells; -CREATE TABLE xfer_wells.wells_yield_unit_codes AS SELECT * FROM wells.wells_yield_unit_codes; -EOF' - -oc exec ${podname} -n moe-gwells-test -- /bin/bash -c 'mkdir -p /tmp/xfer;pg_dump -d $POSTGRESQL_DATABASE -Fc --no-privileges -no-tablespaces --schema=xfer_wells > /tmp/xfer/wells-legacy.$(date +"%m_%d_%Y").dmp' -oc exec ${podname} -n moe-gwells-test -- /bin/bash -c 'psql -d $POSTGRESQL_DATABASE -U $POSTGRESQL_USER -c "DROP SCHEMA xfer_wells cascade;"' - - -# Running on postgres database pod, as DB root access not enabled on gwells application pod -mkdir -p ~/tmp/xfer -oc rsync ${podname}:/tmp/xfer ~/tmp - -# NOTE -# psql -U postgres << EOF -# > drop database if exists wells; -# > create database wells; -# > drop user if exists wells; -# > create user wells; -# > alter user wells with encrypted password 'wells'; -# > grant all privileges on database wells to wells; -# > \connect wells -# > create schema wells; -# > grant usage on schema wells to wells; -# > grant all privileges on schema wells to wells; -# > alter user wells set search_path to wells; -# > EOF - -# Reset target schema on the local DB, to hold objects from pg_restore -psql -d wells -U wells << EOF -DROP SCHEMA IF EXISTS xfer_wells CASCADE; -EOF - -pg_restore -d wells --v --no-owner --no-privileges -U wells ~/tmp/xfer/wells-legacy.$(date +"%m_%d_%Y").dmp - -# Empty out FDW home schema -psql -d wells -U wells << EOF -DROP TABLE IF EXISTS wells.gw_aquifer_attrs CASCADE; -DROP TABLE IF EXISTS wells.gw_aquifer_attrs_old CASCADE; -DROP TABLE IF EXISTS wells.gw_aquifer_wells CASCADE; -DROP TABLE IF EXISTS wells.gw_casing_material_codes CASCADE; -DROP TABLE IF EXISTS wells.gw_class_of_well_codes CASCADE; -DROP TABLE IF EXISTS wells.gw_class_subclass_xrefs CASCADE; -DROP TABLE IF EXISTS wells.gw_closure_method_codes CASCADE; -DROP TABLE IF EXISTS wells.gw_development_method_cds CASCADE; -DROP TABLE IF EXISTS wells.gw_drilling_method_codes CASCADE; -DROP TABLE IF EXISTS wells.gw_filter_pack_material_cds CASCADE; -DROP TABLE IF EXISTS wells.gw_filter_pack_size_codes CASCADE; -DROP TABLE IF EXISTS wells.gw_ground_elevaton_mthd_cds CASCADE; -DROP TABLE IF EXISTS wells.gw_liner_material_codes CASCADE; -DROP TABLE IF EXISTS wells.gw_nts_mapsheets CASCADE; -DROP TABLE IF EXISTS wells.gw_orientation_of_well_cds CASCADE; -DROP TABLE IF EXISTS wells.gw_province_state_codes CASCADE; -DROP TABLE IF EXISTS wells.gw_relative_hardness_codes CASCADE; -DROP TABLE IF EXISTS wells.gw_screen_assembly_type_cds CASCADE; -DROP TABLE IF EXISTS wells.gw_screen_bottom_codes CASCADE; -DROP TABLE IF EXISTS wells.gw_screen_intake_codes CASCADE; -DROP TABLE IF EXISTS wells.gw_screen_material_codes CASCADE; -DROP TABLE IF EXISTS wells.gw_screen_opening_codes CASCADE; -DROP TABLE IF EXISTS wells.gw_screen_type_codes CASCADE; -DROP TABLE IF EXISTS wells.gw_status_of_well_codes CASCADE; -DROP TABLE IF EXISTS wells.gw_subclass_of_well_codes CASCADE; -DROP TABLE IF EXISTS wells.gw_surface_seal_materil_cds CASCADE; -DROP TABLE IF EXISTS wells.gw_surface_seal_method_cds CASCADE; -DROP TABLE IF EXISTS wells.gw_utm_zone_codes CASCADE; -DROP TABLE IF EXISTS wells.gw_water_qual_chrctrstc_cds CASCADE; -DROP TABLE IF EXISTS wells.gw_well_water_quality_xrefs CASCADE; -DROP TABLE IF EXISTS wells.gw_yield_estimated_mthd_cds CASCADE; -DROP TABLE IF EXISTS wells.wells_acceptance_status_code CASCADE; -DROP TABLE IF EXISTS wells.wells_aquifer_lithology_codes CASCADE; -DROP TABLE IF EXISTS wells.wells_aquifer_subtype_codes CASCADE; -DROP TABLE IF EXISTS wells.wells_bcgs_numbers CASCADE; -DROP TABLE IF EXISTS wells.wells_casings CASCADE; -DROP TABLE IF EXISTS wells.wells_constant CASCADE; -DROP TABLE IF EXISTS wells.wells_constr_method_codes CASCADE; -DROP TABLE IF EXISTS wells.wells_driller_codes CASCADE; -DROP TABLE IF EXISTS wells.wells_errors CASCADE; -DROP TABLE IF EXISTS wells.wells_ground_water_authrzation CASCADE; -DROP TABLE IF EXISTS wells.wells_legal_land_dist_codes CASCADE; -DROP TABLE IF EXISTS wells.wells_lith_description_codes CASCADE; -DROP TABLE IF EXISTS wells.wells_lithology_colour_codes CASCADE; -DROP TABLE IF EXISTS wells.wells_lithology_descriptions CASCADE; -DROP TABLE IF EXISTS wells.wells_lithology_material_codes CASCADE; -DROP TABLE IF EXISTS wells.wells_location_accuracy_code CASCADE; -DROP TABLE IF EXISTS wells.wells_owners CASCADE; -DROP TABLE IF EXISTS wells.wells_perforations CASCADE; -DROP TABLE IF EXISTS wells.wells_production_data CASCADE; -DROP TABLE IF EXISTS wells.wells_screens CASCADE; -DROP TABLE IF EXISTS wells.wells_sequences CASCADE; -DROP TABLE IF EXISTS wells.wells_temp_access CASCADE; -DROP TABLE IF EXISTS wells.wells_temp_access_lithology CASCADE; -DROP TABLE IF EXISTS wells.wells_use_codes CASCADE; -DROP TABLE IF EXISTS wells.wells_utm_description CASCADE; -DROP TABLE IF EXISTS wells.wells_utm_scale_codes CASCADE; -DROP TABLE IF EXISTS wells.wells_watershed_codes CASCADE; -DROP TABLE IF EXISTS wells.wells_well_licence CASCADE; -DROP TABLE IF EXISTS wells.wells_wells CASCADE; -DROP TABLE IF EXISTS wells.wells_yield_unit_codes CASCADE; -EOF - - -psql -d wells -U wells << EOF -ALTER TABLE xfer_wells.gw_aquifer_attrs SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_aquifer_attrs_old SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_aquifer_wells SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_casing_material_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_class_of_well_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_class_subclass_xrefs SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_closure_method_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_development_method_cds SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_drilling_method_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_filter_pack_material_cds SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_filter_pack_size_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_ground_elevaton_mthd_cds SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_liner_material_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_nts_mapsheets SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_orientation_of_well_cds SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_province_state_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_relative_hardness_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_screen_assembly_type_cds SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_screen_bottom_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_screen_intake_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_screen_material_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_screen_opening_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_screen_type_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_status_of_well_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_subclass_of_well_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_surface_seal_materil_cds SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_surface_seal_method_cds SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_utm_zone_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_water_qual_chrctrstc_cds SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_well_water_quality_xrefs SET SCHEMA wells; -ALTER TABLE xfer_wells.gw_yield_estimated_mthd_cds SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_acceptance_status_code SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_aquifer_lithology_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_aquifer_subtype_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_bcgs_numbers SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_casings SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_constant SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_constr_method_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_driller_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_errors SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_ground_water_authrzation SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_legal_land_dist_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_lith_description_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_lithology_colour_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_lithology_descriptions SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_lithology_material_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_location_accuracy_code SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_owners SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_perforations SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_production_data SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_screens SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_sequences SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_temp_access SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_temp_access_lithology SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_use_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_utm_description SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_utm_scale_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_watershed_codes SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_well_licence SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_wells SET SCHEMA wells; -ALTER TABLE xfer_wells.wells_yield_unit_codes SET SCHEMA wells; -CREATE UNIQUE INDEX well_tag_number_idx on wells_wells (well_tag_number); -EOF - -# NOTE -# psql -d gwells -U postgres << EOF -# create extension if not exists postgres_fdw; -# drop server if exists wells cascade; -# create server wells foreign data wrapper postgres_fdw options (host 'localhost', dbname 'wells'); -# drop user mapping if exists for public server wells; -# create user mapping for public server wells options (user 'wells', password 'wells'); -# import foreign schema wells from server wells into wells; -# grant usage on schema wells to gwells; -# grant select on all tables in schema wells to public; -# grant usage on foreign server wells to gwells; -# EOF - -# To verify that the fdw is set up correctly and visible from gwells -psql -d $POSTGRESQL_DATABASE -U $POSTGRESQL_USER -c "\d wells.*" - - diff --git a/database/xfer-to-local-fdw/setup-xfer.sh b/database/xfer-to-local-fdw/setup-xfer.sh index d02c83c367..87d3a027dd 100644 --- a/database/xfer-to-local-fdw/setup-xfer.sh +++ b/database/xfer-to-local-fdw/setup-xfer.sh @@ -108,132 +108,132 @@ pg_restore -d wells --v --no-owner --no-privileges -U wells ~/tmp/xfer/wells-leg # Empty out FDW home schema psql -d wells -U wells << EOF -DROP TABLE IF EXISTS public.gw_aquifer_attrs CASCADE; -DROP TABLE IF EXISTS public.gw_aquifer_attrs_old CASCADE; -DROP TABLE IF EXISTS public.gw_aquifer_wells CASCADE; -DROP TABLE IF EXISTS public.gw_casing_material_codes CASCADE; -DROP TABLE IF EXISTS public.gw_class_of_well_codes CASCADE; -DROP TABLE IF EXISTS public.gw_class_subclass_xrefs CASCADE; -DROP TABLE IF EXISTS public.gw_closure_method_codes CASCADE; -DROP TABLE IF EXISTS public.gw_development_method_cds CASCADE; -DROP TABLE IF EXISTS public.gw_drilling_method_codes CASCADE; -DROP TABLE IF EXISTS public.gw_filter_pack_material_cds CASCADE; -DROP TABLE IF EXISTS public.gw_filter_pack_size_codes CASCADE; -DROP TABLE IF EXISTS public.gw_ground_elevaton_mthd_cds CASCADE; -DROP TABLE IF EXISTS public.gw_liner_material_codes CASCADE; -DROP TABLE IF EXISTS public.gw_nts_mapsheets CASCADE; -DROP TABLE IF EXISTS public.gw_orientation_of_well_cds CASCADE; -DROP TABLE IF EXISTS public.gw_province_state_codes CASCADE; -DROP TABLE IF EXISTS public.gw_relative_hardness_codes CASCADE; -DROP TABLE IF EXISTS public.gw_screen_assembly_type_cds CASCADE; -DROP TABLE IF EXISTS public.gw_screen_bottom_codes CASCADE; -DROP TABLE IF EXISTS public.gw_screen_intake_codes CASCADE; -DROP TABLE IF EXISTS public.gw_screen_material_codes CASCADE; -DROP TABLE IF EXISTS public.gw_screen_opening_codes CASCADE; -DROP TABLE IF EXISTS public.gw_screen_type_codes CASCADE; -DROP TABLE IF EXISTS public.gw_status_of_well_codes CASCADE; -DROP TABLE IF EXISTS public.gw_subclass_of_well_codes CASCADE; -DROP TABLE IF EXISTS public.gw_surface_seal_materil_cds CASCADE; -DROP TABLE IF EXISTS public.gw_surface_seal_method_cds CASCADE; -DROP TABLE IF EXISTS public.gw_utm_zone_codes CASCADE; -DROP TABLE IF EXISTS public.gw_water_qual_chrctrstc_cds CASCADE; -DROP TABLE IF EXISTS public.gw_well_water_quality_xrefs CASCADE; -DROP TABLE IF EXISTS public.gw_yield_estimated_mthd_cds CASCADE; -DROP TABLE IF EXISTS public.wells_acceptance_status_code CASCADE; -DROP TABLE IF EXISTS public.wells_aquifer_lithology_codes CASCADE; -DROP TABLE IF EXISTS public.wells_aquifer_subtype_codes CASCADE; -DROP TABLE IF EXISTS public.wells_bcgs_numbers CASCADE; -DROP TABLE IF EXISTS public.wells_casings CASCADE; -DROP TABLE IF EXISTS public.wells_constant CASCADE; -DROP TABLE IF EXISTS public.wells_constr_method_codes CASCADE; -DROP TABLE IF EXISTS public.wells_driller_codes CASCADE; -DROP TABLE IF EXISTS public.wells_errors CASCADE; -DROP TABLE IF EXISTS public.wells_ground_water_authrzation CASCADE; -DROP TABLE IF EXISTS public.wells_legal_land_dist_codes CASCADE; -DROP TABLE IF EXISTS public.wells_lith_description_codes CASCADE; -DROP TABLE IF EXISTS public.wells_lithology_colour_codes CASCADE; -DROP TABLE IF EXISTS public.wells_lithology_descriptions CASCADE; -DROP TABLE IF EXISTS public.wells_lithology_material_codes CASCADE; -DROP TABLE IF EXISTS public.wells_location_accuracy_code CASCADE; -DROP TABLE IF EXISTS public.wells_owners CASCADE; -DROP TABLE IF EXISTS public.wells_perforations CASCADE; -DROP TABLE IF EXISTS public.wells_production_data CASCADE; -DROP TABLE IF EXISTS public.wells_screens CASCADE; -DROP TABLE IF EXISTS public.wells_sequences CASCADE; -DROP TABLE IF EXISTS public.wells_temp_access CASCADE; -DROP TABLE IF EXISTS public.wells_temp_access_lithology CASCADE; -DROP TABLE IF EXISTS public.wells_use_codes CASCADE; -DROP TABLE IF EXISTS public.wells_utm_description CASCADE; -DROP TABLE IF EXISTS public.wells_utm_scale_codes CASCADE; -DROP TABLE IF EXISTS public.wells_watershed_codes CASCADE; -DROP TABLE IF EXISTS public.wells_well_licence CASCADE; -DROP TABLE IF EXISTS public.wells_wells CASCADE; -DROP TABLE IF EXISTS public.wells_yield_unit_codes CASCADE; +DROP TABLE IF EXISTS wells.gw_aquifer_attrs CASCADE; +DROP TABLE IF EXISTS wells.gw_aquifer_attrs_old CASCADE; +DROP TABLE IF EXISTS wells.gw_aquifer_wells CASCADE; +DROP TABLE IF EXISTS wells.gw_casing_material_codes CASCADE; +DROP TABLE IF EXISTS wells.gw_class_of_well_codes CASCADE; +DROP TABLE IF EXISTS wells.gw_class_subclass_xrefs CASCADE; +DROP TABLE IF EXISTS wells.gw_closure_method_codes CASCADE; +DROP TABLE IF EXISTS wells.gw_development_method_cds CASCADE; +DROP TABLE IF EXISTS wells.gw_drilling_method_codes CASCADE; +DROP TABLE IF EXISTS wells.gw_filter_pack_material_cds CASCADE; +DROP TABLE IF EXISTS wells.gw_filter_pack_size_codes CASCADE; +DROP TABLE IF EXISTS wells.gw_ground_elevaton_mthd_cds CASCADE; +DROP TABLE IF EXISTS wells.gw_liner_material_codes CASCADE; +DROP TABLE IF EXISTS wells.gw_nts_mapsheets CASCADE; +DROP TABLE IF EXISTS wells.gw_orientation_of_well_cds CASCADE; +DROP TABLE IF EXISTS wells.gw_province_state_codes CASCADE; +DROP TABLE IF EXISTS wells.gw_relative_hardness_codes CASCADE; +DROP TABLE IF EXISTS wells.gw_screen_assembly_type_cds CASCADE; +DROP TABLE IF EXISTS wells.gw_screen_bottom_codes CASCADE; +DROP TABLE IF EXISTS wells.gw_screen_intake_codes CASCADE; +DROP TABLE IF EXISTS wells.gw_screen_material_codes CASCADE; +DROP TABLE IF EXISTS wells.gw_screen_opening_codes CASCADE; +DROP TABLE IF EXISTS wells.gw_screen_type_codes CASCADE; +DROP TABLE IF EXISTS wells.gw_status_of_well_codes CASCADE; +DROP TABLE IF EXISTS wells.gw_subclass_of_well_codes CASCADE; +DROP TABLE IF EXISTS wells.gw_surface_seal_materil_cds CASCADE; +DROP TABLE IF EXISTS wells.gw_surface_seal_method_cds CASCADE; +DROP TABLE IF EXISTS wells.gw_utm_zone_codes CASCADE; +DROP TABLE IF EXISTS wells.gw_water_qual_chrctrstc_cds CASCADE; +DROP TABLE IF EXISTS wells.gw_well_water_quality_xrefs CASCADE; +DROP TABLE IF EXISTS wells.gw_yield_estimated_mthd_cds CASCADE; +DROP TABLE IF EXISTS wells.wells_acceptance_status_code CASCADE; +DROP TABLE IF EXISTS wells.wells_aquifer_lithology_codes CASCADE; +DROP TABLE IF EXISTS wells.wells_aquifer_subtype_codes CASCADE; +DROP TABLE IF EXISTS wells.wells_bcgs_numbers CASCADE; +DROP TABLE IF EXISTS wells.wells_casings CASCADE; +DROP TABLE IF EXISTS wells.wells_constant CASCADE; +DROP TABLE IF EXISTS wells.wells_constr_method_codes CASCADE; +DROP TABLE IF EXISTS wells.wells_driller_codes CASCADE; +DROP TABLE IF EXISTS wells.wells_errors CASCADE; +DROP TABLE IF EXISTS wells.wells_ground_water_authrzation CASCADE; +DROP TABLE IF EXISTS wells.wells_legal_land_dist_codes CASCADE; +DROP TABLE IF EXISTS wells.wells_lith_description_codes CASCADE; +DROP TABLE IF EXISTS wells.wells_lithology_colour_codes CASCADE; +DROP TABLE IF EXISTS wells.wells_lithology_descriptions CASCADE; +DROP TABLE IF EXISTS wells.wells_lithology_material_codes CASCADE; +DROP TABLE IF EXISTS wells.wells_location_accuracy_code CASCADE; +DROP TABLE IF EXISTS wells.wells_owners CASCADE; +DROP TABLE IF EXISTS wells.wells_perforations CASCADE; +DROP TABLE IF EXISTS wells.wells_production_data CASCADE; +DROP TABLE IF EXISTS wells.wells_screens CASCADE; +DROP TABLE IF EXISTS wells.wells_sequences CASCADE; +DROP TABLE IF EXISTS wells.wells_temp_access CASCADE; +DROP TABLE IF EXISTS wells.wells_temp_access_lithology CASCADE; +DROP TABLE IF EXISTS wells.wells_use_codes CASCADE; +DROP TABLE IF EXISTS wells.wells_utm_description CASCADE; +DROP TABLE IF EXISTS wells.wells_utm_scale_codes CASCADE; +DROP TABLE IF EXISTS wells.wells_watershed_codes CASCADE; +DROP TABLE IF EXISTS wells.wells_well_licence CASCADE; +DROP TABLE IF EXISTS wells.wells_wells CASCADE; +DROP TABLE IF EXISTS wells.wells_yield_unit_codes CASCADE; EOF psql -d wells -U wells << EOF -ALTER TABLE xfer_wells.gw_aquifer_attrs SET SCHEMA public; -ALTER TABLE xfer_wells.gw_aquifer_attrs_old SET SCHEMA public; -ALTER TABLE xfer_wells.gw_aquifer_wells SET SCHEMA public; -ALTER TABLE xfer_wells.gw_casing_material_codes SET SCHEMA public; -ALTER TABLE xfer_wells.gw_class_of_well_codes SET SCHEMA public; -ALTER TABLE xfer_wells.gw_class_subclass_xrefs SET SCHEMA public; -ALTER TABLE xfer_wells.gw_closure_method_codes SET SCHEMA public; -ALTER TABLE xfer_wells.gw_development_method_cds SET SCHEMA public; -ALTER TABLE xfer_wells.gw_drilling_method_codes SET SCHEMA public; -ALTER TABLE xfer_wells.gw_filter_pack_material_cds SET SCHEMA public; -ALTER TABLE xfer_wells.gw_filter_pack_size_codes SET SCHEMA public; -ALTER TABLE xfer_wells.gw_ground_elevaton_mthd_cds SET SCHEMA public; -ALTER TABLE xfer_wells.gw_liner_material_codes SET SCHEMA public; -ALTER TABLE xfer_wells.gw_nts_mapsheets SET SCHEMA public; -ALTER TABLE xfer_wells.gw_orientation_of_well_cds SET SCHEMA public; -ALTER TABLE xfer_wells.gw_province_state_codes SET SCHEMA public; -ALTER TABLE xfer_wells.gw_relative_hardness_codes SET SCHEMA public; -ALTER TABLE xfer_wells.gw_screen_assembly_type_cds SET SCHEMA public; -ALTER TABLE xfer_wells.gw_screen_bottom_codes SET SCHEMA public; -ALTER TABLE xfer_wells.gw_screen_intake_codes SET SCHEMA public; -ALTER TABLE xfer_wells.gw_screen_material_codes SET SCHEMA public; -ALTER TABLE xfer_wells.gw_screen_opening_codes SET SCHEMA public; -ALTER TABLE xfer_wells.gw_screen_type_codes SET SCHEMA public; -ALTER TABLE xfer_wells.gw_status_of_well_codes SET SCHEMA public; -ALTER TABLE xfer_wells.gw_subclass_of_well_codes SET SCHEMA public; -ALTER TABLE xfer_wells.gw_surface_seal_materil_cds SET SCHEMA public; -ALTER TABLE xfer_wells.gw_surface_seal_method_cds SET SCHEMA public; -ALTER TABLE xfer_wells.gw_utm_zone_codes SET SCHEMA public; -ALTER TABLE xfer_wells.gw_water_qual_chrctrstc_cds SET SCHEMA public; -ALTER TABLE xfer_wells.gw_well_water_quality_xrefs SET SCHEMA public; -ALTER TABLE xfer_wells.gw_yield_estimated_mthd_cds SET SCHEMA public; -ALTER TABLE xfer_wells.wells_acceptance_status_code SET SCHEMA public; -ALTER TABLE xfer_wells.wells_aquifer_lithology_codes SET SCHEMA public; -ALTER TABLE xfer_wells.wells_aquifer_subtype_codes SET SCHEMA public; -ALTER TABLE xfer_wells.wells_bcgs_numbers SET SCHEMA public; -ALTER TABLE xfer_wells.wells_casings SET SCHEMA public; -ALTER TABLE xfer_wells.wells_constant SET SCHEMA public; -ALTER TABLE xfer_wells.wells_constr_method_codes SET SCHEMA public; -ALTER TABLE xfer_wells.wells_driller_codes SET SCHEMA public; -ALTER TABLE xfer_wells.wells_errors SET SCHEMA public; -ALTER TABLE xfer_wells.wells_ground_water_authrzation SET SCHEMA public; -ALTER TABLE xfer_wells.wells_legal_land_dist_codes SET SCHEMA public; -ALTER TABLE xfer_wells.wells_lith_description_codes SET SCHEMA public; -ALTER TABLE xfer_wells.wells_lithology_colour_codes SET SCHEMA public; -ALTER TABLE xfer_wells.wells_lithology_descriptions SET SCHEMA public; -ALTER TABLE xfer_wells.wells_lithology_material_codes SET SCHEMA public; -ALTER TABLE xfer_wells.wells_location_accuracy_code SET SCHEMA public; -ALTER TABLE xfer_wells.wells_owners SET SCHEMA public; -ALTER TABLE xfer_wells.wells_perforations SET SCHEMA public; -ALTER TABLE xfer_wells.wells_production_data SET SCHEMA public; -ALTER TABLE xfer_wells.wells_screens SET SCHEMA public; -ALTER TABLE xfer_wells.wells_sequences SET SCHEMA public; -ALTER TABLE xfer_wells.wells_temp_access SET SCHEMA public; -ALTER TABLE xfer_wells.wells_temp_access_lithology SET SCHEMA public; -ALTER TABLE xfer_wells.wells_use_codes SET SCHEMA public; -ALTER TABLE xfer_wells.wells_utm_description SET SCHEMA public; -ALTER TABLE xfer_wells.wells_utm_scale_codes SET SCHEMA public; -ALTER TABLE xfer_wells.wells_watershed_codes SET SCHEMA public; -ALTER TABLE xfer_wells.wells_well_licence SET SCHEMA public; -ALTER TABLE xfer_wells.wells_wells SET SCHEMA public; -ALTER TABLE xfer_wells.wells_yield_unit_codes SET SCHEMA public; +ALTER TABLE xfer_wells.gw_aquifer_attrs SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_aquifer_attrs_old SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_aquifer_wells SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_casing_material_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_class_of_well_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_class_subclass_xrefs SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_closure_method_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_development_method_cds SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_drilling_method_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_filter_pack_material_cds SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_filter_pack_size_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_ground_elevaton_mthd_cds SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_liner_material_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_nts_mapsheets SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_orientation_of_well_cds SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_province_state_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_relative_hardness_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_screen_assembly_type_cds SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_screen_bottom_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_screen_intake_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_screen_material_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_screen_opening_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_screen_type_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_status_of_well_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_subclass_of_well_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_surface_seal_materil_cds SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_surface_seal_method_cds SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_utm_zone_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_water_qual_chrctrstc_cds SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_well_water_quality_xrefs SET SCHEMA wells; +ALTER TABLE xfer_wells.gw_yield_estimated_mthd_cds SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_acceptance_status_code SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_aquifer_lithology_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_aquifer_subtype_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_bcgs_numbers SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_casings SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_constant SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_constr_method_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_driller_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_errors SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_ground_water_authrzation SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_legal_land_dist_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_lith_description_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_lithology_colour_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_lithology_descriptions SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_lithology_material_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_location_accuracy_code SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_owners SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_perforations SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_production_data SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_screens SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_sequences SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_temp_access SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_temp_access_lithology SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_use_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_utm_description SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_utm_scale_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_watershed_codes SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_well_licence SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_wells SET SCHEMA wells; +ALTER TABLE xfer_wells.wells_yield_unit_codes SET SCHEMA wells; CREATE UNIQUE INDEX well_tag_number_idx on wells_wells (well_tag_number); EOF diff --git a/frontend/.babelrc b/frontend/.babelrc index 9390d164e9..3d6af9a8fb 100644 --- a/frontend/.babelrc +++ b/frontend/.babelrc @@ -1,7 +1,7 @@ { "presets": [ ["env", { - "modules": false, + "modules": "commonjs", "targets": { "browsers": ["> 1%", "last 2 versions", "not ie <= 8"] } diff --git a/frontend/.envrc b/frontend/.envrc new file mode 100644 index 0000000000..c347fa2126 --- /dev/null +++ b/frontend/.envrc @@ -0,0 +1,49 @@ +# +# 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. + +# If you're using https://direnv.net/, this file assists in ensuring that your environment is set up +# correctly. + +# SET UP NVM +echo "Setting up nvm..." +export NVM_DIR="$HOME/.nvm" +. "/usr/local/opt/nvm/nvm.sh" + +# CHECK NODE VERSION +echo "Checking node version...." +read version _ <<< $(nvm current) +desired=v6.11.3 +if [ "$version" != "$desired" ] +then + echo "Wrong node version ($version), switching to $desired." + nvm use $desired +else + echo "Your node version is $desired." +fi + +# CHECK IF package.json HAS CHANGED +echo "Checking if package has changed..." +read current_md5 _ <<< $(cat package.json | md5 | awk '{print $1}') +read prev_md5 _ <<< $(cat package.md5) +if [ "$current_md5" != "$prev_md5" ] +then + echo "Package seems to have changed, running npm install." + npm install + echo "Storing md5 for current package..." + echo "$current_md5" > package.md5 +else + echo "Package doesn't seem to have changed." +fi + +# SET UP NODE ENVIRONMENT +export NODE_ENV=development diff --git a/frontend/README.md b/frontend/README.md index 9c736d6142..1d99723503 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -55,13 +55,28 @@ npm run build ``` +## Serving the web apps with Django and hot reloading + +Start webpack in listening mode (Django will listen to changes) + +```bash +# Listen for file changes +npm run watch +``` + +Start python in debug mode. +``` +# Django MUST be run in debug mode to point to the correct static files. +DJANGO_DEBUG=True python manage.py runserver +``` + ## Serving web app with hot reload for development The app can be served with hot reload as follows: ```bash # serve with hot reload at localhost:8080 -npm run dev +APPLICATION_ROOT="/" AXIOS_BASE_URL="http://localhost:8000/gwells/api/v1/" npm run dev ``` You may need to edit ```index.html``` and/or ```build/webpack.base.conf.js``` and ```build/webpack.dev.conf.js``` to load your app if you are creating a new one (currently the registries app is loaded). diff --git a/frontend/build/webpack.base.conf.js b/frontend/build/webpack.base.conf.js index 476350c190..dc381580ff 100644 --- a/frontend/build/webpack.base.conf.js +++ b/frontend/build/webpack.base.conf.js @@ -22,7 +22,9 @@ const createLintingRule = () => ({ module.exports = { context: path.resolve(__dirname, '../'), entry: { - registry: './src/registry/main.js' + registry: './src/registry/main.js', + footer: './src/footer/main.js', + header: './src/header/main.js' }, output: { path: config.build.assetsRoot, diff --git a/frontend/build/webpack.dev.conf.js b/frontend/build/webpack.dev.conf.js index 070ae221f3..bdd0dddd66 100755 --- a/frontend/build/webpack.dev.conf.js +++ b/frontend/build/webpack.dev.conf.js @@ -7,26 +7,32 @@ const path = require('path') const baseWebpackConfig = require('./webpack.base.conf') const CopyWebpackPlugin = require('copy-webpack-plugin') const HtmlWebpackPlugin = require('html-webpack-plugin') +const ExtractTextPlugin = require('extract-text-webpack-plugin') const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') const portfinder = require('portfinder') +const BundleTracker = require('webpack-bundle-tracker') const HOST = process.env.HOST const PORT = process.env.PORT && Number(process.env.PORT) const devWebpackConfig = merge(baseWebpackConfig, { module: { - rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true }) + rules: utils.styleLoaders({ + sourceMap: config.dev.cssSourceMap, + extract: true, + usePostCSS: true + }) }, // cheap-module-eval-source-map is faster for development devtool: config.dev.devtool, // these devServer options should be customized in /config/index.js devServer: { - clientLogLevel: 'warning', + clientLogLevel: 'info', historyApiFallback: { rewrites: [ - { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') }, - ], + { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') } + ] }, hot: true, contentBase: false, // since we use CopyWebpackPlugin. @@ -41,13 +47,23 @@ const devWebpackConfig = merge(baseWebpackConfig, { proxy: config.dev.proxyTable, quiet: true, // necessary for FriendlyErrorsPlugin watchOptions: { - poll: config.dev.poll, + poll: config.dev.poll } }, + plugins: [ new webpack.DefinePlugin({ 'process.env': require('../config/dev.env') }), + // extract css into its own file + new ExtractTextPlugin({ + filename: utils.assetsPath('css/[name].[contenthash].css'), + // Setting the following option to `false` will not extract CSS from codesplit chunks. + // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack. + // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`, + // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110 + allChunks: true + }), new webpack.HotModuleReplacementPlugin(), new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update. new webpack.NoEmitOnErrorsPlugin(), @@ -57,6 +73,35 @@ const devWebpackConfig = merge(baseWebpackConfig, { template: 'index.html', inject: true }), + // split vendor js into its own file + new webpack.optimize.CommonsChunkPlugin({ + name: 'vendor', + minChunks (module) { + // any required modules inside node_modules are extracted to vendor + return ( + module.resource && + /\.js$/.test(module.resource) && + module.resource.indexOf( + path.join(__dirname, '../node_modules') + ) === 0 + ) + } + }), + // extract webpack runtime and module manifest to its own file in order to + // prevent vendor hash from being updated whenever app bundle is updated + new webpack.optimize.CommonsChunkPlugin({ + name: 'manifest', + minChunks: Infinity + }), + // This instance extracts shared chunks from code splitted chunks and bundles them + // in a separate chunk, similar to the vendor chunk + // see: https://webpack.js.org/plugins/commons-chunk-plugin/#extra-async-commons-chunk + new webpack.optimize.CommonsChunkPlugin({ + name: 'app', + async: 'vendor-async', + children: true, + minChunks: 3 + }), // copy custom static assets new CopyWebpackPlugin([ { @@ -64,7 +109,8 @@ const devWebpackConfig = merge(baseWebpackConfig, { to: config.dev.assetsSubDirectory, ignore: ['.*'] } - ]) + ]), + new BundleTracker({filename: 'webpack-stats.json'}) ] }) @@ -82,11 +128,11 @@ module.exports = new Promise((resolve, reject) => { // Add FriendlyErrorsPlugin devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({ compilationSuccessInfo: { - messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`], + messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`] }, onErrors: config.dev.notifyOnErrors - ? utils.createNotifierCallback() - : undefined + ? utils.createNotifierCallback() + : undefined })) resolve(devWebpackConfig) diff --git a/frontend/build/webpack.prod.conf.js b/frontend/build/webpack.prod.conf.js index 0cd769011b..090b8cbb62 100644 --- a/frontend/build/webpack.prod.conf.js +++ b/frontend/build/webpack.prod.conf.js @@ -49,9 +49,9 @@ const webpackConfig = merge(baseWebpackConfig, { filename: utils.assetsPath('css/[name].[contenthash].css'), // Setting the following option to `false` will not extract CSS from codesplit chunks. // Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack. - // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`, + // It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`, // increasing file size: https://github.com/vuejs-templates/webpack/issues/1110 - allChunks: true, + allChunks: true }), // Compress extracted CSS. We are using this plugin so that possible // duplicated CSS from different components can be deduped. diff --git a/frontend/config/dev.env.js b/frontend/config/dev.env.js index 1e22973ae7..c20a9579eb 100644 --- a/frontend/config/dev.env.js +++ b/frontend/config/dev.env.js @@ -3,5 +3,7 @@ const merge = require('webpack-merge') const prodEnv = require('./prod.env') module.exports = merge(prodEnv, { - NODE_ENV: '"development"' + NODE_ENV: JSON.stringify('development'), + APPLICATION_ROOT: process.env.APPLICATION_ROOT ? JSON.stringify(process.env.APPLICATION_ROOT) : JSON.stringify('/gwells/registries'), + AXIOS_BASE_URL: process.env.AXIOS_BASE_URL ? JSON.stringify(process.env.APPLICATION_ROOT) : JSON.stringify('/gwells/api/v1/') }) diff --git a/frontend/config/index.js b/frontend/config/index.js index a77184caa1..a577086428 100644 --- a/frontend/config/index.js +++ b/frontend/config/index.js @@ -8,8 +8,8 @@ module.exports = { dev: { // Paths - assetsSubDirectory: 'static', - assetsPublicPath: '/', + assetsSubDirectory: 'bundles', + assetsPublicPath: '/gwells/static/vue/', proxyTable: {}, // Various Dev Server settings @@ -48,9 +48,9 @@ module.exports = { index: path.resolve(__dirname, '../dist/index.html'), // Paths - assetsRoot: path.resolve(__dirname, '../../registries/static/registries/'), + assetsRoot: path.resolve(__dirname, '../../gwells/static/vue'), assetsSubDirectory: 'bundles', - assetsPublicPath: '/gwells/static/registries/', + assetsPublicPath: '/gwells/static/vue/', /** * Source Maps diff --git a/frontend/config/prod.env.js b/frontend/config/prod.env.js index a6f997616e..376bb2149d 100644 --- a/frontend/config/prod.env.js +++ b/frontend/config/prod.env.js @@ -1,4 +1,8 @@ 'use strict' + module.exports = { - NODE_ENV: '"production"' + NODE_ENV: JSON.stringify('production'), + ENABLE_DATA_ENTRY: JSON.stringify(false), + APPLICATION_ROOT: JSON.stringify('/gwells/registries'), + AXIOS_BASE_URL: JSON.stringify('/gwells/api/v1/') } diff --git a/frontend/config/test.env.js b/frontend/config/test.env.js index c2824a307a..a89348875b 100644 --- a/frontend/config/test.env.js +++ b/frontend/config/test.env.js @@ -3,5 +3,6 @@ const merge = require('webpack-merge') const devEnv = require('./dev.env') module.exports = merge(devEnv, { - NODE_ENV: '"testing"' + NODE_ENV: JSON.stringify('testing'), + APPLICATION_ROOT: JSON.stringify('/gwells/registries') }) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 89ebd4cf80..833ef5861c 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -6024,8 +6024,7 @@ "hash-sum": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", - "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=", - "dev": true + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=" }, "hash.js": { "version": "1.1.3", @@ -6052,8 +6051,7 @@ "he": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", - "dev": true + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" }, "hmac-drbg": { "version": "1.0.1", @@ -7526,6 +7524,11 @@ "merge-stream": "1.0.1" } }, + "jquery": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", + "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==" + }, "js-base64": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.3.tgz", @@ -7916,6 +7919,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + }, "lodash.assign": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", @@ -7987,11 +7995,27 @@ "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", "dev": true }, + "lodash.template": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", + "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", + "requires": { + "lodash._reinterpolate": "3.0.0", + "lodash.templatesettings": "4.1.0" + } + }, + "lodash.templatesettings": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", + "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", + "requires": { + "lodash._reinterpolate": "3.0.0" + } + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", - "dev": true + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, "log-symbols": { "version": "2.2.0", @@ -9428,8 +9452,7 @@ "path-parse": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", - "dev": true + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" }, "path-type": { "version": "1.1.0", @@ -11992,6 +12015,12 @@ } } }, + "reflect-metadata": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.12.tgz", + "integrity": "sha512-n+IyV+nGz3+0q3/Yf1ra12KpCyi001bi4XFxSjbiWWjfqb52iTTtpGXmCCAOWWIAn9KEuFZKGqBERHmrtScZ3A==", + "dev": true + }, "regenerate": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.3.3.tgz", @@ -12209,7 +12238,6 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.5.0.tgz", "integrity": "sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==", - "dev": true, "requires": { "path-parse": "1.0.5" } @@ -12572,8 +12600,7 @@ "serialize-javascript": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz", - "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=", - "dev": true + "integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=" }, "serve-index": { "version": "1.9.1", @@ -13738,6 +13765,12 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "typescript": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.7.2.tgz", + "integrity": "sha512-p5TCYZDAO0m4G344hD+wx/LATebLWZNkkh2asWUFqSsD2OrDNhbAHuSjobrmsUmdzjJjEeZVU9g1h3O6vpstnw==", + "dev": true + }, "uglify-js": { "version": "3.3.12", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.12.tgz", @@ -14212,6 +14245,12 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.13.tgz", "integrity": "sha512-3D+lY7HTkKbtswDM4BBHgqyq+qo8IAEE8lz8va1dz3LLmttjgo0FxairO4r1iN2OBqk8o1FyL4hvzzTFEdQSEw==" }, + "vue-class-component": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/vue-class-component/-/vue-class-component-6.2.0.tgz", + "integrity": "sha512-U11yVeP5zjPSx4IU7Zas3MLC+Vy9dmufI+uLKLo8YuGQJGOihSYfh/fgNnbjMteN+hz5axjG6iC6ybMo6vGYnA==", + "dev": true + }, "vue-eslint-parser": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz", @@ -14295,11 +14334,70 @@ "vue-template-es2015-compiler": "1.6.0" } }, + "vue-property-decorator": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vue-property-decorator/-/vue-property-decorator-6.0.0.tgz", + "integrity": "sha1-u2UbKTVC4x2w0k829LAlDvCNhRU=", + "dev": true, + "requires": { + "reflect-metadata": "0.1.12", + "vue-class-component": "6.2.0" + } + }, "vue-router": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.0.1.tgz", "integrity": "sha512-vLLoY452L+JBpALMP5UHum9+7nzR9PeIBCghU9ZtJ1eWm6ieUI8Zb/DI3MYxH32bxkjzYV1LRjNv4qr8d+uX/w==" }, + "vue-select": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/vue-select/-/vue-select-2.4.0.tgz", + "integrity": "sha512-WxQc7t65ht3YSwSgcSdHFU8cSOWKpvH6n1B/Z9ua44hMB2oVcy0Mieu4qjMPrYx3AQQ8Y8F+pfNIylRZ0t3IVA==" + }, + "vue-server-renderer": { + "version": "2.5.16", + "resolved": "https://registry.npmjs.org/vue-server-renderer/-/vue-server-renderer-2.5.16.tgz", + "integrity": "sha512-IU+yq/1+TpMTPgD3S0flrtWYerkVgxo0i7AEs1AMkvtakDzNYA9m8pm28WYV0zhtL1gBREJI+3HR6QQsDOizww==", + "requires": { + "chalk": "1.1.3", + "hash-sum": "1.0.2", + "he": "1.1.1", + "lodash.template": "4.4.0", + "lodash.uniq": "4.5.0", + "resolve": "1.5.0", + "serialize-javascript": "1.4.0", + "source-map": "0.5.6" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=" + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, "vue-smoothscroll": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/vue-smoothscroll/-/vue-smoothscroll-0.1.1.tgz", diff --git a/frontend/package.json b/frontend/package.json index ad96368053..12c44f24f4 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -2,16 +2,18 @@ "name": "gwells-frontend", "version": "1.0.0", "description": "GWELLS Web App Frontend", - "author": "Steve ", + "author": "Province of British Columbia", + "license": "Apache-2.0", "private": true, "scripts": { "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", "start": "npm run dev", "unit": "jest --config test/unit/jest.conf.js --coverage", "test": "npm run unit", - "watch": "jest --config test/unit/jest.conf.js --watch --verbose", + "watch-test": "jest --config test/unit/jest.conf.js --watch --verbose", "lint": "eslint --ext .js,.vue src test/unit", - "build": "node build/build.js" + "build": "node build/build.js", + "watch": "./node_modules/.bin/webpack --config build/webpack.dev.conf.js --watch" }, "dependencies": { "axios": "^0.18.0", @@ -20,6 +22,7 @@ "keycloak-js": "^4.0.0-beta.1", "vue": "^2.5.2", "vue-router": "^3.0.1", + "vue-select": "^2.4.0", "vue-smoothscroll": "^0.1.1", "vuex": "^3.0.1" }, @@ -51,7 +54,7 @@ "eslint-plugin-promise": "^3.4.0", "eslint-plugin-standard": "^3.0.1", "eslint-plugin-vue": "^4.0.0", - "extract-text-webpack-plugin": "^3.0.0", + "extract-text-webpack-plugin": "^3.0.2", "file-loader": "^1.1.4", "friendly-errors-webpack-plugin": "^1.6.1", "html-webpack-plugin": "^2.30.1", @@ -59,6 +62,7 @@ "jest": "^22.4.2", "jest-junit": "^3.6.0", "jest-serializer-vue": "^0.3.0", + "jquery": "^3.3.1", "node-notifier": "^5.1.2", "node-sass": "^4.8.3", "optimize-css-assets-webpack-plugin": "^3.2.0", @@ -75,6 +79,7 @@ "url-loader": "^0.5.8", "vue-jest": "^2.1.0", "vue-loader": "^13.3.0", + "vue-server-renderer": "^2.5.16", "vue-style-loader": "^3.0.1", "vue-template-compiler": "^2.5.2", "webpack": "^3.6.0", @@ -84,8 +89,8 @@ "webpack-merge": "^4.1.0" }, "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" + "node": "6.11.3", + "npm": ">= 3.10.9" }, "browserslist": [ "> 1%", diff --git a/frontend/src/common/assets/css/bootstrap-theme.min.css b/frontend/src/common/assets/css/bootstrap-theme.min.css index a1a3191377..de2895baaf 100644 --- a/frontend/src/common/assets/css/bootstrap-theme.min.css +++ b/frontend/src/common/assets/css/bootstrap-theme.min.css @@ -3,4 +3,4 @@ * Copyright 2011-2018 The Bootstrap Authors * Copyright 2011-2018 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#036;--secondary:#fcba19;--success:#486446;--info:#96c0e6;--warning:#f3cd65;--danger:#d8292f;--light:#f8f9fa;--dark:#343a40;--primary-nav:#38598a;--secondary-nav:#5475a7;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:Myriad-Pro,Calibri,Arial,sans serif;--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Myriad-Pro,Calibri,Arial,sans serif;font-size:1rem;font-weight:400;line-height:1.5;color:#494949;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#1a5a96;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:blue;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:600;line-height:1.2;color:#494949}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer:before{content:"\2014 \A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:none}.col-1{flex:0 0 8.33333%;max-width:8.33333%}.col-2{flex:0 0 16.66667%;max-width:16.66667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333%;max-width:33.33333%}.col-5{flex:0 0 41.66667%;max-width:41.66667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333%;max-width:58.33333%}.col-8{flex:0 0 66.66667%;max-width:66.66667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333%;max-width:83.33333%}.col-11{flex:0 0 91.66667%;max-width:91.66667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:none}.col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:none}.col-md-1{flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:none}.col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:none}.col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8c6d4}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#a8b9ca}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#feecbf}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#fee5a6}.table-success,.table-success>td,.table-success>th{background-color:#ccd4cb}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#bec8bd}.table-info,.table-info>td,.table-info>th{background-color:#e2edf8}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#cde0f3}.table-warning,.table-warning>td,.table-warning>th{background-color:#fcf1d4}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#fae9bc}.table-danger,.table-danger>td,.table-danger>th{background-color:#f4c3c5}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f0adb0}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-primary-nav,.table-primary-nav>td,.table-primary-nav>th{background-color:#c7d1de}.table-hover .table-primary-nav:hover,.table-hover .table-primary-nav:hover>td,.table-hover .table-primary-nav:hover>th{background-color:#b7c4d5}.table-secondary-nav,.table-secondary-nav>td,.table-secondary-nav>th{background-color:#cfd8e6}.table-hover .table-secondary-nav:hover,.table-hover .table-secondary-nav:hover>td,.table-hover .table-secondary-nav:hover>th{background-color:#becadd}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label:before,.was-validated .custom-file-input:valid~.custom-file-label:before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label:before,.was-validated .custom-file-input:invalid~.custom-file-label:before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#036;border-color:#036}.btn-primary:hover{color:#fff;background-color:#002040;border-color:#001a33}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,51,102,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#036;border-color:#036}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#001a33;border-color:#001326}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,51,102,.5)}.btn-secondary{color:#212529;background-color:#fcba19;border-color:#fcba19}.btn-secondary:hover{color:#212529;background-color:#eca803;border-color:#df9f03}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(252,186,25,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#212529;background-color:#fcba19;border-color:#fcba19}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#212529;background-color:#df9f03;border-color:#d39603}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(252,186,25,.5)}.btn-success{color:#fff;background-color:#486446;border-color:#486446}.btn-success:hover{color:#fff;background-color:#384e36;border-color:#324631}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,100,70,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#486446;border-color:#486446}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#324631;border-color:#2d3f2c}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,100,70,.5)}.btn-info{color:#212529;background-color:#96c0e6;border-color:#96c0e6}.btn-info:hover{color:#212529;background-color:#77addf;border-color:#6da7dc}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(150,192,230,.5)}.btn-info.disabled,.btn-info:disabled{color:#212529;background-color:#96c0e6;border-color:#96c0e6}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#212529;background-color:#6da7dc;border-color:#63a1da}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(150,192,230,.5)}.btn-warning{color:#212529;background-color:#f3cd65;border-color:#f3cd65}.btn-warning:hover{color:#212529;background-color:#f0c142;border-color:#efbe36}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem hsla(44,86%,67%,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#f3cd65;border-color:#f3cd65}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#efbe36;border-color:#eeba2a}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem hsla(44,86%,67%,.5)}.btn-danger{color:#fff;background-color:#d8292f;border-color:#d8292f}.btn-danger:hover{color:#fff;background-color:#b92227;border-color:#ae2025}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(216,41,47,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#d8292f;border-color:#d8292f}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#ae2025;border-color:#a31e22}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,41,47,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-primary-nav{color:#fff;background-color:#38598a;border-color:#38598a}.btn-primary-nav:hover{color:#fff;background-color:#2d476f;border-color:#294266}.btn-primary-nav.focus,.btn-primary-nav:focus{box-shadow:0 0 0 .2rem rgba(56,89,138,.5)}.btn-primary-nav.disabled,.btn-primary-nav:disabled{color:#fff;background-color:#38598a;border-color:#38598a}.btn-primary-nav:not(:disabled):not(.disabled).active,.btn-primary-nav:not(:disabled):not(.disabled):active,.show>.btn-primary-nav.dropdown-toggle{color:#fff;background-color:#294266;border-color:#263c5d}.btn-primary-nav:not(:disabled):not(.disabled).active:focus,.btn-primary-nav:not(:disabled):not(.disabled):active:focus,.show>.btn-primary-nav.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(56,89,138,.5)}.btn-secondary-nav{color:#fff;background-color:#5475a7;border-color:#5475a7}.btn-secondary-nav:hover{color:#fff;background-color:#47638e;border-color:#435d85}.btn-secondary-nav.focus,.btn-secondary-nav:focus{box-shadow:0 0 0 .2rem rgba(84,117,167,.5)}.btn-secondary-nav.disabled,.btn-secondary-nav:disabled{color:#fff;background-color:#5475a7;border-color:#5475a7}.btn-secondary-nav:not(:disabled):not(.disabled).active,.btn-secondary-nav:not(:disabled):not(.disabled):active,.show>.btn-secondary-nav.dropdown-toggle{color:#fff;background-color:#435d85;border-color:#3f577d}.btn-secondary-nav:not(:disabled):not(.disabled).active:focus,.btn-secondary-nav:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary-nav.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(84,117,167,.5)}.btn-outline-primary{color:#036;background-color:transparent;background-image:none;border-color:#036}.btn-outline-primary:hover{color:#fff;background-color:#036;border-color:#036}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,51,102,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#036;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#036;border-color:#036}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,51,102,.5)}.btn-outline-secondary{color:#fcba19;background-color:transparent;background-image:none;border-color:#fcba19}.btn-outline-secondary:hover{color:#212529;background-color:#fcba19;border-color:#fcba19}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(252,186,25,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#fcba19;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#212529;background-color:#fcba19;border-color:#fcba19}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(252,186,25,.5)}.btn-outline-success{color:#486446;background-color:transparent;background-image:none;border-color:#486446}.btn-outline-success:hover{color:#fff;background-color:#486446;border-color:#486446}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(72,100,70,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#486446;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#486446;border-color:#486446}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,100,70,.5)}.btn-outline-info{color:#96c0e6;background-color:transparent;background-image:none;border-color:#96c0e6}.btn-outline-info:hover{color:#212529;background-color:#96c0e6;border-color:#96c0e6}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(150,192,230,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#96c0e6;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#212529;background-color:#96c0e6;border-color:#96c0e6}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(150,192,230,.5)}.btn-outline-warning{color:#f3cd65;background-color:transparent;background-image:none;border-color:#f3cd65}.btn-outline-warning:hover{color:#212529;background-color:#f3cd65;border-color:#f3cd65}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem hsla(44,86%,67%,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#f3cd65;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#f3cd65;border-color:#f3cd65}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem hsla(44,86%,67%,.5)}.btn-outline-danger{color:#d8292f;background-color:transparent;background-image:none;border-color:#d8292f}.btn-outline-danger:hover{color:#fff;background-color:#d8292f;border-color:#d8292f}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(216,41,47,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#d8292f;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#d8292f;border-color:#d8292f}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,41,47,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary-nav{color:#38598a;background-color:transparent;background-image:none;border-color:#38598a}.btn-outline-primary-nav:hover{color:#fff;background-color:#38598a;border-color:#38598a}.btn-outline-primary-nav.focus,.btn-outline-primary-nav:focus{box-shadow:0 0 0 .2rem rgba(56,89,138,.5)}.btn-outline-primary-nav.disabled,.btn-outline-primary-nav:disabled{color:#38598a;background-color:transparent}.btn-outline-primary-nav:not(:disabled):not(.disabled).active,.btn-outline-primary-nav:not(:disabled):not(.disabled):active,.show>.btn-outline-primary-nav.dropdown-toggle{color:#fff;background-color:#38598a;border-color:#38598a}.btn-outline-primary-nav:not(:disabled):not(.disabled).active:focus,.btn-outline-primary-nav:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary-nav.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(56,89,138,.5)}.btn-outline-secondary-nav{color:#5475a7;background-color:transparent;background-image:none;border-color:#5475a7}.btn-outline-secondary-nav:hover{color:#fff;background-color:#5475a7;border-color:#5475a7}.btn-outline-secondary-nav.focus,.btn-outline-secondary-nav:focus{box-shadow:0 0 0 .2rem rgba(84,117,167,.5)}.btn-outline-secondary-nav.disabled,.btn-outline-secondary-nav:disabled{color:#5475a7;background-color:transparent}.btn-outline-secondary-nav:not(:disabled):not(.disabled).active,.btn-outline-secondary-nav:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary-nav.dropdown-toggle{color:#fff;background-color:#5475a7;border-color:#5475a7}.btn-outline-secondary-nav:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary-nav:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary-nav.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(84,117,167,.5)}.btn-link{font-weight:400;color:#1a5a96;background-color:transparent}.btn-link:hover{color:blue;background-color:transparent}.btn-link.focus,.btn-link:focus,.btn-link:hover{text-decoration:underline;border-color:transparent}.btn-link.focus,.btn-link:focus{box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{height:0;overflow:hidden;transition:height .35s ease}.collapsing,.dropdown,.dropup{position:relative}.dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#494949;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:0 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group,.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label:before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label:before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label:before{pointer-events:none;user-select:none;background-color:#dee2e6}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background-repeat:no-repeat;background-position:50%;background-size:50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);font-size:75%}.custom-select-lg,.custom-select-sm{padding-top:.375rem;padding-bottom:.375rem}.custom-select-lg{height:calc(2.875rem + 2px);font-size:125%}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(2.25rem + 2px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control:before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-label{left:0;z-index:1;height:calc(2.25rem + 2px);background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.375rem .75rem;line-height:1.5;color:#495057}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc((2.25rem + 2px) - 1px * 2);content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0,0,0,0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255,255,255,0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:flex;flex:1 0 0%;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child),.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{column-count:3;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:transparent;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#036}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#001a33}.badge-secondary{color:#212529;background-color:#fcba19}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#212529;text-decoration:none;background-color:#df9f03}.badge-success{color:#fff;background-color:#486446}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#324631}.badge-info{color:#212529;background-color:#96c0e6}.badge-info[href]:focus,.badge-info[href]:hover{color:#212529;text-decoration:none;background-color:#6da7dc}.badge-warning{color:#212529;background-color:#f3cd65}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#efbe36}.badge-danger{color:#fff;background-color:#d8292f}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#ae2025}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.badge-primary-nav{color:#fff;background-color:#38598a}.badge-primary-nav[href]:focus,.badge-primary-nav[href]:hover{color:#fff;text-decoration:none;background-color:#294266}.badge-secondary-nav{color:#fff;background-color:#5475a7}.badge-secondary-nav[href]:focus,.badge-secondary-nav[href]:hover{color:#fff;text-decoration:none;background-color:#435d85}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#001b35;background-color:#ccd6e0;border-color:#b8c6d4}.alert-primary hr{border-top-color:#a8b9ca}.alert-primary .alert-link{color:#000102}.alert-secondary{color:#83610d;background-color:#fef1d1;border-color:#feecbf}.alert-secondary hr{border-top-color:#fee5a6}.alert-secondary .alert-link{color:#553f08}.alert-success{color:#253424;background-color:#dae0da;border-color:#ccd4cb}.alert-success hr{border-top-color:#bec8bd}.alert-success .alert-link{color:#10160f}.alert-info{color:#4e6478;background-color:#eaf2fa;border-color:#e2edf8}.alert-info hr{border-top-color:#cde0f3}.alert-info .alert-link{color:#3a4a59}.alert-warning{color:#7e6b35;background-color:#fdf5e0;border-color:#fcf1d4}.alert-warning hr{border-top-color:#fae9bc}.alert-warning .alert-link{color:#5a4d26}.alert-danger{color:#701518;background-color:#f7d4d5;border-color:#f4c3c5}.alert-danger hr{border-top-color:#f0adb0}.alert-danger .alert-link{color:#450d0f}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}.alert-primary-nav{color:#1d2e48;background-color:#d7dee8;border-color:#c7d1de}.alert-primary-nav hr{border-top-color:#b7c4d5}.alert-primary-nav .alert-link{color:#0e1724}.alert-secondary-nav{color:#2c3d57;background-color:#dde3ed;border-color:#cfd8e6}.alert-secondary-nav hr{border-top-color:#becadd}.alert-secondary-nav .alert-link{color:#1b2535}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#001b35;background-color:#b8c6d4}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#001b35;background-color:#a8b9ca}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#001b35;border-color:#001b35}.list-group-item-secondary{color:#83610d;background-color:#feecbf}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#83610d;background-color:#fee5a6}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#83610d;border-color:#83610d}.list-group-item-success{color:#253424;background-color:#ccd4cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#253424;background-color:#bec8bd}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#253424;border-color:#253424}.list-group-item-info{color:#4e6478;background-color:#e2edf8}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#4e6478;background-color:#cde0f3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#4e6478;border-color:#4e6478}.list-group-item-warning{color:#7e6b35;background-color:#fcf1d4}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#7e6b35;background-color:#fae9bc}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#7e6b35;border-color:#7e6b35}.list-group-item-danger{color:#701518;background-color:#f4c3c5}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#701518;background-color:#f0adb0}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#701518;border-color:#701518}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.list-group-item-primary-nav{color:#1d2e48;background-color:#c7d1de}.list-group-item-primary-nav.list-group-item-action:focus,.list-group-item-primary-nav.list-group-item-action:hover{color:#1d2e48;background-color:#b7c4d5}.list-group-item-primary-nav.list-group-item-action.active{color:#fff;background-color:#1d2e48;border-color:#1d2e48}.list-group-item-secondary-nav{color:#2c3d57;background-color:#cfd8e6}.list-group-item-secondary-nav.list-group-item-action:focus,.list-group-item-secondary-nav.list-group-item-action:hover{color:#2c3d57;background-color:#becadd}.list-group-item-secondary-nav.list-group-item-action.active{color:#fff;background-color:#2c3d57;border-color:#2c3d57}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal,.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-25%)}.modal.show .modal-dialog{transform:translate(0)}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:Myriad-Pro,Calibri,Arial,sans serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:Myriad-Pro,Calibri,Arial,sans serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow:after,.bs-popover-auto[x-placement^=top] .arrow:before,.bs-popover-top .arrow:after,.bs-popover-top .arrow:before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow:before,.bs-popover-top .arrow:before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow:after,.bs-popover-top .arrow:after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow:after,.bs-popover-auto[x-placement^=right] .arrow:before,.bs-popover-right .arrow:after,.bs-popover-right .arrow:before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow:before,.bs-popover-right .arrow:before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow:after,.bs-popover-right .arrow:after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow:after,.bs-popover-auto[x-placement^=bottom] .arrow:before,.bs-popover-bottom .arrow:after,.bs-popover-bottom .arrow:before{border-width:0 .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow:before,.bs-popover-bottom .arrow:before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow:after,.bs-popover-bottom .arrow:after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow:after,.bs-popover-auto[x-placement^=left] .arrow:before,.bs-popover-left .arrow:after,.bs-popover-left .arrow:before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow:before,.bs-popover-left .arrow:before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow:after,.bs-popover-left .arrow:after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;align-items:center;width:100%;transition:transform .6s ease;backface-visibility:hidden;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{transform:translateX(0)}@supports (transform-style:preserve-3d){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{transform:translateZ(0)}}.active.carousel-item-right,.carousel-item-next{transform:translateX(100%)}@supports (transform-style:preserve-3d){.active.carousel-item-right,.carousel-item-next{transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{transform:translateX(-100%)}@supports (transform-style:preserve-3d){.active.carousel-item-left,.carousel-item-prev{transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat 50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:hsla(0,0%,100%,.5)}.carousel-indicators li:before{top:-10px}.carousel-indicators li:after,.carousel-indicators li:before{position:absolute;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li:after{bottom:-10px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#036!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#001a33!important}.bg-secondary{background-color:#fcba19!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#df9f03!important}.bg-success{background-color:#486446!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#324631!important}.bg-info{background-color:#96c0e6!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#6da7dc!important}.bg-warning{background-color:#f3cd65!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#efbe36!important}.bg-danger{background-color:#d8292f!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#ae2025!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-primary-nav{background-color:#38598a!important}a.bg-primary-nav:focus,a.bg-primary-nav:hover,button.bg-primary-nav:focus,button.bg-primary-nav:hover{background-color:#294266!important}.bg-secondary-nav{background-color:#5475a7!important}a.bg-secondary-nav:focus,a.bg-secondary-nav:hover,button.bg-secondary-nav:focus,button.bg-secondary-nav:hover{background-color:#435d85!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#036!important}.border-secondary{border-color:#fcba19!important}.border-success{border-color:#486446!important}.border-info{border-color:#96c0e6!important}.border-warning{border-color:#f3cd65!important}.border-danger{border-color:#d8292f!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-primary-nav{border-color:#38598a!important}.border-secondary-nav{border-color:#5475a7!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.85714%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports (position:sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#036!important}a.text-primary:focus,a.text-primary:hover{color:#001a33!important}.text-secondary{color:#fcba19!important}a.text-secondary:focus,a.text-secondary:hover{color:#df9f03!important}.text-success{color:#486446!important}a.text-success:focus,a.text-success:hover{color:#324631!important}.text-info{color:#96c0e6!important}a.text-info:focus,a.text-info:hover{color:#6da7dc!important}.text-warning{color:#f3cd65!important}a.text-warning:focus,a.text-warning:hover{color:#efbe36!important}.text-danger{color:#d8292f!important}a.text-danger:focus,a.text-danger:hover{color:#ae2025!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-primary-nav{color:#38598a!important}a.text-primary-nav:focus,a.text-primary-nav:hover{color:#294266!important}.text-secondary-nav{color:#5475a7!important}a.text-secondary-nav:focus,a.text-secondary-nav:hover{color:#435d85!important}.text-muted{color:#6c757d!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}} \ No newline at end of file + */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#036;--secondary:#fcba19;--success:#486446;--info:#96c0e6;--warning:#f3cd65;--danger:#d8292f;--light:#f8f9fa;--dark:#343a40;--primary-nav:#38598a;--secondary-nav:#5475a7;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:Myriad-Pro,Calibri,Arial,sans serif;--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Myriad-Pro,Calibri,Arial,sans serif;font-size:1rem;font-weight:400;line-height:1.5;color:#494949;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;text-decoration:underline dotted;cursor:help;border-bottom:0}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#1a5a96;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:blue;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-family:inherit;font-weight:600;line-height:1.2;color:#494949}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:5.5rem}.display-3{font-size:4.5rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer:before{content:"\2014 \A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:flex;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;min-height:1px;padding-right:15px;padding-left:15px}.col{flex-basis:0;flex-grow:1;max-width:100%}.col-auto{flex:0 0 auto;width:auto;max-width:none}.col-1{flex:0 0 8.33333%;max-width:8.33333%}.col-2{flex:0 0 16.66667%;max-width:16.66667%}.col-3{flex:0 0 25%;max-width:25%}.col-4{flex:0 0 33.33333%;max-width:33.33333%}.col-5{flex:0 0 41.66667%;max-width:41.66667%}.col-6{flex:0 0 50%;max-width:50%}.col-7{flex:0 0 58.33333%;max-width:58.33333%}.col-8{flex:0 0 66.66667%;max-width:66.66667%}.col-9{flex:0 0 75%;max-width:75%}.col-10{flex:0 0 83.33333%;max-width:83.33333%}.col-11{flex:0 0 91.66667%;max-width:91.66667%}.col-12{flex:0 0 100%;max-width:100%}.order-first{order:-1}.order-last{order:13}.order-0{order:0}.order-1{order:1}.order-2{order:2}.order-3{order:3}.order-4{order:4}.order-5{order:5}.order-6{order:6}.order-7{order:7}.order-8{order:8}.order-9{order:9}.order-10{order:10}.order-11{order:11}.order-12{order:12}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}@media (min-width:576px){.col-sm{flex-basis:0;flex-grow:1;max-width:100%}.col-sm-auto{flex:0 0 auto;width:auto;max-width:none}.col-sm-1{flex:0 0 8.33333%;max-width:8.33333%}.col-sm-2{flex:0 0 16.66667%;max-width:16.66667%}.col-sm-3{flex:0 0 25%;max-width:25%}.col-sm-4{flex:0 0 33.33333%;max-width:33.33333%}.col-sm-5{flex:0 0 41.66667%;max-width:41.66667%}.col-sm-6{flex:0 0 50%;max-width:50%}.col-sm-7{flex:0 0 58.33333%;max-width:58.33333%}.col-sm-8{flex:0 0 66.66667%;max-width:66.66667%}.col-sm-9{flex:0 0 75%;max-width:75%}.col-sm-10{flex:0 0 83.33333%;max-width:83.33333%}.col-sm-11{flex:0 0 91.66667%;max-width:91.66667%}.col-sm-12{flex:0 0 100%;max-width:100%}.order-sm-first{order:-1}.order-sm-last{order:13}.order-sm-0{order:0}.order-sm-1{order:1}.order-sm-2{order:2}.order-sm-3{order:3}.order-sm-4{order:4}.order-sm-5{order:5}.order-sm-6{order:6}.order-sm-7{order:7}.order-sm-8{order:8}.order-sm-9{order:9}.order-sm-10{order:10}.order-sm-11{order:11}.order-sm-12{order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}}@media (min-width:768px){.col-md{flex-basis:0;flex-grow:1;max-width:100%}.col-md-auto{flex:0 0 auto;width:auto;max-width:none}.col-md-1{flex:0 0 8.33333%;max-width:8.33333%}.col-md-2{flex:0 0 16.66667%;max-width:16.66667%}.col-md-3{flex:0 0 25%;max-width:25%}.col-md-4{flex:0 0 33.33333%;max-width:33.33333%}.col-md-5{flex:0 0 41.66667%;max-width:41.66667%}.col-md-6{flex:0 0 50%;max-width:50%}.col-md-7{flex:0 0 58.33333%;max-width:58.33333%}.col-md-8{flex:0 0 66.66667%;max-width:66.66667%}.col-md-9{flex:0 0 75%;max-width:75%}.col-md-10{flex:0 0 83.33333%;max-width:83.33333%}.col-md-11{flex:0 0 91.66667%;max-width:91.66667%}.col-md-12{flex:0 0 100%;max-width:100%}.order-md-first{order:-1}.order-md-last{order:13}.order-md-0{order:0}.order-md-1{order:1}.order-md-2{order:2}.order-md-3{order:3}.order-md-4{order:4}.order-md-5{order:5}.order-md-6{order:6}.order-md-7{order:7}.order-md-8{order:8}.order-md-9{order:9}.order-md-10{order:10}.order-md-11{order:11}.order-md-12{order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}}@media (min-width:992px){.col-lg{flex-basis:0;flex-grow:1;max-width:100%}.col-lg-auto{flex:0 0 auto;width:auto;max-width:none}.col-lg-1{flex:0 0 8.33333%;max-width:8.33333%}.col-lg-2{flex:0 0 16.66667%;max-width:16.66667%}.col-lg-3{flex:0 0 25%;max-width:25%}.col-lg-4{flex:0 0 33.33333%;max-width:33.33333%}.col-lg-5{flex:0 0 41.66667%;max-width:41.66667%}.col-lg-6{flex:0 0 50%;max-width:50%}.col-lg-7{flex:0 0 58.33333%;max-width:58.33333%}.col-lg-8{flex:0 0 66.66667%;max-width:66.66667%}.col-lg-9{flex:0 0 75%;max-width:75%}.col-lg-10{flex:0 0 83.33333%;max-width:83.33333%}.col-lg-11{flex:0 0 91.66667%;max-width:91.66667%}.col-lg-12{flex:0 0 100%;max-width:100%}.order-lg-first{order:-1}.order-lg-last{order:13}.order-lg-0{order:0}.order-lg-1{order:1}.order-lg-2{order:2}.order-lg-3{order:3}.order-lg-4{order:4}.order-lg-5{order:5}.order-lg-6{order:6}.order-lg-7{order:7}.order-lg-8{order:8}.order-lg-9{order:9}.order-lg-10{order:10}.order-lg-11{order:11}.order-lg-12{order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}}@media (min-width:1200px){.col-xl{flex-basis:0;flex-grow:1;max-width:100%}.col-xl-auto{flex:0 0 auto;width:auto;max-width:none}.col-xl-1{flex:0 0 8.33333%;max-width:8.33333%}.col-xl-2{flex:0 0 16.66667%;max-width:16.66667%}.col-xl-3{flex:0 0 25%;max-width:25%}.col-xl-4{flex:0 0 33.33333%;max-width:33.33333%}.col-xl-5{flex:0 0 41.66667%;max-width:41.66667%}.col-xl-6{flex:0 0 50%;max-width:50%}.col-xl-7{flex:0 0 58.33333%;max-width:58.33333%}.col-xl-8{flex:0 0 66.66667%;max-width:66.66667%}.col-xl-9{flex:0 0 75%;max-width:75%}.col-xl-10{flex:0 0 83.33333%;max-width:83.33333%}.col-xl-11{flex:0 0 91.66667%;max-width:91.66667%}.col-xl-12{flex:0 0 100%;max-width:100%}.order-xl-first{order:-1}.order-xl-last{order:13}.order-xl-0{order:0}.order-xl-1{order:1}.order-xl-2{order:2}.order-xl-3{order:3}.order-xl-4{order:4}.order-xl-5{order:5}.order-xl-6{order:6}.order-xl-7{order:7}.order-xl-8{order:8}.order-xl-9{order:9}.order-xl-10{order:10}.order-xl-11{order:11}.order-xl-12{order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}}.table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table .table{background-color:#fff}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8c6d4}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#a8b9ca}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#feecbf}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#fee5a6}.table-success,.table-success>td,.table-success>th{background-color:#ccd4cb}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#bec8bd}.table-info,.table-info>td,.table-info>th{background-color:#e2edf8}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#cde0f3}.table-warning,.table-warning>td,.table-warning>th{background-color:#fcf1d4}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#fae9bc}.table-danger,.table-danger>td,.table-danger>th{background-color:#f4c3c5}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f0adb0}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-primary-nav,.table-primary-nav>td,.table-primary-nav>th{background-color:#c7d1de}.table-hover .table-primary-nav:hover,.table-hover .table-primary-nav:hover>td,.table-hover .table-primary-nav:hover>th{background-color:#b7c4d5}.table-secondary-nav,.table-secondary-nav>td,.table-secondary-nav>th{background-color:#cfd8e6}.table-hover .table-secondary-nav:hover,.table-hover .table-secondary-nav:hover>td,.table-hover .table-secondary-nav:hover>th{background-color:#becadd}.table-active,.table-active>td,.table-active>th,.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#212529;border-color:#32383e}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#212529}.table-dark td,.table-dark th,.table-dark thead th{border-color:#32383e}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:not([size]):not([multiple]){height:calc(2.25rem + 2px)}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm,.input-group-lg>.form-control-plaintext.form-control,.input-group-lg>.input-group-append>.form-control-plaintext.btn,.input-group-lg>.input-group-append>.form-control-plaintext.input-group-text,.input-group-lg>.input-group-prepend>.form-control-plaintext.btn,.input-group-lg>.input-group-prepend>.form-control-plaintext.input-group-text,.input-group-sm>.form-control-plaintext.form-control,.input-group-sm>.input-group-append>.form-control-plaintext.btn,.input-group-sm>.input-group-append>.form-control-plaintext.input-group-text,.input-group-sm>.input-group-prepend>.form-control-plaintext.btn,.input-group-sm>.input-group-prepend>.form-control-plaintext.input-group-text{padding-right:0;padding-left:0}.form-control-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-sm>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-sm>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-sm>select.form-control:not([size]):not([multiple]),select.form-control-sm:not([size]):not([multiple]){height:calc(1.8125rem + 2px)}.form-control-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-lg>.input-group-append>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-append>select.input-group-text:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.btn:not([size]):not([multiple]),.input-group-lg>.input-group-prepend>select.input-group-text:not([size]):not([multiple]),.input-group-lg>select.form-control:not([size]):not([multiple]),select.form-control-lg:not([size]):not([multiple]){height:calc(2.875rem + 2px)}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:flex;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:inline-flex;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(40,167,69,.8);border-radius:.2rem}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{border-color:#28a745}.custom-select.is-valid:focus,.form-control.is-valid:focus,.was-validated .custom-select:valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{background-color:#71dd8a}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(40,167,69,.25)}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label:before,.was-validated .custom-file-input:valid~.custom-file-label:before{border-color:inherit}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.5rem;margin-top:.1rem;font-size:.875rem;line-height:1;color:#fff;background-color:rgba(220,53,69,.8);border-radius:.2rem}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{border-color:#dc3545}.custom-select.is-invalid:focus,.form-control.is-invalid:focus,.was-validated .custom-select:invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{background-color:#efa2a9}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(220,53,69,.25)}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label:before,.was-validated .custom-file-input:invalid~.custom-file-label:before{border-color:inherit}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:flex;flex-flow:row wrap;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{justify-content:center}.form-inline .form-group,.form-inline label{display:flex;align-items:center;margin-bottom:0}.form-inline .form-group{flex:0 0 auto;flex-flow:row wrap}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .input-group{width:auto}.form-inline .form-check{display:flex;align-items:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{align-items:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;text-align:center;white-space:nowrap;vertical-align:middle;user-select:none;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.btn:focus,.btn:hover{text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}.btn:not(:disabled):not(.disabled){cursor:pointer}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{background-image:none}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#036;border-color:#036}.btn-primary:hover{color:#fff;background-color:#002040;border-color:#001a33}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(0,51,102,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#036;border-color:#036}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#001a33;border-color:#001326}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,51,102,.5)}.btn-secondary{color:#212529;background-color:#fcba19;border-color:#fcba19}.btn-secondary:hover{color:#212529;background-color:#eca803;border-color:#df9f03}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(252,186,25,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#212529;background-color:#fcba19;border-color:#fcba19}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#212529;background-color:#df9f03;border-color:#d39603}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(252,186,25,.5)}.btn-success{color:#fff;background-color:#486446;border-color:#486446}.btn-success:hover{color:#fff;background-color:#384e36;border-color:#324631}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,100,70,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#486446;border-color:#486446}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#324631;border-color:#2d3f2c}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,100,70,.5)}.btn-info{color:#212529;background-color:#96c0e6;border-color:#96c0e6}.btn-info:hover{color:#212529;background-color:#77addf;border-color:#6da7dc}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(150,192,230,.5)}.btn-info.disabled,.btn-info:disabled{color:#212529;background-color:#96c0e6;border-color:#96c0e6}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#212529;background-color:#6da7dc;border-color:#63a1da}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(150,192,230,.5)}.btn-warning{color:#212529;background-color:#f3cd65;border-color:#f3cd65}.btn-warning:hover{color:#212529;background-color:#f0c142;border-color:#efbe36}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem hsla(44,86%,67%,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#f3cd65;border-color:#f3cd65}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#efbe36;border-color:#eeba2a}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem hsla(44,86%,67%,.5)}.btn-danger{color:#fff;background-color:#d8292f;border-color:#d8292f}.btn-danger:hover{color:#fff;background-color:#b92227;border-color:#ae2025}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(216,41,47,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#d8292f;border-color:#d8292f}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#ae2025;border-color:#a31e22}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,41,47,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-primary-nav{color:#fff;background-color:#38598a;border-color:#38598a}.btn-primary-nav:hover{color:#fff;background-color:#2d476f;border-color:#294266}.btn-primary-nav.focus,.btn-primary-nav:focus{box-shadow:0 0 0 .2rem rgba(56,89,138,.5)}.btn-primary-nav.disabled,.btn-primary-nav:disabled{color:#fff;background-color:#38598a;border-color:#38598a}.btn-primary-nav:not(:disabled):not(.disabled).active,.btn-primary-nav:not(:disabled):not(.disabled):active,.show>.btn-primary-nav.dropdown-toggle{color:#fff;background-color:#294266;border-color:#263c5d}.btn-primary-nav:not(:disabled):not(.disabled).active:focus,.btn-primary-nav:not(:disabled):not(.disabled):active:focus,.show>.btn-primary-nav.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(56,89,138,.5)}.btn-secondary-nav{color:#fff;background-color:#5475a7;border-color:#5475a7}.btn-secondary-nav:hover{color:#fff;background-color:#47638e;border-color:#435d85}.btn-secondary-nav.focus,.btn-secondary-nav:focus{box-shadow:0 0 0 .2rem rgba(84,117,167,.5)}.btn-secondary-nav.disabled,.btn-secondary-nav:disabled{color:#fff;background-color:#5475a7;border-color:#5475a7}.btn-secondary-nav:not(:disabled):not(.disabled).active,.btn-secondary-nav:not(:disabled):not(.disabled):active,.show>.btn-secondary-nav.dropdown-toggle{color:#fff;background-color:#435d85;border-color:#3f577d}.btn-secondary-nav:not(:disabled):not(.disabled).active:focus,.btn-secondary-nav:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary-nav.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(84,117,167,.5)}.btn-outline-primary{color:#036;background-color:transparent;background-image:none;border-color:#036}.btn-outline-primary:hover{color:#fff;background-color:#036;border-color:#036}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,51,102,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#036;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#036;border-color:#036}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,51,102,.5)}.btn-outline-secondary{color:#fcba19;background-color:transparent;background-image:none;border-color:#fcba19}.btn-outline-secondary:hover{color:#212529;background-color:#fcba19;border-color:#fcba19}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(252,186,25,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#fcba19;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#212529;background-color:#fcba19;border-color:#fcba19}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(252,186,25,.5)}.btn-outline-success{color:#486446;background-color:transparent;background-image:none;border-color:#486446}.btn-outline-success:hover{color:#fff;background-color:#486446;border-color:#486446}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(72,100,70,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#486446;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#486446;border-color:#486446}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,100,70,.5)}.btn-outline-info{color:#96c0e6;background-color:transparent;background-image:none;border-color:#96c0e6}.btn-outline-info:hover{color:#212529;background-color:#96c0e6;border-color:#96c0e6}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(150,192,230,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#96c0e6;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#212529;background-color:#96c0e6;border-color:#96c0e6}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(150,192,230,.5)}.btn-outline-warning{color:#f3cd65;background-color:transparent;background-image:none;border-color:#f3cd65}.btn-outline-warning:hover{color:#212529;background-color:#f3cd65;border-color:#f3cd65}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem hsla(44,86%,67%,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#f3cd65;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#f3cd65;border-color:#f3cd65}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem hsla(44,86%,67%,.5)}.btn-outline-danger{color:#d8292f;background-color:transparent;background-image:none;border-color:#d8292f}.btn-outline-danger:hover{color:#fff;background-color:#d8292f;border-color:#d8292f}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(216,41,47,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#d8292f;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#d8292f;border-color:#d8292f}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,41,47,.5)}.btn-outline-light{color:#f8f9fa;background-color:transparent;background-image:none;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;background-color:transparent;background-image:none;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-primary-nav{color:#38598a;background-color:transparent;background-image:none;border-color:#38598a}.btn-outline-primary-nav:hover{color:#fff;background-color:#38598a;border-color:#38598a}.btn-outline-primary-nav.focus,.btn-outline-primary-nav:focus{box-shadow:0 0 0 .2rem rgba(56,89,138,.5)}.btn-outline-primary-nav.disabled,.btn-outline-primary-nav:disabled{color:#38598a;background-color:transparent}.btn-outline-primary-nav:not(:disabled):not(.disabled).active,.btn-outline-primary-nav:not(:disabled):not(.disabled):active,.show>.btn-outline-primary-nav.dropdown-toggle{color:#fff;background-color:#38598a;border-color:#38598a}.btn-outline-primary-nav:not(:disabled):not(.disabled).active:focus,.btn-outline-primary-nav:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary-nav.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(56,89,138,.5)}.btn-outline-secondary-nav{color:#5475a7;background-color:transparent;background-image:none;border-color:#5475a7}.btn-outline-secondary-nav:hover{color:#fff;background-color:#5475a7;border-color:#5475a7}.btn-outline-secondary-nav.focus,.btn-outline-secondary-nav:focus{box-shadow:0 0 0 .2rem rgba(84,117,167,.5)}.btn-outline-secondary-nav.disabled,.btn-outline-secondary-nav:disabled{color:#5475a7;background-color:transparent}.btn-outline-secondary-nav:not(:disabled):not(.disabled).active,.btn-outline-secondary-nav:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary-nav.dropdown-toggle{color:#fff;background-color:#5475a7;border-color:#5475a7}.btn-outline-secondary-nav:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary-nav:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary-nav.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(84,117,167,.5)}.btn-link{font-weight:400;color:#1a5a96;background-color:transparent}.btn-link:hover{color:blue;background-color:transparent}.btn-link.focus,.btn-link:focus,.btn-link:hover{text-decoration:underline;border-color:transparent}.btn-link.focus,.btn-link:focus{box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.show{opacity:1}.collapse{display:none}.collapse.show{display:block}tr.collapse.show{display:table-row}tbody.collapse.show{display:table-row-group}.collapsing{height:0;overflow:hidden;transition:height .35s ease}.collapsing,.dropdown,.dropup{position:relative}.dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#494949;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropup .dropdown-menu{margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;width:0;height:0;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;width:0;height:0;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;flex:0 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-group-vertical .btn+.btn,.btn-group-vertical .btn+.btn-group,.btn-group-vertical .btn-group+.btn,.btn-group-vertical .btn-group+.btn-group,.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical .btn,.btn-group-vertical .btn-group{width:100%}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control{position:relative;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file:focus,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control{margin-left:-1px}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:flex;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:before{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label,.input-group>.custom-file:not(:first-child) .custom-file-label:before{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label:before{color:#fff;background-color:#007bff}.custom-control-input:focus~.custom-control-label:before{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:active~.custom-control-label:before{color:#fff;background-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label:before{background-color:#e9ecef}.custom-control-label{margin-bottom:0}.custom-control-label:before{pointer-events:none;user-select:none;background-color:#dee2e6}.custom-control-label:after,.custom-control-label:before{position:absolute;top:.25rem;left:0;display:block;width:1rem;height:1rem;content:""}.custom-control-label:after{background-repeat:no-repeat;background-position:50%;background-size:50% 50%}.custom-checkbox .custom-control-label:before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label:before{background-color:#007bff}.custom-checkbox .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:before{background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label:before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label:before{background-color:#007bff}.custom-radio .custom-control-input:checked~.custom-control-label:after{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label:before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(2.25rem + 2px);padding:.375rem 1.75rem .375rem .75rem;line-height:1.5;color:#495057;vertical-align:middle;background:#fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center;background-size:8px 10px;border:1px solid #ced4da;border-radius:.25rem;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 5px rgba(128,189,255,.5)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size="1"]):not([size="0"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{opacity:0}.custom-select-sm{height:calc(1.8125rem + 2px);font-size:75%}.custom-select-lg,.custom-select-sm{padding-top:.375rem;padding-bottom:.375rem}.custom-select-lg{height:calc(2.875rem + 2px);font-size:125%}.custom-file{display:inline-block;margin-bottom:0}.custom-file,.custom-file-input{position:relative;width:100%;height:calc(2.25rem + 2px)}.custom-file-input{z-index:2;margin:0;opacity:0}.custom-file-input:focus~.custom-file-control{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:focus~.custom-file-control:before{border-color:#80bdff}.custom-file-input:lang(en)~.custom-file-label:after{content:"Browse"}.custom-file-label{left:0;z-index:1;height:calc(2.25rem + 2px);background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label,.custom-file-label:after{position:absolute;top:0;right:0;padding:.375rem .75rem;line-height:1.5;color:#495057}.custom-file-label:after{bottom:0;z-index:3;display:block;height:calc((2.25rem + 2px) - 1px * 2);content:"Browse";background-color:#e9ecef;border-left:1px solid #ced4da;border-radius:0 .25rem .25rem 0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:.5rem 1rem}.navbar,.navbar>.container,.navbar>.container-fluid{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler:not(:disabled):not(.disabled){cursor:pointer}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .dropup .dropdown-menu{top:auto;bottom:100%}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .dropup .dropdown-menu{top:auto;bottom:100%}}.navbar-expand{flex-flow:row nowrap;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .dropdown-menu-right{right:0;left:auto}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:flex!important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .dropup .dropdown-menu{top:auto;bottom:100%}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0,0,0,0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:hsla(0,0%,100%,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255,255,255,0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-bottom:-.75rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:flex;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:flex;flex:1 0 0%;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:flex;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:first-child .card-header,.card-group>.card:first-child .card-img-top{border-top-right-radius:0}.card-group>.card:first-child .card-footer,.card-group>.card:first-child .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:last-child .card-header,.card-group>.card:last-child .card-img-top{border-top-left-radius:0}.card-group>.card:last-child .card-footer,.card-group>.card:last-child .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:only-child{border-radius:.25rem}.card-group>.card:only-child .card-header,.card-group>.card:only-child .card-img-top{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card-group>.card:only-child .card-footer,.card-group>.card:only-child .card-img-bottom{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-group>.card:not(:first-child):not(:last-child):not(:only-child),.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-footer,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-header,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom,.card-group>.card:not(:first-child):not(:last-child):not(:only-child) .card-img-top{border-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{column-count:3;column-gap:1.25rem}.card-columns .card{display:inline-block;width:100%}}.breadcrumb{display:flex;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:transparent;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;padding-left:.5rem;color:#6c757d;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-link:not(:disabled):not(.disabled){cursor:pointer}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#036}.badge-primary[href]:focus,.badge-primary[href]:hover{color:#fff;text-decoration:none;background-color:#001a33}.badge-secondary{color:#212529;background-color:#fcba19}.badge-secondary[href]:focus,.badge-secondary[href]:hover{color:#212529;text-decoration:none;background-color:#df9f03}.badge-success{color:#fff;background-color:#486446}.badge-success[href]:focus,.badge-success[href]:hover{color:#fff;text-decoration:none;background-color:#324631}.badge-info{color:#212529;background-color:#96c0e6}.badge-info[href]:focus,.badge-info[href]:hover{color:#212529;text-decoration:none;background-color:#6da7dc}.badge-warning{color:#212529;background-color:#f3cd65}.badge-warning[href]:focus,.badge-warning[href]:hover{color:#212529;text-decoration:none;background-color:#efbe36}.badge-danger{color:#fff;background-color:#d8292f}.badge-danger[href]:focus,.badge-danger[href]:hover{color:#fff;text-decoration:none;background-color:#ae2025}.badge-light{color:#212529;background-color:#f8f9fa}.badge-light[href]:focus,.badge-light[href]:hover{color:#212529;text-decoration:none;background-color:#dae0e5}.badge-dark{color:#fff;background-color:#343a40}.badge-dark[href]:focus,.badge-dark[href]:hover{color:#fff;text-decoration:none;background-color:#1d2124}.badge-primary-nav{color:#fff;background-color:#38598a}.badge-primary-nav[href]:focus,.badge-primary-nav[href]:hover{color:#fff;text-decoration:none;background-color:#294266}.badge-secondary-nav{color:#fff;background-color:#5475a7}.badge-secondary-nav[href]:focus,.badge-secondary-nav[href]:hover{color:#fff;text-decoration:none;background-color:#435d85}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#001b35;background-color:#ccd6e0;border-color:#b8c6d4}.alert-primary hr{border-top-color:#a8b9ca}.alert-primary .alert-link{color:#000102}.alert-secondary{color:#83610d;background-color:#fef1d1;border-color:#feecbf}.alert-secondary hr{border-top-color:#fee5a6}.alert-secondary .alert-link{color:#553f08}.alert-success{color:#253424;background-color:#dae0da;border-color:#ccd4cb}.alert-success hr{border-top-color:#bec8bd}.alert-success .alert-link{color:#10160f}.alert-info{color:#4e6478;background-color:#eaf2fa;border-color:#e2edf8}.alert-info hr{border-top-color:#cde0f3}.alert-info .alert-link{color:#3a4a59}.alert-warning{color:#7e6b35;background-color:#fdf5e0;border-color:#fcf1d4}.alert-warning hr{border-top-color:#fae9bc}.alert-warning .alert-link{color:#5a4d26}.alert-danger{color:#701518;background-color:#f7d4d5;border-color:#f4c3c5}.alert-danger hr{border-top-color:#f0adb0}.alert-danger .alert-link{color:#450d0f}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}.alert-primary-nav{color:#1d2e48;background-color:#d7dee8;border-color:#c7d1de}.alert-primary-nav hr{border-top-color:#b7c4d5}.alert-primary-nav .alert-link{color:#0e1724}.alert-secondary-nav{color:#2c3d57;background-color:#dde3ed;border-color:#cfd8e6}.alert-secondary-nav hr{border-top-color:#becadd}.alert-secondary-nav .alert-link{color:#1b2535}@keyframes progress-bar-stripes{0%{background-position:1rem 0}to{background-position:0 0}}.progress{display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:flex;flex-direction:column;justify-content:center;color:#fff;text-align:center;background-color:#007bff;transition:width .6s ease}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:1rem 1rem}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}.media{display:flex;align-items:flex-start}.media-body{flex:1}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item:focus,.list-group-item:hover{z-index:1;text-decoration:none}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{border-bottom:0}.list-group-item-primary{color:#001b35;background-color:#b8c6d4}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#001b35;background-color:#a8b9ca}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#001b35;border-color:#001b35}.list-group-item-secondary{color:#83610d;background-color:#feecbf}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#83610d;background-color:#fee5a6}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#83610d;border-color:#83610d}.list-group-item-success{color:#253424;background-color:#ccd4cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#253424;background-color:#bec8bd}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#253424;border-color:#253424}.list-group-item-info{color:#4e6478;background-color:#e2edf8}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#4e6478;background-color:#cde0f3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#4e6478;border-color:#4e6478}.list-group-item-warning{color:#7e6b35;background-color:#fcf1d4}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#7e6b35;background-color:#fae9bc}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#7e6b35;border-color:#7e6b35}.list-group-item-danger{color:#701518;background-color:#f4c3c5}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#701518;background-color:#f0adb0}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#701518;border-color:#701518}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.list-group-item-primary-nav{color:#1d2e48;background-color:#c7d1de}.list-group-item-primary-nav.list-group-item-action:focus,.list-group-item-primary-nav.list-group-item-action:hover{color:#1d2e48;background-color:#b7c4d5}.list-group-item-primary-nav.list-group-item-action.active{color:#fff;background-color:#1d2e48;border-color:#1d2e48}.list-group-item-secondary-nav{color:#2c3d57;background-color:#cfd8e6}.list-group-item-secondary-nav.list-group-item-action:focus,.list-group-item-secondary-nav.list-group-item-action:hover{color:#2c3d57;background-color:#becadd}.list-group-item-secondary-nav.list-group-item-action.active{color:#fff;background-color:#2c3d57;border-color:#2c3d57}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:focus,.close:hover{color:#000;text-decoration:none;opacity:.75}.close:not(:disabled):not(.disabled){cursor:pointer}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none}.modal,.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;outline:0}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translateY(-25%)}.modal.show .modal-dialog{transform:translate(0)}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1rem;border-bottom:1px solid #e9ecef;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;align-items:center;justify-content:flex-end;padding:1rem;border-top:1px solid #e9ecef}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg{max-width:800px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:Myriad-Pro,Calibri,Arial,sans serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:Myriad-Pro,Calibri,Arial,sans serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top] .arrow,.bs-popover-top .arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top] .arrow:after,.bs-popover-auto[x-placement^=top] .arrow:before,.bs-popover-top .arrow:after,.bs-popover-top .arrow:before{border-width:.5rem .5rem 0}.bs-popover-auto[x-placement^=top] .arrow:before,.bs-popover-top .arrow:before{bottom:0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top] .arrow:after,.bs-popover-top .arrow:after{bottom:1px;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right] .arrow,.bs-popover-right .arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right] .arrow:after,.bs-popover-auto[x-placement^=right] .arrow:before,.bs-popover-right .arrow:after,.bs-popover-right .arrow:before{border-width:.5rem .5rem .5rem 0}.bs-popover-auto[x-placement^=right] .arrow:before,.bs-popover-right .arrow:before{left:0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right] .arrow:after,.bs-popover-right .arrow:after{left:1px;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom] .arrow,.bs-popover-bottom .arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom] .arrow:after,.bs-popover-auto[x-placement^=bottom] .arrow:before,.bs-popover-bottom .arrow:after,.bs-popover-bottom .arrow:before{border-width:0 .5rem .5rem}.bs-popover-auto[x-placement^=bottom] .arrow:before,.bs-popover-bottom .arrow:before{top:0;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom] .arrow:after,.bs-popover-bottom .arrow:after{top:1px;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left] .arrow,.bs-popover-left .arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left] .arrow:after,.bs-popover-auto[x-placement^=left] .arrow:before,.bs-popover-left .arrow:after,.bs-popover-left .arrow:before{border-width:.5rem 0 .5rem .5rem}.bs-popover-auto[x-placement^=left] .arrow:before,.bs-popover-left .arrow:before{right:0;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left] .arrow:after,.bs-popover-left .arrow:after{right:1px;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;color:inherit;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-item{position:relative;display:none;align-items:center;width:100%;transition:transform .6s ease;backface-visibility:hidden;perspective:1000px}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.carousel-item-next,.carousel-item-prev{position:absolute;top:0}.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{transform:translateX(0)}@supports (transform-style:preserve-3d){.carousel-item-next.carousel-item-left,.carousel-item-prev.carousel-item-right{transform:translateZ(0)}}.active.carousel-item-right,.carousel-item-next{transform:translateX(100%)}@supports (transform-style:preserve-3d){.active.carousel-item-right,.carousel-item-next{transform:translate3d(100%,0,0)}}.active.carousel-item-left,.carousel-item-prev{transform:translateX(-100%)}@supports (transform-style:preserve-3d){.active.carousel-item-left,.carousel-item-prev{transform:translate3d(-100%,0,0)}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;display:flex;align-items:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:transparent no-repeat 50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:10px;left:0;z-index:15;display:flex;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{position:relative;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;background-color:hsla(0,0%,100%,.5)}.carousel-indicators li:before{top:-10px}.carousel-indicators li:after,.carousel-indicators li:before{position:absolute;left:0;display:inline-block;width:100%;height:10px;content:""}.carousel-indicators li:after{bottom:-10px}.carousel-indicators .active{background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#036!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#001a33!important}.bg-secondary{background-color:#fcba19!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#df9f03!important}.bg-success{background-color:#486446!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#324631!important}.bg-info{background-color:#96c0e6!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#6da7dc!important}.bg-warning{background-color:#f3cd65!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#efbe36!important}.bg-danger{background-color:#d8292f!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#ae2025!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-primary-nav{background-color:#38598a!important}a.bg-primary-nav:focus,a.bg-primary-nav:hover,button.bg-primary-nav:focus,button.bg-primary-nav:hover{background-color:#294266!important}.bg-secondary-nav{background-color:#5475a7!important}a.bg-secondary-nav:focus,a.bg-secondary-nav:hover,button.bg-secondary-nav:focus,button.bg-secondary-nav:hover{background-color:#435d85!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#036!important}.border-secondary{border-color:#fcba19!important}.border-success{border-color:#486446!important}.border-info{border-color:#96c0e6!important}.border-warning{border-color:#f3cd65!important}.border-danger{border-color:#d8292f!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-primary-nav{border-color:#38598a!important}.border-secondary-nav{border-color:#5475a7!important}.border-white{border-color:#fff!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important}.rounded-right,.rounded-top{border-top-right-radius:.25rem!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:.25rem!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important}.rounded-circle{border-radius:50%!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:flex!important}.d-inline-flex{display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:flex!important}.d-print-inline-flex{display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.85714%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{flex-direction:row!important}.flex-column{flex-direction:column!important}.flex-row-reverse{flex-direction:row-reverse!important}.flex-column-reverse{flex-direction:column-reverse!important}.flex-wrap{flex-wrap:wrap!important}.flex-nowrap{flex-wrap:nowrap!important}.flex-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-start{justify-content:flex-start!important}.justify-content-end{justify-content:flex-end!important}.justify-content-center{justify-content:center!important}.justify-content-between{justify-content:space-between!important}.justify-content-around{justify-content:space-around!important}.align-items-start{align-items:flex-start!important}.align-items-end{align-items:flex-end!important}.align-items-center{align-items:center!important}.align-items-baseline{align-items:baseline!important}.align-items-stretch{align-items:stretch!important}.align-content-start{align-content:flex-start!important}.align-content-end{align-content:flex-end!important}.align-content-center{align-content:center!important}.align-content-between{align-content:space-between!important}.align-content-around{align-content:space-around!important}.align-content-stretch{align-content:stretch!important}.align-self-auto{align-self:auto!important}.align-self-start{align-self:flex-start!important}.align-self-end{align-self:flex-end!important}.align-self-center{align-self:center!important}.align-self-baseline{align-self:baseline!important}.align-self-stretch{align-self:stretch!important}@media (min-width:576px){.flex-sm-row{flex-direction:row!important}.flex-sm-column{flex-direction:column!important}.flex-sm-row-reverse{flex-direction:row-reverse!important}.flex-sm-column-reverse{flex-direction:column-reverse!important}.flex-sm-wrap{flex-wrap:wrap!important}.flex-sm-nowrap{flex-wrap:nowrap!important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-sm-start{justify-content:flex-start!important}.justify-content-sm-end{justify-content:flex-end!important}.justify-content-sm-center{justify-content:center!important}.justify-content-sm-between{justify-content:space-between!important}.justify-content-sm-around{justify-content:space-around!important}.align-items-sm-start{align-items:flex-start!important}.align-items-sm-end{align-items:flex-end!important}.align-items-sm-center{align-items:center!important}.align-items-sm-baseline{align-items:baseline!important}.align-items-sm-stretch{align-items:stretch!important}.align-content-sm-start{align-content:flex-start!important}.align-content-sm-end{align-content:flex-end!important}.align-content-sm-center{align-content:center!important}.align-content-sm-between{align-content:space-between!important}.align-content-sm-around{align-content:space-around!important}.align-content-sm-stretch{align-content:stretch!important}.align-self-sm-auto{align-self:auto!important}.align-self-sm-start{align-self:flex-start!important}.align-self-sm-end{align-self:flex-end!important}.align-self-sm-center{align-self:center!important}.align-self-sm-baseline{align-self:baseline!important}.align-self-sm-stretch{align-self:stretch!important}}@media (min-width:768px){.flex-md-row{flex-direction:row!important}.flex-md-column{flex-direction:column!important}.flex-md-row-reverse{flex-direction:row-reverse!important}.flex-md-column-reverse{flex-direction:column-reverse!important}.flex-md-wrap{flex-wrap:wrap!important}.flex-md-nowrap{flex-wrap:nowrap!important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-md-start{justify-content:flex-start!important}.justify-content-md-end{justify-content:flex-end!important}.justify-content-md-center{justify-content:center!important}.justify-content-md-between{justify-content:space-between!important}.justify-content-md-around{justify-content:space-around!important}.align-items-md-start{align-items:flex-start!important}.align-items-md-end{align-items:flex-end!important}.align-items-md-center{align-items:center!important}.align-items-md-baseline{align-items:baseline!important}.align-items-md-stretch{align-items:stretch!important}.align-content-md-start{align-content:flex-start!important}.align-content-md-end{align-content:flex-end!important}.align-content-md-center{align-content:center!important}.align-content-md-between{align-content:space-between!important}.align-content-md-around{align-content:space-around!important}.align-content-md-stretch{align-content:stretch!important}.align-self-md-auto{align-self:auto!important}.align-self-md-start{align-self:flex-start!important}.align-self-md-end{align-self:flex-end!important}.align-self-md-center{align-self:center!important}.align-self-md-baseline{align-self:baseline!important}.align-self-md-stretch{align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{flex-direction:row!important}.flex-lg-column{flex-direction:column!important}.flex-lg-row-reverse{flex-direction:row-reverse!important}.flex-lg-column-reverse{flex-direction:column-reverse!important}.flex-lg-wrap{flex-wrap:wrap!important}.flex-lg-nowrap{flex-wrap:nowrap!important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-lg-start{justify-content:flex-start!important}.justify-content-lg-end{justify-content:flex-end!important}.justify-content-lg-center{justify-content:center!important}.justify-content-lg-between{justify-content:space-between!important}.justify-content-lg-around{justify-content:space-around!important}.align-items-lg-start{align-items:flex-start!important}.align-items-lg-end{align-items:flex-end!important}.align-items-lg-center{align-items:center!important}.align-items-lg-baseline{align-items:baseline!important}.align-items-lg-stretch{align-items:stretch!important}.align-content-lg-start{align-content:flex-start!important}.align-content-lg-end{align-content:flex-end!important}.align-content-lg-center{align-content:center!important}.align-content-lg-between{align-content:space-between!important}.align-content-lg-around{align-content:space-around!important}.align-content-lg-stretch{align-content:stretch!important}.align-self-lg-auto{align-self:auto!important}.align-self-lg-start{align-self:flex-start!important}.align-self-lg-end{align-self:flex-end!important}.align-self-lg-center{align-self:center!important}.align-self-lg-baseline{align-self:baseline!important}.align-self-lg-stretch{align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{flex-direction:row!important}.flex-xl-column{flex-direction:column!important}.flex-xl-row-reverse{flex-direction:row-reverse!important}.flex-xl-column-reverse{flex-direction:column-reverse!important}.flex-xl-wrap{flex-wrap:wrap!important}.flex-xl-nowrap{flex-wrap:nowrap!important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse!important}.justify-content-xl-start{justify-content:flex-start!important}.justify-content-xl-end{justify-content:flex-end!important}.justify-content-xl-center{justify-content:center!important}.justify-content-xl-between{justify-content:space-between!important}.justify-content-xl-around{justify-content:space-around!important}.align-items-xl-start{align-items:flex-start!important}.align-items-xl-end{align-items:flex-end!important}.align-items-xl-center{align-items:center!important}.align-items-xl-baseline{align-items:baseline!important}.align-items-xl-stretch{align-items:stretch!important}.align-content-xl-start{align-content:flex-start!important}.align-content-xl-end{align-content:flex-end!important}.align-content-xl-center{align-content:center!important}.align-content-xl-between{align-content:space-between!important}.align-content-xl-around{align-content:space-around!important}.align-content-xl-stretch{align-content:stretch!important}.align-self-xl-auto{align-self:auto!important}.align-self-xl-start{align-self:flex-start!important}.align-self-xl-end{align-self:flex-end!important}.align-self-xl-center{align-self:center!important}.align-self-xl-baseline{align-self:baseline!important}.align-self-xl-stretch{align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports (position:sticky){.sticky-top{position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;clip-path:inset(50%);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal;clip-path:none}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-justify{text-align:justify!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#036!important}a.text-primary:focus,a.text-primary:hover{color:#001a33!important}.text-secondary{color:#fcba19!important}a.text-secondary:focus,a.text-secondary:hover{color:#df9f03!important}.text-success{color:#486446!important}a.text-success:focus,a.text-success:hover{color:#324631!important}.text-info{color:#96c0e6!important}a.text-info:focus,a.text-info:hover{color:#6da7dc!important}.text-warning{color:#f3cd65!important}a.text-warning:focus,a.text-warning:hover{color:#efbe36!important}.text-danger{color:#d8292f!important}a.text-danger:focus,a.text-danger:hover{color:#ae2025!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#dae0e5!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#1d2124!important}.text-primary-nav{color:#38598a!important}a.text-primary-nav:focus,a.text-primary-nav:hover{color:#294266!important}.text-secondary-nav{color:#5475a7!important}a.text-secondary-nav:focus,a.text-secondary-nav:hover{color:#435d85!important}.text-muted{color:#6c757d!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,:after,:before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}} \ No newline at end of file diff --git a/frontend/src/common/assets/images/17_gov3_bc_logo_transparent.svg b/frontend/src/common/assets/images/17_gov3_bc_logo_transparent.svg new file mode 100644 index 0000000000..36160ee8d0 --- /dev/null +++ b/frontend/src/common/assets/images/17_gov3_bc_logo_transparent.svg @@ -0,0 +1,34 @@ + + + + + 17_gov3_bc_logo + + + + + + + + + diff --git a/frontend/src/common/components/Auth.vue b/frontend/src/common/components/Auth.vue index 8ae753ccca..c104a26818 100644 --- a/frontend/src/common/components/Auth.vue +++ b/frontend/src/common/components/Auth.vue @@ -4,7 +4,7 @@
- {{ keycloak.tokenParsed.name }} + {{ keycloak.tokenParsed.name }}
diff --git a/frontend/src/common/components/Footer.vue b/frontend/src/common/components/Footer.vue index f088984a45..df43ac4e35 100644 --- a/frontend/src/common/components/Footer.vue +++ b/frontend/src/common/components/Footer.vue @@ -4,13 +4,17 @@ - Disclaimer + Home - Privacy + About gov.bc.ca - Accessibility + Disclaimer - Copyright + Privacy + + Accessibility + + Copyright Contact Us diff --git a/frontend/src/common/components/Header.vue b/frontend/src/common/components/Header.vue index e2df6c434f..65eae19fca 100644 --- a/frontend/src/common/components/Header.vue +++ b/frontend/src/common/components/Header.vue @@ -1,14 +1,19 @@