From 358736f3b0182e7e2686727358b36040b9333dde Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 20 Feb 2024 10:42:50 +0000 Subject: [PATCH] Deploy to GitHub pages --- refs/pull/212/merge/en/.buildinfo | 4 + .../212/merge/en/.doctrees/algorithms.doctree | Bin 0 -> 54045 bytes .../merge/en/.doctrees/backup-restore.doctree | Bin 0 -> 30401 bytes .../212/merge/en/.doctrees/contribute.doctree | Bin 0 -> 38601 bytes .../merge/en/.doctrees/defined-terms.doctree | Bin 0 -> 48336 bytes .../212/merge/en/.doctrees/environment.pickle | Bin 0 -> 91514 bytes .../pull/212/merge/en/.doctrees/index.doctree | Bin 0 -> 34394 bytes .../en/.doctrees/pid-eaa-data-model.doctree | Bin 0 -> 263577 bytes .../en/.doctrees/pid-eaa-issuance.doctree | Bin 0 -> 410209 bytes .../merge/en/.doctrees/proximity-flow.doctree | Bin 0 -> 89138 bytes .../212/merge/en/.doctrees/pseudonyms.doctree | Bin 0 -> 30353 bytes .../.doctrees/relying-party-solution.doctree | Bin 0 -> 236862 bytes .../merge/en/.doctrees/remote-flow.doctree | Bin 0 -> 147784 bytes .../en/.doctrees/revocation-lists.doctree | Bin 0 -> 30425 bytes .../en/.doctrees/ssi-introduction.doctree | Bin 0 -> 38570 bytes .../212/merge/en/.doctrees/standards.doctree | Bin 0 -> 49646 bytes .../pull/212/merge/en/.doctrees/trust.doctree | Bin 0 -> 152491 bytes .../en/.doctrees/wallet-attestation.doctree | Bin 0 -> 92731 bytes .../en/.doctrees/wallet-solution.doctree | Bin 0 -> 75609 bytes .../en/_images/Eo_circle_green_checkmark.svg | 2 + .../en/_images/Eo_circle_red_letter-x.svg | 1 + .../High-Level-Flow-ITWallet-PID-Issuance.svg | 3 + ...h-Level-Flow-ITWallet-Presentation-ISO.svg | 1 + ...High-Level-Flow-ITWallet-QEAA-Issuance.svg | 3 + ...-Level-Flow-ITWallet-PID-QEAA-Issuance.svg | 2 + .../_images/cross_device_auth_seq_diagram.svg | 1 + ...w_sequence_wallet_instance_attestation.svg | 1 + ...tatic_view_wallet_instance_attestation.svg | 1 + .../pull/212/merge/en/_images/trust-roles.svg | 426 + .../212/merge/en/_images/verifier_qr_code.svg | 2 + .../212/merge/en/_sources/algorithms.rst.txt | 98 + .../merge/en/_sources/backup-restore.rst.txt | 57 + .../212/merge/en/_sources/contribute.rst.txt | 61 + .../merge/en/_sources/defined-terms.rst.txt | 83 + refs/pull/212/merge/en/_sources/index.rst.txt | 57 + .../en/_sources/pid-eaa-data-model.rst.txt | 1149 ++ .../en/_sources/pid-eaa-issuance.rst.txt | 1107 ++ .../merge/en/_sources/proximity-flow.rst.txt | 412 + .../212/merge/en/_sources/pseudonyms.rst.txt | 57 + .../_sources/relying-party-solution.rst.txt | 21 + .../212/merge/en/_sources/remote-flow.rst.txt | 731 ++ .../en/_sources/revocation-lists.rst.txt | 57 + .../en/_sources/ssi-introduction.rst.txt | 41 + .../212/merge/en/_sources/standards.rst.txt | 1 + refs/pull/212/merge/en/_sources/trust.rst.txt | 632 + .../en/_sources/wallet-attestation.rst.txt | 351 + .../merge/en/_sources/wallet-solution.rst.txt | 275 + .../_sphinx_javascript_frameworks_compat.js | 134 + refs/pull/212/merge/en/_static/basic.css | 932 ++ refs/pull/212/merge/en/_static/css/theme.css | 1 + .../212/merge/en/_static/data/glossary.json | 1 + refs/pull/212/merge/en/_static/doctools.js | 264 + .../merge/en/_static/documentation_options.js | 14 + refs/pull/212/merge/en/_static/file.png | Bin 0 -> 286 bytes .../212/merge/en/_static/font/docs-italia.eot | Bin 0 -> 11192 bytes .../212/merge/en/_static/font/docs-italia.svg | 68 + .../212/merge/en/_static/font/docs-italia.ttf | Bin 0 -> 11012 bytes .../merge/en/_static/font/docs-italia.woff | Bin 0 -> 11092 bytes .../en/_static/font/italia-icon-font.eot | Bin 0 -> 23672 bytes .../en/_static/font/italia-icon-font.svg | 134 + .../en/_static/font/italia-icon-font.ttf | Bin 0 -> 23472 bytes .../en/_static/font/italia-icon-font.woff | Bin 0 -> 13888 bytes .../en/_static/font/italia-icon-font.woff2 | Bin 0 -> 11952 bytes .../212/merge/en/_static/images/agid-logo.svg | 25 + refs/pull/212/merge/en/_static/images/may.svg | 37 + .../pull/212/merge/en/_static/images/must.svg | 71 + .../212/merge/en/_static/images/must_not.svg | 65 + .../212/merge/en/_static/images/should.svg | 52 + .../merge/en/_static/images/should_not.svg | 52 + .../en/_static/images/team-digitale-logo.svg | 15 + .../pull/212/merge/en/_static/jquery-3.6.0.js | 10881 ++++++++++++++++ refs/pull/212/merge/en/_static/jquery.js | 2 + refs/pull/212/merge/en/_static/js/theme.js | 1 + .../212/merge/en/_static/language_data.js | 199 + refs/pull/212/merge/en/_static/minus.png | Bin 0 -> 90 bytes refs/pull/212/merge/en/_static/pkce.py | 21 + refs/pull/212/merge/en/_static/plus.png | Bin 0 -> 90 bytes refs/pull/212/merge/en/_static/pygments.css | 74 + refs/pull/212/merge/en/_static/searchtools.js | 531 + .../212/merge/en/_static/underscore-1.13.1.js | 2042 +++ refs/pull/212/merge/en/_static/underscore.js | 6 + refs/pull/212/merge/en/algorithms.html | 1530 +++ refs/pull/212/merge/en/backup-restore.html | 1453 +++ refs/pull/212/merge/en/contribute.html | 1455 +++ refs/pull/212/merge/en/defined-terms.html | 1512 +++ refs/pull/212/merge/en/genindex.html | 1472 +++ refs/pull/212/merge/en/index.html | 1610 +++ refs/pull/212/merge/en/objects.inv | Bin 0 -> 1325 bytes .../pull/212/merge/en/pid-eaa-data-model.html | 2664 ++++ refs/pull/212/merge/en/pid-eaa-issuance.html | 2647 ++++ refs/pull/212/merge/en/proximity-flow.html | 1816 +++ refs/pull/212/merge/en/pseudonyms.html | 1453 +++ .../212/merge/en/relying-party-solution.html | 2570 ++++ refs/pull/212/merge/en/remote-flow.html | 2127 +++ refs/pull/212/merge/en/revocation-lists.html | 1453 +++ refs/pull/212/merge/en/search.html | 1412 ++ refs/pull/212/merge/en/searchindex.js | 1 + refs/pull/212/merge/en/ssi-introduction.html | 1436 ++ refs/pull/212/merge/en/standards.html | 1483 +++ refs/pull/212/merge/en/trust.html | 2076 +++ .../pull/212/merge/en/wallet-attestation.html | 1910 +++ refs/pull/212/merge/en/wallet-solution.html | 1700 +++ refs/pull/212/merge/it/.buildinfo | 4 + .../merge/it/.doctrees/backup-restore.doctree | Bin 0 -> 30401 bytes .../212/merge/it/.doctrees/contribute.doctree | Bin 0 -> 25859 bytes .../merge/it/.doctrees/defined-terms.doctree | Bin 0 -> 37003 bytes .../212/merge/it/.doctrees/environment.pickle | Bin 0 -> 57405 bytes .../pull/212/merge/it/.doctrees/index.doctree | Bin 0 -> 30418 bytes .../212/merge/it/.doctrees/issuance.doctree | Bin 0 -> 30329 bytes .../merge/it/.doctrees/pid-eaa-data.doctree | Bin 0 -> 30377 bytes .../it/.doctrees/pid-eaa-mdoc-cbor.doctree | Bin 0 -> 30437 bytes .../merge/it/.doctrees/pid-eaa-sd-jwt.doctree | Bin 0 -> 30401 bytes .../212/merge/it/.doctrees/pseudonyms.doctree | Bin 0 -> 30353 bytes .../it/.doctrees/revocation-lists.doctree | Bin 0 -> 30425 bytes .../it/.doctrees/ssi-introduction.doctree | Bin 0 -> 30425 bytes .../212/merge/it/.doctrees/standards.doctree | Bin 0 -> 25446 bytes .../pull/212/merge/it/.doctrees/trust.doctree | Bin 0 -> 30293 bytes .../wallet-instance-attestation.doctree | Bin 0 -> 30557 bytes .../it/.doctrees/wallet-solution.doctree | Bin 0 -> 30413 bytes .../it/_images/Eo_circle_green_checkmark.svg | 2 + .../it/_images/Eo_circle_red_letter-x.svg | 1 + .../merge/it/_sources/backup-restore.rst.txt | 57 + .../212/merge/it/_sources/contribute.rst.txt | 8 + .../merge/it/_sources/defined-terms.rst.txt | 89 + refs/pull/212/merge/it/_sources/index.rst.txt | 55 + .../212/merge/it/_sources/issuance.rst.txt | 57 + .../merge/it/_sources/pid-eaa-data.rst.txt | 57 + .../it/_sources/pid-eaa-mdoc-cbor.rst.txt | 57 + .../merge/it/_sources/pid-eaa-sd-jwt.rst.txt | 57 + .../212/merge/it/_sources/pseudonyms.rst.txt | 57 + .../it/_sources/revocation-lists.rst.txt | 57 + .../it/_sources/ssi-introduction.rst.txt | 57 + .../212/merge/it/_sources/standards.rst.txt | 8 + refs/pull/212/merge/it/_sources/trust.rst.txt | 57 + .../wallet-instance-attestation.rst.txt | 57 + .../merge/it/_sources/wallet-solution.rst.txt | 57 + .../_sphinx_javascript_frameworks_compat.js | 134 + refs/pull/212/merge/it/_static/basic.css | 932 ++ refs/pull/212/merge/it/_static/css/theme.css | 1 + .../212/merge/it/_static/data/glossary.json | 1 + refs/pull/212/merge/it/_static/doctools.js | 264 + .../merge/it/_static/documentation_options.js | 14 + refs/pull/212/merge/it/_static/file.png | Bin 0 -> 286 bytes .../212/merge/it/_static/font/docs-italia.eot | Bin 0 -> 11192 bytes .../212/merge/it/_static/font/docs-italia.svg | 68 + .../212/merge/it/_static/font/docs-italia.ttf | Bin 0 -> 11012 bytes .../merge/it/_static/font/docs-italia.woff | Bin 0 -> 11092 bytes .../it/_static/font/italia-icon-font.eot | Bin 0 -> 23672 bytes .../it/_static/font/italia-icon-font.svg | 134 + .../it/_static/font/italia-icon-font.ttf | Bin 0 -> 23472 bytes .../it/_static/font/italia-icon-font.woff | Bin 0 -> 13888 bytes .../it/_static/font/italia-icon-font.woff2 | Bin 0 -> 11952 bytes .../212/merge/it/_static/images/agid-logo.svg | 25 + refs/pull/212/merge/it/_static/images/may.svg | 37 + .../pull/212/merge/it/_static/images/must.svg | 71 + .../212/merge/it/_static/images/must_not.svg | 65 + .../212/merge/it/_static/images/should.svg | 52 + .../merge/it/_static/images/should_not.svg | 52 + .../it/_static/images/team-digitale-logo.svg | 15 + .../pull/212/merge/it/_static/jquery-3.6.0.js | 10881 ++++++++++++++++ refs/pull/212/merge/it/_static/jquery.js | 2 + refs/pull/212/merge/it/_static/js/theme.js | 1 + .../212/merge/it/_static/language_data.js | 199 + refs/pull/212/merge/it/_static/minus.png | Bin 0 -> 90 bytes refs/pull/212/merge/it/_static/pkce.py | 21 + refs/pull/212/merge/it/_static/plus.png | Bin 0 -> 90 bytes refs/pull/212/merge/it/_static/pygments.css | 74 + refs/pull/212/merge/it/_static/searchtools.js | 531 + .../212/merge/it/_static/underscore-1.13.1.js | 2042 +++ refs/pull/212/merge/it/_static/underscore.js | 6 + refs/pull/212/merge/it/backup-restore.html | 1308 ++ refs/pull/212/merge/it/contribute.html | 1261 ++ refs/pull/212/merge/it/defined-terms.html | 1359 ++ refs/pull/212/merge/it/genindex.html | 1253 ++ refs/pull/212/merge/it/index.html | 1397 ++ refs/pull/212/merge/it/issuance.html | 1308 ++ refs/pull/212/merge/it/objects.inv | Bin 0 -> 678 bytes refs/pull/212/merge/it/pid-eaa-data.html | 1308 ++ refs/pull/212/merge/it/pid-eaa-mdoc-cbor.html | 1308 ++ refs/pull/212/merge/it/pid-eaa-sd-jwt.html | 1308 ++ refs/pull/212/merge/it/pseudonyms.html | 1308 ++ refs/pull/212/merge/it/revocation-lists.html | 1308 ++ refs/pull/212/merge/it/search.html | 1267 ++ refs/pull/212/merge/it/searchindex.js | 1 + refs/pull/212/merge/it/ssi-introduction.html | 1308 ++ refs/pull/212/merge/it/standards.html | 1256 ++ refs/pull/212/merge/it/trust.html | 1308 ++ .../merge/it/wallet-instance-attestation.html | 1308 ++ refs/pull/212/merge/it/wallet-solution.html | 1308 ++ 189 files changed, 93637 insertions(+) create mode 100644 refs/pull/212/merge/en/.buildinfo create mode 100644 refs/pull/212/merge/en/.doctrees/algorithms.doctree create mode 100644 refs/pull/212/merge/en/.doctrees/backup-restore.doctree create mode 100644 refs/pull/212/merge/en/.doctrees/contribute.doctree create mode 100644 refs/pull/212/merge/en/.doctrees/defined-terms.doctree create mode 100644 refs/pull/212/merge/en/.doctrees/environment.pickle create mode 100644 refs/pull/212/merge/en/.doctrees/index.doctree create mode 100644 refs/pull/212/merge/en/.doctrees/pid-eaa-data-model.doctree create mode 100644 refs/pull/212/merge/en/.doctrees/pid-eaa-issuance.doctree create mode 100644 refs/pull/212/merge/en/.doctrees/proximity-flow.doctree create mode 100644 refs/pull/212/merge/en/.doctrees/pseudonyms.doctree create mode 100644 refs/pull/212/merge/en/.doctrees/relying-party-solution.doctree create mode 100644 refs/pull/212/merge/en/.doctrees/remote-flow.doctree create mode 100644 refs/pull/212/merge/en/.doctrees/revocation-lists.doctree create mode 100644 refs/pull/212/merge/en/.doctrees/ssi-introduction.doctree create mode 100644 refs/pull/212/merge/en/.doctrees/standards.doctree create mode 100644 refs/pull/212/merge/en/.doctrees/trust.doctree create mode 100644 refs/pull/212/merge/en/.doctrees/wallet-attestation.doctree create mode 100644 refs/pull/212/merge/en/.doctrees/wallet-solution.doctree create mode 100644 refs/pull/212/merge/en/_images/Eo_circle_green_checkmark.svg create mode 100644 refs/pull/212/merge/en/_images/Eo_circle_red_letter-x.svg create mode 100644 refs/pull/212/merge/en/_images/High-Level-Flow-ITWallet-PID-Issuance.svg create mode 100644 refs/pull/212/merge/en/_images/High-Level-Flow-ITWallet-Presentation-ISO.svg create mode 100644 refs/pull/212/merge/en/_images/High-Level-Flow-ITWallet-QEAA-Issuance.svg create mode 100644 refs/pull/212/merge/en/_images/Low-Level-Flow-ITWallet-PID-QEAA-Issuance.svg create mode 100644 refs/pull/212/merge/en/_images/cross_device_auth_seq_diagram.svg create mode 100644 refs/pull/212/merge/en/_images/dynamic_view_sequence_wallet_instance_attestation.svg create mode 100644 refs/pull/212/merge/en/_images/static_view_wallet_instance_attestation.svg create mode 100644 refs/pull/212/merge/en/_images/trust-roles.svg create mode 100644 refs/pull/212/merge/en/_images/verifier_qr_code.svg create mode 100644 refs/pull/212/merge/en/_sources/algorithms.rst.txt create mode 100644 refs/pull/212/merge/en/_sources/backup-restore.rst.txt create mode 100644 refs/pull/212/merge/en/_sources/contribute.rst.txt create mode 100644 refs/pull/212/merge/en/_sources/defined-terms.rst.txt create mode 100644 refs/pull/212/merge/en/_sources/index.rst.txt create mode 100644 refs/pull/212/merge/en/_sources/pid-eaa-data-model.rst.txt create mode 100644 refs/pull/212/merge/en/_sources/pid-eaa-issuance.rst.txt create mode 100644 refs/pull/212/merge/en/_sources/proximity-flow.rst.txt create mode 100644 refs/pull/212/merge/en/_sources/pseudonyms.rst.txt create mode 100644 refs/pull/212/merge/en/_sources/relying-party-solution.rst.txt create mode 100644 refs/pull/212/merge/en/_sources/remote-flow.rst.txt create mode 100644 refs/pull/212/merge/en/_sources/revocation-lists.rst.txt create mode 100644 refs/pull/212/merge/en/_sources/ssi-introduction.rst.txt create mode 100644 refs/pull/212/merge/en/_sources/standards.rst.txt create mode 100644 refs/pull/212/merge/en/_sources/trust.rst.txt create mode 100644 refs/pull/212/merge/en/_sources/wallet-attestation.rst.txt create mode 100644 refs/pull/212/merge/en/_sources/wallet-solution.rst.txt create mode 100644 refs/pull/212/merge/en/_static/_sphinx_javascript_frameworks_compat.js create mode 100644 refs/pull/212/merge/en/_static/basic.css create mode 100644 refs/pull/212/merge/en/_static/css/theme.css create mode 100644 refs/pull/212/merge/en/_static/data/glossary.json create mode 100644 refs/pull/212/merge/en/_static/doctools.js create mode 100644 refs/pull/212/merge/en/_static/documentation_options.js create mode 100644 refs/pull/212/merge/en/_static/file.png create mode 100644 refs/pull/212/merge/en/_static/font/docs-italia.eot create mode 100644 refs/pull/212/merge/en/_static/font/docs-italia.svg create mode 100644 refs/pull/212/merge/en/_static/font/docs-italia.ttf create mode 100644 refs/pull/212/merge/en/_static/font/docs-italia.woff create mode 100644 refs/pull/212/merge/en/_static/font/italia-icon-font.eot create mode 100644 refs/pull/212/merge/en/_static/font/italia-icon-font.svg create mode 100644 refs/pull/212/merge/en/_static/font/italia-icon-font.ttf create mode 100644 refs/pull/212/merge/en/_static/font/italia-icon-font.woff create mode 100644 refs/pull/212/merge/en/_static/font/italia-icon-font.woff2 create mode 100644 refs/pull/212/merge/en/_static/images/agid-logo.svg create mode 100644 refs/pull/212/merge/en/_static/images/may.svg create mode 100644 refs/pull/212/merge/en/_static/images/must.svg create mode 100644 refs/pull/212/merge/en/_static/images/must_not.svg create mode 100644 refs/pull/212/merge/en/_static/images/should.svg create mode 100644 refs/pull/212/merge/en/_static/images/should_not.svg create mode 100644 refs/pull/212/merge/en/_static/images/team-digitale-logo.svg create mode 100644 refs/pull/212/merge/en/_static/jquery-3.6.0.js create mode 100644 refs/pull/212/merge/en/_static/jquery.js create mode 100644 refs/pull/212/merge/en/_static/js/theme.js create mode 100644 refs/pull/212/merge/en/_static/language_data.js create mode 100644 refs/pull/212/merge/en/_static/minus.png create mode 100644 refs/pull/212/merge/en/_static/pkce.py create mode 100644 refs/pull/212/merge/en/_static/plus.png create mode 100644 refs/pull/212/merge/en/_static/pygments.css create mode 100644 refs/pull/212/merge/en/_static/searchtools.js create mode 100644 refs/pull/212/merge/en/_static/underscore-1.13.1.js create mode 100644 refs/pull/212/merge/en/_static/underscore.js create mode 100644 refs/pull/212/merge/en/algorithms.html create mode 100644 refs/pull/212/merge/en/backup-restore.html create mode 100644 refs/pull/212/merge/en/contribute.html create mode 100644 refs/pull/212/merge/en/defined-terms.html create mode 100644 refs/pull/212/merge/en/genindex.html create mode 100644 refs/pull/212/merge/en/index.html create mode 100644 refs/pull/212/merge/en/objects.inv create mode 100644 refs/pull/212/merge/en/pid-eaa-data-model.html create mode 100644 refs/pull/212/merge/en/pid-eaa-issuance.html create mode 100644 refs/pull/212/merge/en/proximity-flow.html create mode 100644 refs/pull/212/merge/en/pseudonyms.html create mode 100644 refs/pull/212/merge/en/relying-party-solution.html create mode 100644 refs/pull/212/merge/en/remote-flow.html create mode 100644 refs/pull/212/merge/en/revocation-lists.html create mode 100644 refs/pull/212/merge/en/search.html create mode 100644 refs/pull/212/merge/en/searchindex.js create mode 100644 refs/pull/212/merge/en/ssi-introduction.html create mode 100644 refs/pull/212/merge/en/standards.html create mode 100644 refs/pull/212/merge/en/trust.html create mode 100644 refs/pull/212/merge/en/wallet-attestation.html create mode 100644 refs/pull/212/merge/en/wallet-solution.html create mode 100644 refs/pull/212/merge/it/.buildinfo create mode 100644 refs/pull/212/merge/it/.doctrees/backup-restore.doctree create mode 100644 refs/pull/212/merge/it/.doctrees/contribute.doctree create mode 100644 refs/pull/212/merge/it/.doctrees/defined-terms.doctree create mode 100644 refs/pull/212/merge/it/.doctrees/environment.pickle create mode 100644 refs/pull/212/merge/it/.doctrees/index.doctree create mode 100644 refs/pull/212/merge/it/.doctrees/issuance.doctree create mode 100644 refs/pull/212/merge/it/.doctrees/pid-eaa-data.doctree create mode 100644 refs/pull/212/merge/it/.doctrees/pid-eaa-mdoc-cbor.doctree create mode 100644 refs/pull/212/merge/it/.doctrees/pid-eaa-sd-jwt.doctree create mode 100644 refs/pull/212/merge/it/.doctrees/pseudonyms.doctree create mode 100644 refs/pull/212/merge/it/.doctrees/revocation-lists.doctree create mode 100644 refs/pull/212/merge/it/.doctrees/ssi-introduction.doctree create mode 100644 refs/pull/212/merge/it/.doctrees/standards.doctree create mode 100644 refs/pull/212/merge/it/.doctrees/trust.doctree create mode 100644 refs/pull/212/merge/it/.doctrees/wallet-instance-attestation.doctree create mode 100644 refs/pull/212/merge/it/.doctrees/wallet-solution.doctree create mode 100644 refs/pull/212/merge/it/_images/Eo_circle_green_checkmark.svg create mode 100644 refs/pull/212/merge/it/_images/Eo_circle_red_letter-x.svg create mode 100644 refs/pull/212/merge/it/_sources/backup-restore.rst.txt create mode 100644 refs/pull/212/merge/it/_sources/contribute.rst.txt create mode 100644 refs/pull/212/merge/it/_sources/defined-terms.rst.txt create mode 100644 refs/pull/212/merge/it/_sources/index.rst.txt create mode 100644 refs/pull/212/merge/it/_sources/issuance.rst.txt create mode 100644 refs/pull/212/merge/it/_sources/pid-eaa-data.rst.txt create mode 100644 refs/pull/212/merge/it/_sources/pid-eaa-mdoc-cbor.rst.txt create mode 100644 refs/pull/212/merge/it/_sources/pid-eaa-sd-jwt.rst.txt create mode 100644 refs/pull/212/merge/it/_sources/pseudonyms.rst.txt create mode 100644 refs/pull/212/merge/it/_sources/revocation-lists.rst.txt create mode 100644 refs/pull/212/merge/it/_sources/ssi-introduction.rst.txt create mode 100644 refs/pull/212/merge/it/_sources/standards.rst.txt create mode 100644 refs/pull/212/merge/it/_sources/trust.rst.txt create mode 100644 refs/pull/212/merge/it/_sources/wallet-instance-attestation.rst.txt create mode 100644 refs/pull/212/merge/it/_sources/wallet-solution.rst.txt create mode 100644 refs/pull/212/merge/it/_static/_sphinx_javascript_frameworks_compat.js create mode 100644 refs/pull/212/merge/it/_static/basic.css create mode 100644 refs/pull/212/merge/it/_static/css/theme.css create mode 100644 refs/pull/212/merge/it/_static/data/glossary.json create mode 100644 refs/pull/212/merge/it/_static/doctools.js create mode 100644 refs/pull/212/merge/it/_static/documentation_options.js create mode 100644 refs/pull/212/merge/it/_static/file.png create mode 100644 refs/pull/212/merge/it/_static/font/docs-italia.eot create mode 100644 refs/pull/212/merge/it/_static/font/docs-italia.svg create mode 100644 refs/pull/212/merge/it/_static/font/docs-italia.ttf create mode 100644 refs/pull/212/merge/it/_static/font/docs-italia.woff create mode 100644 refs/pull/212/merge/it/_static/font/italia-icon-font.eot create mode 100644 refs/pull/212/merge/it/_static/font/italia-icon-font.svg create mode 100644 refs/pull/212/merge/it/_static/font/italia-icon-font.ttf create mode 100644 refs/pull/212/merge/it/_static/font/italia-icon-font.woff create mode 100644 refs/pull/212/merge/it/_static/font/italia-icon-font.woff2 create mode 100644 refs/pull/212/merge/it/_static/images/agid-logo.svg create mode 100644 refs/pull/212/merge/it/_static/images/may.svg create mode 100644 refs/pull/212/merge/it/_static/images/must.svg create mode 100644 refs/pull/212/merge/it/_static/images/must_not.svg create mode 100644 refs/pull/212/merge/it/_static/images/should.svg create mode 100644 refs/pull/212/merge/it/_static/images/should_not.svg create mode 100644 refs/pull/212/merge/it/_static/images/team-digitale-logo.svg create mode 100644 refs/pull/212/merge/it/_static/jquery-3.6.0.js create mode 100644 refs/pull/212/merge/it/_static/jquery.js create mode 100644 refs/pull/212/merge/it/_static/js/theme.js create mode 100644 refs/pull/212/merge/it/_static/language_data.js create mode 100644 refs/pull/212/merge/it/_static/minus.png create mode 100644 refs/pull/212/merge/it/_static/pkce.py create mode 100644 refs/pull/212/merge/it/_static/plus.png create mode 100644 refs/pull/212/merge/it/_static/pygments.css create mode 100644 refs/pull/212/merge/it/_static/searchtools.js create mode 100644 refs/pull/212/merge/it/_static/underscore-1.13.1.js create mode 100644 refs/pull/212/merge/it/_static/underscore.js create mode 100644 refs/pull/212/merge/it/backup-restore.html create mode 100644 refs/pull/212/merge/it/contribute.html create mode 100644 refs/pull/212/merge/it/defined-terms.html create mode 100644 refs/pull/212/merge/it/genindex.html create mode 100644 refs/pull/212/merge/it/index.html create mode 100644 refs/pull/212/merge/it/issuance.html create mode 100644 refs/pull/212/merge/it/objects.inv create mode 100644 refs/pull/212/merge/it/pid-eaa-data.html create mode 100644 refs/pull/212/merge/it/pid-eaa-mdoc-cbor.html create mode 100644 refs/pull/212/merge/it/pid-eaa-sd-jwt.html create mode 100644 refs/pull/212/merge/it/pseudonyms.html create mode 100644 refs/pull/212/merge/it/revocation-lists.html create mode 100644 refs/pull/212/merge/it/search.html create mode 100644 refs/pull/212/merge/it/searchindex.js create mode 100644 refs/pull/212/merge/it/ssi-introduction.html create mode 100644 refs/pull/212/merge/it/standards.html create mode 100644 refs/pull/212/merge/it/trust.html create mode 100644 refs/pull/212/merge/it/wallet-instance-attestation.html create mode 100644 refs/pull/212/merge/it/wallet-solution.html diff --git a/refs/pull/212/merge/en/.buildinfo b/refs/pull/212/merge/en/.buildinfo new file mode 100644 index 000000000..2ad55caa3 --- /dev/null +++ b/refs/pull/212/merge/en/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 7debc0b241d55c8da06f75be8de0eb53 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/refs/pull/212/merge/en/.doctrees/algorithms.doctree b/refs/pull/212/merge/en/.doctrees/algorithms.doctree new file mode 100644 index 0000000000000000000000000000000000000000..30721769d400598a648cbbf98c26fababc76e4c2 GIT binary patch literal 54045 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 literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/en/.doctrees/backup-restore.doctree b/refs/pull/212/merge/en/.doctrees/backup-restore.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c0f2999969e2ca18af1dba59402d87d6ff7c9c26 GIT binary patch literal 30401 zcmcItdypJQdAD@BlkRkSoGeS0W#L6aPkVOnPIo$6w!n%W_F2|RNQxcoGV9sh*`3+j z-C51!?gVyXiV#*|%2e>ife;`jNmU3AjvTYHNBvi zO=m+v&)Zd{W;LH_9)3sj$>t$v*pL@Z-8S+{)42gT@~T!T7)q`A7!o&AeoL#EX|I6w zdA%BXULAC9_2RUV#~)3n(~mu#9r^ZCAHd)5eEX>nHP!WxHPvBf-4$htYVDExT}^70 zGgOz+1goiznmO4SkuA&6a<&Bs)Z_uJV4``>`g}z;O+?~)uqIdCs|^La?%(9({JfzQ zS)SpgYUQ|DmkH{Ix}lhgv7j_spbEs$5R5BBz?)2SzN#uF*@!|~%O z)v8uTMpCKNJvk%u#t}~608)cb4YFi6b660E5^L6y1-QYYZ?M(<>bQDPJ)|B!H-rN2usamstj!rsnHNKk90@!!pdL^Mfckb< zu7K>#ge$N9RT2(G7z?e>F@E^M~GiUT{UNiC)C0jBSrIuw6RApm6Z7!6E zh~tY|!BUT>CZ`1(gY4NLANQ`bY?sPN&IaTP2pjRyK;l@tn$FtE>83Ma8(Pyj5+4~A zCf5pDL3X9uS#zYRzSSgF&!YooJ!VHbb%gpz$6jE<+qoC)n&0xC{a`4CY(=pw#gLXd zbb{9lbE2P5^x(dGd9jEe4Fc#${lN(8TPts>*(aN-tiD}Pt$I{%>PYosN2)iGooJ)_ z?IiGvvQg7&B?;EZgt$wZ1=UvS6<8gJ{uSG@v{b30rC@!kbu9(Ou#_4ML`tiruG)%e z$tiAq8XN@49Hnf43nO!Dyf=Y!yl=#wxDrS@Rrr9L710!b}}!{wsz#5 zt;JYJ@{CU8DXbAzf3fj9FJOX1Ng(WUZ#;EvcwLiXb(5O`6D#r`=J2hG}m8oDI5G z$WuNv%o{#JabhUJ(8?^|-7Be^jNWq?d2Z%-Nh2|od{meiIS6#$rHk3BV#zR_@`^z3 zy9_png{kyJ*bF(_IRTPUhbp_31;`NT`;5A1jNgmu3(kEjU?kKq&d#n#c1j_3&Whg6 zo~dE-aV;s1jDV4JCdBRs(Bicok&mmT=ijJghZpD7FL8R zNv5Zc6VhaWB$2+)OQ*&puWD2%XXn;svU4;&kqkR1s3$u|rHQWWP#I!4NlLM(P|nVt z<*`H7H5qognQ1ONQ{CBNrap0Ys9~I)*Daf!gfwd^hGtE5*DSEJ3YtZQa&~T8HapWv z$*F?Cp5%Q3wBb=X6IN^?6eNq%Vy_jGIOAr^wAhPb`;XVSHwE8L+J_6fv91eox{s! zXDTUnred%&)q@>MPn?}8!OoFLcA_j$V(+Fi>Gro%VP66kDExjZas>2?$_cWRkOd09 zquw6LQ=K#*%@Ps5Dm}_4I;+tfZhWLjVlELe4?G-LPo>3q z%fRNlVx%?2DyDU#l)=VUhISh=1w$@c62(hp-BhG9_PC@)B`3+160M-BRkMYJf%0N- z<>S%C&Z!^I@EH z>*M?duD-FmG)yqn$N^470;B^O(9(eM>a#ji!+9CYHgIAlv~37c4caO1)`xlj3Ss*7 zaE{z@ZjABa#4fn9tTEX3tk{0C(&OT&h1LvSD>_-5k zgmW4aHaZm?Ny;ly(ZErmMctTh0YA*lv?LqFKu?DveIhP#A`)y3r{riPC2yhrzkto* z+0#=GotpJIiCSHmk`@$0D{6ACqDXlhr67`sEz`7R;v!=Ec*HGmY9X%$xCqDkWC$f+ zc{4Z%Q;{67#f!_Qr3W4kSZ~^E6N41%`UNGU6}(}ph_f(~Yqw3MLVHvT3IxZ@S9Fua z1Lj&9pX{`aK4casHNb%%yb1jAei z>H++rNS}gJoPt;)5K%n`eJm0*v+$Q^FI-$$#v3*IyvQV8DM$;GQD}!uO|LHm-<|y! zALpBT;p9g&qAKMWXCg74CM9+jizY31vcq9ULSn1N)Q>nYArtb1l#GZn<7PwH?>n**u!6@b>Dl~wJ z;#ft9^Kpq&O8r#I5#Ak%aEkhf5Y9|b1Q3!UP!p8`ogHB>Lb%P~kMeZ_!{YsQCI-ff z^T8b8oz$az-tK!M+dWC`zHssvuiPIni_xVXn*r6~iQf?GoRIYsG0SQ(E1S3YL}ZH# zti>14%(0n_bpOfOz!0{OH!ZtZOnY-HP0wHt0do;am9@HW>%7suV_GM*+04f?x1fNq zwWs))FY;bWtW}(yH%79vlh~ny?{*#YRue*}(Bbss;ZEbrm|Q=cLCkTrLetq6epI4! z?Yz>{ex=TpjEZBZ8NeLnC}$lCe$+Fn%D_?c5r^Zw`mwS z;;jym$Q{C|`azs9t0;k_))upJn1GITOycJ=%b!|%!wsE|XmUz`y8I&Ys5{D^pdXxY zR}YpyPM0_*&ssW+FBRmHA=lMlgGL{HSe3054y0-p&Q;P&(wGyD6pi?+7>)QWRVixT z5NMB`D}N4&;-uuwUd^m>+r;rq9Gb;}f6cAcZ)I{!Gpf+s8GPX^+gZTBgVQ@N75h=n@Epi_FhXF4T`miN2m`&ME#O-fblpuvGT}`-2KkO@&fD!$pGs zJc04M)fYd))RXPeOUhMSGZgw*Nbnqv6qt7o#8$)Y$Qow&CZ>iPa}_;5pS^19R>(4p zNjN`#H8nBf{!a2k-^0$v95h3*vK0;HjeiZL4*F(hm{PJ>1gHj*$w;C&CO9F*D^F3& zTt)Zt2zxp;2lK3$3rZm zIJ90qk5YOW#c*qJZo53onh^cf5lK|2wZ5RX4Man3*EF3q5)C}%+flYJe#Fhe7`5$h zdx{HBNJ~Zm-xpM0KU(7htVe1FWU;qqjGXkpX7dCl7$v0UZD@b5e(>zhB0&uePPew& zoxP7`oO6KYy zM*1PEWaxIiEs16U_!6-~UpKTR3Io_CR~zt%`_b09?Ic&fOSJ7Me+WOI>pA>z?eSW` zcd1%SDt{b#&)w5j2AiCyid<-K)UY#P=)q6;d_yw`6KPy)dnBy0!$*#ss>oXP2tE@d zD+6*&%g}43z;or-2#{xkSZ-gdzl@|_()2}od`J27_~~VM!d;59LgmlKcJXQW473c!q7|83x{tsk`3Hx7>b$PIH9H{)A z7*B;@N83FTr&kEjj`GVfN`1-A>Pjz@yqsR>AV#kuUzp}YJ*giMTNq;wyB7L>%evl# zhJ^#ig33GbR4;BlmbSC3JzF@qAXjW}{{dr|dnZ~svFujjP)<3$+*Zcw%dr@xZb2S2 z!0pTEQk`{V^qS|^lBj&p?f>_85EW+&w{)gd!fG{rUl#ZRn4W&teVQ9$_28U(crG+B z2EV%YhsAJgoI#O>qMp;mJ+t&hA59k7${l^#XJSRq{Yp*DAA95y-CvH;{oc@7BIZLw z=k2XS=Q^6P^H&A;M%1(vqo%MrU=zK}D-H3zM+;Fv2MB@`_+8MFv6U;a;6>dWIaMK) zJ$q&MgIdmz4ZJC(um^^U3iukerq%0;Kd0}SNAUC;F?jNNXF?Q4xeoS5`0O(_xr=o)`6vXy+H_j_Qs88mM~?*qAp%(yv<0V86DFE`=5@% ziO2p+ZS2o1hyB-L)D&hPOWtK(X^8zB;V^>1_4i(bo690O$VNQ2fylS9hsuA17hUox zG0{}`M6ctr5i2|*1%4HLb#p%r_up8CoDtDuh32_6&MsvMGgm9?$7XZavdjg=lg;wC zz+w3#v<~3x?3fXYbjU`{cC!WHa0Gk_OSrFK%T{Qky2ja@w+(Wyk@Y-V%sHbxhIy}; zb2gaR^Tb!|a2Ya2U!yY@AVo|!=?iptka&m&UsFsy*&^ATGwd!nV7;-48?3R@*X-3g zZZ^6#;bprvkJ}ON);21*+hpl^wp>Z6X0uEa0cTrL*R2}f<^w5UZWApG*6eC_iJVvv zmzyyS*6LZ$2Z@RDcDpgys%480S$gHka#ta!&U?V~9Rl$5U8jMS0A)d`U~qLtRCs&f zw}Z}@vZR44j7+xa#|{>hoLxe7o4xPek;72rDq@D|;FCgYo6Ux^S*z7;3tzm#e1K6n zFR*dy=}tI82`6L~!_bW^wx|jf#Q?|D%siYJKNh zJnU?x_M0F{^*+FFI-4rkKeOS~0BjfFLuD-{7S4@^lGlv_yqn-)0S*Y{XY z)QF#9t&qjOT2WhSszc6Z>{01iKgwB4OU|1LcD0@rLI+Y=1bI9lgGU8!VKHE~W>VMt zQFRk5%z75SU65-l6b1*%vcV^rgh1OCH1_c>m6gTzJ-u`Sh}X*XTp5_2IHSM=&n-CR zf_+3hvB}Hne)vlcXLishz^DfY`X~=NmH0N%TwG(jM@{D@%E=mloLMYU!M_9+zTnkH zsZ0CEr$Fgu>@T$xPceS+V*jZ7W>^#AEa#v^aKh3&x53#1v8-l=b_x@gbsg(mcea|> zFpFEts#-~{;Ey@Qp%+zW)P!Fb%Uz^1LDY@xo~_wIvGlx*kF1H>J=my)2BGg=bpy+c zLh=fO)qv~FEfL!U@XWw<2#}uFYDI_vw+q|IQo#RCOFrhS1eM9IGLpNV`6k4snuFI9 z)4GNxs0zF+Tz785`3`wLt5jvJl7$N;?4*#dp@uW&ZB9U5D@E6&U3UhQ+Cmc(XlH|K zO`yV%MhzZbpdVJ&_1(bGjkP)jVor_Jv+5n{Bk=pOsH*CF)px2NR^Mkk+d_F=uSVnn zi9GSBXG8vI)JL4KmlSoeqe~9;z3tI-1o6W*HND8|aE3@_;b+MkX&!5`u|_tX^_0a; zIixQ~iosozw8sD5Alsrr-hhBX+V1}V6Sf^8J+rQkLSG8EiF z!95h*MZqiuXDN7yg3A=-DR`WMIt5hjf`xHD!!HX1pf`ZRb z@G1pgq2P-Ye1n3oQ}A61zD>c8DfkfuKd0b-DHx@Jc9?=)6zrhj00sLfI7-1d1@}^L zf`aoDJV3!C6g*5piGl(J76n%+cn1Z)Ou^F>yoZ7hQt*BX*gSxZ@?#hg%bO{%D7Z>N zfo2IZ1@EDtLBS^}c!7d{py2Nj*v>HZmvyZU*(Hxq&o|Up8tNAs>em|Tw;JjX8|qIR ztg9NVn;NW(8mxO7tZN#qTN57T#2kDB5>mSk; z6W5pMiizvz=!%K!-_jKm*MFodCa(WZS4>?0o35C+4v-WvaotK+OkDTS6%*GZbj8GV zhOU^no~A1%u5YF*Ca!O#D<-b^diOtm%S9&&ZgiDwQ$xd|x#&%;WqBz#I3t+xv1+iYGlG2ru9F$d>c zSK&3(>C<+-qUA9;fcG`J(%=h;`4LKySva2B+r9WeZP*7fnOFdiw)oPW~iB@3LjsI2Brir=3+f5+V3}Ha?%v^x(6N$@0^9BFrPF z4+{Ws`AFZ7UNLA=#l>td4%jePQhVt*1m5WU_w_>BU#Nc}KD6go22DN0oiyIu2f*Xe z0E4cex`X{ve6X)21$I{-VDIe$w#}PUcgWv~5BZ;yf_zIKkZ*5?%)B;rNB4j6(fvJE12P;9Hd9a+0s^&VEpSJhir2`qeIbO$>TA8a})uzOYqEcrg_ z4)$Dpu=ghg_I0ZUwucxi@xkVj0(;x4ft~K&v%eA_>=Q|WO|2T(W8J}iAU@b{5h?4eZyd$fDcYVpAqlLC8q)xb`52m8+W zV4q3~?2$ge#?#uKuLB>75BIl|f_r-(aN}uhj~VjI@xlISQef}s18j!{3g&pAyX1Z~ zKDxh23Z2vky2I`B2snP}j_v#Lv3)NoZ0V%1S>3S>Ziqc8T8pfS%o8$6VN<$eyDdJp zTa&^zo)otE?%3{%kL_4e*d~&~W_HJRIX4^yqP}Wb?89h7o|JGAH_%bpGhISvk!#F+BLA%O-gs5 z!^5%XFhj_i$QVgS+*tLNq3S?ce1Tmu@#T4*p|+>yC>;RvSmB*S& zx!IZZJnrGxV3P{0$PgFyl0ZU2g-5UxCtx5@gu)?CiU7`|paLXCppsNv1r6zJ`-J87|K_0lQzS*9hp8mf6`|sEPPe0N33opL&684|B*{&(7v6vSn$uK3^ zZg}e@v*cD~!)ZLz*!5)N@y1SXz!Dd1)3r)+!@C42N{XsWmTWX0#LXc}@2I++Z)UKr zWL9I(D}CNI%{X=N;Ro{h{DTh{2fy~jFX7)Wf9;9)Hk5S_Hk1MHvUBnxy>*$?Z);Gg zy#AVqA~+3YqdhBngQDYD>a6Pk0u_0!D%mKWx2~j%wv9+!_Zecfyiv zL2;`3;GiG~x6fLIHw*^!t;OBwQ+@2Ve|N-d{_@EKggszQc@3yiwt@Vs@ozi+U5kI$ zfvWzpX;nokE4{3t>`-3sDmN(O%1z2nW!Le3WH9C?WZo}@V(NzK3r&?15Gz>>JpdbX*5FT-5 z+YyC8`-qQ1ZODRc8m1tLNPv`*Y}xcwRTd1>z&~or>bx4Lf;V5hH*odx)+F`fZD~iI ztSv?o$+MEklc6<2@}_iMa1>dP7sYB#mu*I#2z@INd5)smA$6p21#}`pRTd3La7jL-(Ag$R*_H@V175!)S`|6$xuIdF!CCRt^r3^fBZm)B z-{I8k1BHTFlMPkM8?sZdYcl#QKOzTNGvtz!E6b1~NR4Uab{EI;vc>^@>~yemQ1$~50?t9dsmz4xQ%xhlX*EfQVHuW}V5MuF})bGlfS9TBQiTovdY zXTb)sFp=LKS3}+v0RcIyhNkSlEJ6mqzr(8W!i2S`{FZlg6^z6R7O=CeBRiECJ4bl! z77rU3d@No9{1t~ke_B8^&UfYo`h4?ygG&eOB zQnRqIkQXaxH5GF{ucG0o=$8u^-ifa66v`^pO#zz7M7(J&75xZZuT+YBa9R{yM=>po z24x$~swS0N2)nK)-N_Mn)~H z@TQcro6T`|Zcl_Het$>vJ{2bWrbd|t>|E0$JA3oHvtb7rEz8c{-0rUIP#(NH$*N&d zrU5(Kdt-;RYc}k3Q`3R$Omt_5srt;>p@IeMysl?!w@f1P7?iVS>(sVEyTFsEdFJ8dYjur5fk%p#%w2po_3%s2XPtoxYPZ8rOuBS8O zDb&=j@5s}GiSm?@CTi6~TiWC(s)hJn&P`kg9nM02LJf37M@|w)&AI(qX&_|O(!SdD z^ZsQt5ap4%2BJ)ZmUUxCc9Jy^p3RV-Hime+;Vlac#W>qK)l^bObA6N$k-5 zjK@G!uz;OiJ+m{B6+06t*qK;{9lD=6I}@Cp(T?nN(mxhF8YrV#*nZ5Q*oH7)Y36Mx!cq5G808V=CnF6M&cenzvQws! z&*AAqQ)k0QCA(HmmlyN+Yt}^kDd=)V)M>FD+ci$%@J!*{edh{q#4`CE_(yxrH|(7{ zb$9+mF~4VgHzvoE`}5XWfcXh&KWj|iL61HnM&ViYG(KDmy> zoFQWFzBjU-N{jQ3h0S-_%B!+d&YM=HfQ_vJ?KTu7ODsD%iqC1LE$1}sape}|*_^0X zXa!ZN+ASok)fS>Fr_G-s0lby0{>1^@d`Gx5KHPJm6r_HuNsGiGUdNon?oYf)0Gku3 z?dH!ADj(FY?xg|DLPwa*T0Oi1nDJVbjgqxgqpg;9sB#=C{S2Y5wpJrA4&aV=gnQht z)#Iy%J0~x-ueSFGLCD(VkWk2 z2vLpdspiiR=CM`64Bs1o-O~{)>&cj|&P|;;64q%2+QpsCV+Xw;yE#e4Z)j^(^0%aN z3!)C&hk|Iq4$8rP1VH9sr;)=(rwo&%lAJ4BFcn%bt+^KP158clM5`RB=~!e)#F>DI z3`-MGvbQ58Z>IV`h0WpVLlfr@PKTUyT3wmQ&C8ZrR>fIe&Xr(FK_n4dw(W|up=sX^(1NhTzyG-Ly$OpssV{dy=-%`)!HtMmPv#Lj3mx!jN4t0v;wi^1yU^APc8^ z6a{8GXP|?JMz=c&!9XAcwFv%LWJtlmfPz#a(Bbs~=zSeQGYx-s`qb(99%j_2^D>io zS<21t>4di5R?XUcbnYC+ggD>09L~T*qtiCBOX!mSe%w}vQE z4?%nlEY-|fORcT9%B37-8o@+y>_vzRad9i9mAo`Scw0w=6I4fpaR21)2tsNIR76=K z+YvSq!p{Q!QMx2BEIwRkVqltaA($J3N?IoWpxn22EcYHN_o=BjojVp$i=A`bw;xo; z2Y&sma$?$#$MjTUmUmF%J35wFVkJI(c!rH+a>u5oBVE{h$#&dwIo}*xsb&Ft2pEgx z6j7~(x~|!~C*DhHHbX&w=4TWUw)Q(A=F>qfWmc+yoi}u3=W=3))*pPMc`{5t5U;Rc z2{ULLULVG{s?_j?!pCxC&mO$&Q1~+MbU}gnX~A+~O=uNpB#e=?q&A1nFnG-|L;0jQ z{{~slM+?_r#`5c$8-)?GZl#~ZY$q(~`(Rb3%aL2&$T4$)%sRuYe261ScLIw{?RVE) za!Ha=WVH(Q%gF?F)DHU)G?uK>bkjL3!)*6j*@5zk~}Z#W{un{==l;1h(|~B!a1^Q z6>EqQONt;HH0HFK9c;n_0;Mg{qbkPi#1G0trI?3V8VZ45%#IjYI53+96tY&MbnLRE z)?kmGXH4!?M!efrfr^{KYM*4JqZa#Z$1;sdl(%cTfe&i*s!sfb@AxcxM`y1Gs@RvQ z8n?3Ipe9E=_y2}mE{r}eGB>+zZIx8!Pf(e;1g?+Br8}#=gqz$(_M-;y*i`zW zhPwD6Ej_QxS5nAdye{Fc!F5b)T^_y*nqYxdgbl4=fi4&!E2f0XnHN=^Cgji{R;c}$ zh9TOa0Gi6Dsq;s?jB?{xU+o#|#u!#;f(^4St+Nz$6`f4ri>CC23V(p^6tM(TjokJ= zKRS9;b&k2S&~rANB}hNswIr~fnY5eX$Bzk1rYpd|MzCdhPJo*jtzwi|8yF*cV8;tL z0t54b5|dA~5Rggsy_O^R<20;u2+k4`=7s4p%a6PXsJA1k$+>{PY=QD>wi1>S^3OCD zTsdf=Tc`mna%b)xtOdeJY)()eU;1OsSQ}i622Z`7_L*qw9%(}!D924PMna9a85u3t z)ipKZMkHk#@x>o_4BGHILTo|D(nExVreF?(^M<|OWRmYMjtluL~GoiKQc~xEz zd{rK_B1!OP)i(TVppc;86?v)YcmsD8*4g;IK^2}l!mNcRrwBVAhEk(qVOi0%$kkJR zcvn(uC=ktwts%zaD4geLC3?i$6pIgA!vr!)*&22uDYb_C)}sdVLM+1{+X@SrBzkP} zZr#krA7*|mMKv8k8nnQmn!GiT9NzH#()H5tHzThctMZH* z{&!fzKje?*X*@NJ9R^ht&cX)}oe?@6L)NM1@*`-(j^3TT1=$F_R@0kZ6=npqCtn&SRt{$dilG*JKmEaDk>!4d1yJP0MeIhAc~YVYIC@qim*N`2AEk1oYJg z9_G_3(jBb%hZ6+Kylk0OsFGQfRS=~rlnBQ5{(|sWFq2^;&*p$n6%CXd6LZ=_z!i-{ zOPG^9iV00}`4lmtn?O;FK7bP);Q<;OEs>8T_4S$w1w%}g;Yj@8&S2tg6YcrtTnR;j zcMnwuIr;1w6BZO~>+s=%j)5(D_F0pSbeXrIYWb>}x%F@&Ft&!`jA%$Z-}EPp_2&1z z`v0=P+X1>SfAIgKFAGf7wT$3)jJCJJxKM|^*tKo#HJ&omcLp?9%6?5_N)COb{=cbu z!lKgqS;w&+p3i9AsvYYw+S%cq`bZlcVXi-wf`BKG23npI@N+*<$}hy?Go(F<;s(P= z@A4J$(pUj6Q^IPMZYvfH69y6o2s=`!=U~8)DlH!YJi82VuO9^>r)BMfNJ(ofAHd(J zc%00%UudPIm$At(idCjkCVY+~x@6g9QquW#UcWyHZ+MsHXrWiTlz8B4O*A12)<7}0 z`EX=5+MK3qzY~e`hNnt%hPj~2QpKNB2i4bpgV)tx;f>2_ujX>>=c#bf3D@x}T31c} z{9c-%ySgOkD*9)(3MFEqO>0s9ax0r3;j0_-s^nrNi;Wg=7kxYpf!N4o5F?)wmd7wg z!Iq-v54QZ3bQ%g_3`5^uz$9ovQ8ANYUwFY62C!U!{>@*28C2=>1e6^c5YbeL{Ds-z zp}92XPr7uhPhgp?j4z`^9|%{)euNP5I{!+FI*+fEZG|KT)sH$~gA4-o7)WAt=Iw2m z(y^R=%(Uk5l^dED#>QmYt0YPOY%!LSm+(71mk_?@+P~qcld8HCMK2EHRD3a2d-lNL!#fN@<2qb)Uu zvZH4xaNpLh%@WGU;i_o3u>BDZ$-+UmhLKCVSltqWNl4G(9OxMi{H?WpS;84UT*VrX zh_A|=hoXZjN7^P=0 z@MhMeiv;E*n!b?)=J7-@&Ey=+PxcH(0GPLA31%du`aJqVQ%_O>jSx*jdJgBEJ;Q;w zu=aG8aE6bn_~eXmwxo(!v2>gyG#?7lv?u3aKHM`HIQMGLWeH~FsOs8st;RGOWT%uQ zX)lFn64G-xpXwP7d~mft$r8@cab3i6(Y-3!=vI}wd0n!-UCLnn5YuZseSC+0weo`JwmRJ$fiAe+(9 z@p(CDFqrPZm?WV}CPO4`sX3JWJwt(0r?xjsD8nZ)`Jw^YS(WyYounbmi4aSBat>yu zXE5-=)b7p_%%&N9A5%xgh^pfxDdJLyq$MqfA@>Xe&XSs#C5)jNRmPlp9!v3uRLysf zh|jzp4RN$4=0G0n83?=?wZ$xfY&?yRehGJpP{d8=tT>FH4`IZUauCn-3<6Gv+EZDA z7(Ol9k6@95_3&q4?~u^ipACVuC+A>3*fSV73Thw763nL4GEA0)Dc!+DEU7E`c!;DW zEr;=mo?*ZNQ2XO7VQe|0mP(=}nZmS)WhPnIll0c#gjkXu;DEl^Ga$J7XZ#`YT_jFvVJ~VX-mza z^dnJk!xgyeX>0IQX2X>&A(WG%fxS>ENyx4a(Ih><0d4OY5M1)KZCL^uKI`B!j99Ih z($%tSCQeoMgmBuEb1)Me%3hBHqN-8a?9&#VW z_w&v9q@8_lq%9fKe%M}3xWn-+^^6bRY?`||e4V#|w9jHCTKgQWT(|B2(3*B+)jeu! zeBZla)&Q$W(O||Gv}rhtZ@1HSO2x#7!wnc&!ju9wmSl@w!xo1ND~g(_n-#J)Ur-%| zHf06_lSpie1V)*(S5q}5Zm#K@n~_l~Opt|nn9+#B1I#4rjBigF8hSMSJ+PBg@J&3D z+!A&TvbT${L{sH5S=f{;mAR$|hHX*H7sQd=?q@hHd%`!lVH<`ec6V8}s<) zEYTz|%du1wmN&E|g((WbHL$x13qL|=*2vP7SzQkTe3P0-!B>T>XIx^qC@B>pv;U?%atOaPl37HEvalBlx z8JwyLgLc;AQ@jnnXPGt_ZV2RYO`@rEFc6uXA_5l{(0SY_)cvcSF zEBqw1S<9O`4g`sKKCzQL0R$KCteDHjq+rcB#nD5_ufEj*u7a zSMX}vdre|Ocw8YF70yo<1rn4tCq-|?V{mu13%y_NyidYYxuFj ze-rHXjXC@rZ2ojD9ltg?W~oRAuFze)u@73(T55P(%BJbSR#}eRJbtOSi5$KRw_02z zo5coVhG0Xe*5JD4@5Lj_tNj?P^swFeA}Q};aO?}-*nFUQ4h-=7HvBlh0=`s@<7>P@ z1t)g|Kl{89c~NzWK;yV}7~3bwvu*{i8)}|mfE3uetRiNBK4K#is7BozQjMDH;Opfj z^iW0x2wi-^<`x`k6TeZEEz7iu=o}r#vxEagHp8$mIfv~ncUrR0{u#354f**d zygz=UEl8jPlly3*jcot=5WM?m#MwXgVF~l;LI;17;1I zsy>XW+3*@Pi#VqTsfN*Jux?R|KFK5m4Q^g#A7ZDxiZF5~e;D$3^h>!eXb-HZcpHI- zt*NsQ&_HOKDgBSQ)8Ro|$vgw^!N-{>4Jw#2lu+XvaPAKO2?-scb_KyPDv(1RqeQ21 za`+~1s3zA!B|vyKQVdzs7O8D`R|P#BqV0Tb3BEiA^8{{qS5it=0HiF!;RQA1uoH^p zTJDDN3G&K>uW(ED6cc98eSy0>Ha8&7;w%~w4%BHJU+-;)SXPU?b#giZYPVyEgcgL=8^5`M zWkw;Mo^xxB3+#v~-;mr_0~a7bW{K>WL%pztGzBbeTGFv|XYeu%*QrQ!^wL}dVgoNW z2`zXDMNnj%m~p|o65r|&=ZZ3X5cDFB!-CHRof}p6Mw(8ikXOCzYqbmBTG^Oyz$C+4 z?`sn@VMwD2yCJj>r|6%{VyIUVZEqbV z@$c+Zo>!hzKBoME@@eH$$`_QsRKBYGgYr$~8_M^T|Io-4LhGa8N(#16a6JXrQc$2^ zjDp)KxRruw3XV{4o`SO!lqh(Zf*J)?3LdB6Q3`&Rf}f$_T@*AZ_;m{2Pr(Zme1w7* zDflA_UZ&vBDEJ};e@($F6nu?>Z&UCs3cgRle^IcJ`q}{swo$N^f*UE=LBU=M#woay zf;%WUNx|I|+)u&16jUgXC~zovgn}n2_z4Q$LBZQ8cn<}?NC6uPu#Wx{G$?qHf0M!GWdmxi^YS;61*vd<(qZodv#U?bw+=kQD0}Y*BRw?Mt7Z2 zU1v1c8O3!*Z=F$FXSCKCrFBMUol#k5G}ak~bw*#EQCDZQ)fr`VMpvCtRcAES8AWwQ zPn}UyXSCEAC3Qweol#L|G}IXdb&cR(V9+nP$~FS~obqcBx)&gHFGA>EhR}TxLidXD zAIi6x#3|qR#cd57S4g|3*mIdsLu z?Mb>~;`R=@V&e85x?zZ< zQozJ*n68+(ZKo?HZliR?#BD!aF>yOYS4`aQp(`eC578A9w>i3E;3w z5|;FemPnp@AeQ4m@K*NFmRSB6s96q;46kg>t9j=VZxG`T_+FArbHm$!eKhukCRl3X ze87Xv_-BCbZH+VNNa4hSF1dL&m;XXO42ee5HwT97C9G#vgJ?cT4%}2@n?k-JBIex1 zDNuISv0S+4lyUY><{wMo)3W>5rCe*?s@;pE-4>X=zUF}WQtvWSL+DJWXO5hrk*j|+ zWH9N_-o$d!&f`xoefOa!vynfB+$`#t1;5)AuEz&A*wIqglMz07F!EuC6!GJ7(t~@X zS8$q%Cpa`^XK-laRW!})5#WK&0Ha4kbqD*7^kCnf71(Vn0DET_ux+P1b%*?HddR<# z739~h0P@Z4kl86t-O;_29^J>YLU;8F&~=mEU}TJgk-CHZa(b{|$_nf?7YQuR#OMz8 zyXnEcnibgX7Y8hzh14DF@cPs}%qAr5sfX#LgkN{jz%C=kqv^rkloi-(FB;g%?lpTT zJ=m$NzzP=)?7r?`A4(7Qfvmt@cagy2$e-?D7t@1vvjThl3c%jp-mwNFL;f**c5+X5 zxKF2t`&3qNcU(lc%P6Vm)5Co(E4Xwzc(23aTT;~SGOhMc(?k7aR#0zP0n`*@C^`tJ zyBL2ZJ=nj`3ha$50Gp=OveRz5!~M_naQ{6kxHqi;Zo0Z%rp;b4ka`p~f~1*@qIO<1 zuzS1LY(72Mo3jGD>!N|3=nnQ+da#GH0z0|_u<2UuveSXt^l*z=!M%9}aMQKgWk$%4 zr3br|71*&AfK6DSUPLJ(-Sz+6q6*jv&wyOqHk8iF-(oDuT zdscw0(5_4PkuBX3?n#fZkQKtcD?m8jj*xvCmA-zic87Q(J;dp(AWp0R;#fOG{~U_$ z@XG1om9m02xdM0zG8)uitvkXe(j$C4D}?)2fH0{7+0iN8;k`ROymw^k5F5wgaV;Q@Vru$MoP{$qL+o z6@W|Fn1@LrJ2Is^z%?6E_x9h<3gB(o0iJ-}^9n#pkH_7wn3P^A8uE8XGk zOAl{vR`Bjv0lbO!))(}I{sAoAVV+J8^JG>q-;fQ=&?|wCVCfE1OAoWMI+(sKHQCt8 zjpK(xq_VexTTn4W*$uv960D@n3NxZ< DyhIDY literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/en/.doctrees/defined-terms.doctree b/refs/pull/212/merge/en/.doctrees/defined-terms.doctree new file mode 100644 index 0000000000000000000000000000000000000000..55761ac675204ed29d0e3f0d05f10fb9418d4cb8 GIT binary patch literal 48336 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 literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/en/.doctrees/index.doctree b/refs/pull/212/merge/en/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0c59b343aef7ef36d8a31627df3968878c9bad9e GIT binary patch literal 34394 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 literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/en/.doctrees/pid-eaa-data-model.doctree b/refs/pull/212/merge/en/.doctrees/pid-eaa-data-model.doctree new file mode 100644 index 0000000000000000000000000000000000000000..0462c4de27f660a95911d3b2996bdb1d660e6b03 GIT binary patch literal 263577 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 Y8cVNOQd>hgy6;15`lgKq&Ftv^1sHn!)c^nh literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/en/.doctrees/pid-eaa-issuance.doctree b/refs/pull/212/merge/en/.doctrees/pid-eaa-issuance.doctree new file mode 100644 index 0000000000000000000000000000000000000000..81dd2cf2c8e882061b2b7c0c0011dea2311548f2 GIT binary patch literal 410209 zcmeFa34CPPSsywxJ>5O6S=+PPcsCps zHe&;3eUvd6*^dAY7zhN2@q_qBAny?qR)fR#fPhUP5RA>@_e(;SACQo||994VZ{1sq zRO;y-w>{l0Ro#2ecfRd>=iAO#pZ?I}cinv#{jc({l}{wI2f;`@p3TKg>#%ZPJQpiv z%xv-SI}R^>&Eczu7c1uqk$o#yD#Xmg%3XLOmPn@K1v7j23ch@Zo-ZcTR!|IZHkQjc z-cOvayjgsfY}5A zZv^tc41b=+pSR-A+kmPw+qps}La@?ghlytrZ!aaDO@tEfNL)-@nm&U8E|)w8sN54R z97g0Y^h&$!l~al55~r~0cXGbM%C6GNVhJ<08%V}-*{?E^naGZbH3own_>cW&b&TdV zW644+ZEo%qOf$R5UdTiWyFqJjhY&HipNtn1gGOhM!p3R#t{op=e%!G+Dt&QwDv}1m z+VpC`aSX1*$~~Puhm}*MLh`WE-uTLBut+wZj7K>#sU&!W}9H-^Od>Q4t%H(^})sv zh0WHJ%idr^)Va!;Vx+KR>YW=Jb`m(-oSz&S4vdYC(B4tZTZ0`PxxAT8#)Db2*kR>O z>{Zxb+Q=953!APycSMQ<3*PDFtl^}f0j0c8>G-~$u_k)ogNX<@eFPMbj zB(X1dz`To;(#4MLB-Bj@G*J$p=L+Rb{y{puv$Ls;)6Gb!n8+1i4Vo6jDj(l=A?$Q| zClHC)aHBrZXm~}k&B*{Hk@ID~$Z?9AkdV!Auv6pe2>L~FGzM~EMTt_t65<#RblQ-l zzJEr1Pr$TZ)M!wNoi{g$ovvWGHQ2#Gb+OYG2-n08jiI)aRtXjjDzWo)bJ!v6+8XTC zQqz)mx@%*Hsrr^*^M5@jVJVM$_2oZ54Lho4eAwN-K8hexc9lb+iv>ZD$sFbV=zSuDx=Aqcp13kf(?OJRo7lxit#-Y^AJpt#=rJj)cItR&t zrAcWG9mnM0;7L3^a|ArKNJA4KZtF*3LCG26$!`CsCmeWk>gkr@No(r2`{L;pPkw5V zCUWbcH&pSFT??si6>gk5XtWjlqcza8zBuu;nge~U(m)uI-%?AY)zN4(So|!VZ1kVjGA6li0b`G1KH20 z@ASo!p9X5tDXb4CC>9V_o@OOOHXPMHh0z#x{Io~|=~LKcU+ip?}YJCQUw+YzoQc8tz-EUzzjybEsf7x9N;&d+uY%})hqHiMm^Fb>B( zeZf#T7z*`u(Z8c}<1Q4PHW4MXY?7ru(4zFRG;~e^9I1Q)zKB^Q#7wQ({Hf%eFBTAd zHw(d}S=h;uE4$-4MfsA8U+%Kzf`(_!k&{@jx0u^S^v5X@SXq4^ zhwm~4RY#AoOea;%Y^+euQ>dkSsit$O^s8R#aj9yXSS~l@yWD9`)#+m|ch@XeuXESA zPWn}^^NJMThDqu~FwH0z81`KtC1gNKZOZG2(^*O6%M?omWXw3ihG12@o)W+6WlkJ( znR;Hi*iPTYvYm|S>cG(An5O9tv`Z-(LAM|4)oa8K^N1Bsj&!dMPihqTIa|5|duAcIos2}&W*~;l3c?v7&$3DpLXA%} zxs4Cly%$T`P~-em<3`E+@xhQN>9(UJ^~gPU-Q_|Bb7?G%1g6$(I-MeLYU^SQv1fK9 z<6`sLMutp)Yjev?Q{-yT1Up%=bj~8Cff5gdI=zDHXRJ7VYeR+pM5E!VWRcc^A<@xe zM~8zYn8ueZvCt$(u#CDawteV%%a0e%NnXg?*6;XGqhMH~pdn81nO-is*S=^k9$@N! zX>xvHuZiO}NWaba-;4+LI{g-X#!BY$d-j91{zNbLUGOOTfhAk?fAi5@tH~I)kBL$fe&OvA;mi+m`F~onG~e z#{)yIe!zG2&$EqvXmM7rxLRbG;Rzm1MGBb!vQ{H$FXePEeQjHr{9UgmELYR`6mkWF zzAIpvOp9Z~#z1%XfL=wz_6b+S@q8}tqS}3h?O1>YwXKOhV-w*sy)Ko)bd*Wu3ZM5~ zVK>o;R@m1Qwylr^fj~6llvu(}N%*w`f9N@{#jww{6N)WHe5M!koFr16@g>|Z_`=;u zaL*5|EKk_fqW`G9eL%I-Dm=r8K1oBin z3MHf+7COjehRGdI3L6`lu>qD*@AVn~0!rF77fZ6omUgakR>T!;S>TB?#CR9+;NEy)-&BWK0Tsl`r_b_jfXhGxZ6Wi(Yx05;0hL>L>9`;)&G9=^v!Q zC*G0zXY?bI=^3o&P|gt9DMa!KJ4oNROc|?U83yVzVkmMzRx72r0$Kyd4ueB%8In-O zb~?9j?BfiBuZ=`Dho!0h=p`;qSolj$fO}& zU&^IfQAm)z?HZGjLNJ2(Y6$80mN2a;nK@as@0!Lsj+w;Z}T#m_@ z>6ps?eatKrajFv&?jReTN?OW{U&v^nwZ-TI@EGx?07=fv`3mshNS#k72^7wt^sMAb z_E5f%+>6A@z{>SfvS3mjkriyyIF(2NPDe2(lDG4PT)Y%3vbV`|ie(tNeM8TVF+Ym(5~P;&iitmaU)_eV!%hsAujUahI3gejiIFuQC*Qm5E@r<@v?Do zc<9O{JFIf`fK~oT_)##)wOodrfj)35#0_Mm6HW*sh;ugfE)uGV$6%1Ozp$%cMmv3l*XmmgB-kM~OYQI?_Ax11D=26Op2w zF->xV8w)@#mNm&-0owqTOlxBV&R^pq#<~FKf`2cRrwx_VdZ;Jy8MDcsqSE70fMn*yiA$#E{Cz`?S1_WcQ5$?DWmoG&MF8w9c`n5yNg(tIQm!+NYgw>qNWXO1{UR7&njC*Gh^v_+2Ayb4*-`T zodq)jxkB9rxSeF2_y)h3kyyf*H8WAj$PyHuX+Glb@?M8e11a`{y_RG*mrm;l>bkNH#@RsZxWNB6*4`DK5 zGZ`&1OJYegz>-s>tpYB9iXeR^>_t5B@)oCM_v*sd<|~e^PQGExt}HDZiO8Ob`S(E4IM8p%?LaP-uRT-Q62umk5r}2M3i1F_kG5qVL z>8(HFbo(rOH1)^$NAgnTM}TUOfcizEeUFQeUvINwL3LlbikJ7n=Pa#8CB) z$%6gc@F=l=YWTHwbAFV3)f%7>+NKn+bmx? z;fQlWYmbm8Y!}}m2gqCf_-KRg&f!tHAC7u>WD4%0!&t4DH$|ev%nmc)A?M6e`#xZo zaIJCHnZ~KDJA~?8W@-kicgKdx@wtjbLibv89IPF3C>scUK<2xHTG_% z#t_*&r}Fvi{)*+3@M=qae=>usQ~TGkrTOn0l`~i}HJM3$18HTP#=n**^F)ep!j6$o z`uN}7=xfF^@CYW@XA}5CX7dab*`rRW`R-fT@$bR!|Aeqg>AdGFw>0F6aef#8*Yh|y z-96|$mHL5W5p{hA9y>+XJ3CN|b|AZVc76H|ie<#E6%i>W>K7r^pMCxEt=9DaiYW!B zBk44Y0?O^|6heaf`Co28iHK7R4bAqOyAAz5pAQ@J8LL>xWq0hm@_jPyD5t)c!jSsi z&o(gkAK)2iEj9NU9>dgwhy}k7&nchu%O@D(lxumeu_&ql6ji;cFVa#@R~miMvmK+z zovYl-`n5JZ7TO@8@QioIYcQHi8Ew+i5ZKrK=sKGZ4s*Pzy2s~q44HN7Q_cAtX$%)gPDuagA$^xiZmM;xz|_J;=YDm*YIv!1A9k^zmfXI3>l?#jAM3)S zY#&1!`VsR|^t?1!bN;o*Aj2IDg!+z${E42sJ*0#o+UW;a2CU*-bo0Schn-c1=h|mc z=V9jw;CYeZx%OK^GtYC9*kjx4J|u^nbM0RFskQyF|1)_O#Q&rMG19NhzB8aSR|2gVLe@&uyPo9;Jh5 zV1`wWP&ALKN+c6{ey8@Kp8$gDIo(7x%#Y(yXEn^50Gr*_Q~55+4j9aqGH~$@Zfz%b zHZ@>@F#r{qT;>UP0e~5hg*#h@mB{T=9x197(8@fGPVc&2pXCN8u)s9_AZ?JcM>9zA zq;nH*dtRgXh2`*LuAtI8_Y#bnQ9sELkhrVz08U|)e!6)8;O)o$t|KgnBOg^wY2<`r zLALQypC&wV$LytsQKSL>O%IA)tlZ0>uAH)pDCug$-vLgAL(_g&2r>1q)AUcIeii@J zVoK(wM=JDTz$)**{p#B)T1!_;RnP~|LeRxIan5z84dZ{>b`WFDY`1hpoI-^`w% z8wC!(iM=hF-&Yt0h`4CFgSw{xaV{#!_E}XolKI@yY2(f(6}P_hI<6jRcm?7nlGLN8p;1A8y7wh@ z8oy|MeTHH5Y%Ici=V+8x`j5IKspXG8fMV$<3Gh1G)Z@NxD!)$#~bmVd@?{ zYDyG0Bj>7!TV2U>FL48|iD9e&6~lRfDTGr5(4}c~fmOmK@LhQ$v=7Q;Hc1b$Rxk0* zXnB)48ect3wd2Lq-$Hpl6%#zgb|YTv$%sk?AhbcDf+lb2 zN*kOm*p((!0w)R*@=4Z>Mpb3DY&=EK9>89YpiUiyhNudSSg#{r=EXC2-4zO=_QqW= zxMUVf`F42EXx-aMR1dR*0sGbcEEUK?_0wsK)n=rV8FVfvP|*kmF(`ANDp!qIq)S*8_MM^(5e}P_Enk9Y})7YyZY1_a6s7LYmQj}1lb_KP2toVsw=cSTRCYCO$ zv(+d#=aRXqx_ZP)pvV@riiHv|pt=e!7=Y1Wc?F6SY+s0#$}g9TJMMc#lDXZDArKG>$Bwmg$|SLbGByGzBV4 za=PX>s38tLzyW7V#XPcj%~i)okCj-pEJ2~~F)@Y~CQ$|!+zAfazF#UuS^W>yh|Pf3 zR6;bGMGFYjMap$9Gu#g0_A3;l$ufgU+88ouxPUjUORPYXfJ6+-;}7d8SP zauyeqS*$D(H-TU{`7)_xiJf3ur@))~2$gMoC_j8rkuQjAB}6qYXATgLAhQqdEPtYJ z1z@=759Tl`W_Vo_N4%UC!=Q>&bSV;3@Y~>&q+k-1Jz+fEiqEi0`FxIq5LH(gIg&*! zFdiuwRM!sd;3rYj8)rCSm8s0yjwWHymW`}w#!>3qCGoL{3Scaiu%HP(gwjVe|GU9! zNQbcygN^_wl|{D_a19jV)=jSI1RC5NO$!C+9Ir$X58?#dx@o1XN|#n8Tt+BylyrBJ zQa>VS!ro*Bj0jd5WKvMQ8)H!_pOXc*z%0>YD2D29%b1O1ap4%NSq2LpK$bb%sIV`k z^YL2EU|WwQg|v$#WW2N(lh}X~C2tZIHYu@)V--Th(y5F-k5Z={2?D7q+*1ZQ!C5U~ zrj@D@*d+0BAzB(==PD1QB0WPVH@cS&f?jP}I`VGTe}Q5(cXk~rK-9JAs)G2o*>#wu z>TnmN=E!)Xy1mqA5CoJSj>;Q-sV%MD$6d^Yo(M1>^ci`n0n0~3;ur8JogdeK6l`|K zhPhpA7)@&;U~>^GG;B}JFtRrkNttAiI&~6x|L>Sk=n6smRTCzZhZ3-WUJoVkwz}w* z%HU~iPyUvyW|RZQD78s0ltPJ-97^F)r4-y6=S$iW)<`8xH79)(1G&!dTbmRjj_D)c0Tb zzUmgC*Y)8@V~o(yoQU97h}4G}@@nJRUqmXO=Y)Q}AIv;B|7U?X56*wsg%HW__Y=Ph zG-;asJfm4{>HQ`WI!~r7h2k)xzC;j82VT~6)+d}Bbj5OOx<_$b$|ytSJarYKX4wILO+uLN zlu>uiyez*B8tiN8YNh*_>SCEcCpL5Dd@9cKR<8|tHr!0uOhgOUv!woS#{IPgrG}dN z$Sv(v@z5@(;RW~5E>HTbLyFa-9=;=u`Zf$&&rvV5%~?E3$JNR=aH2bQYrBt!JG4&R z@uU|)kTti>;o6$iDYl*?^UwEjt$vF;y&PVT%J<&lFf*QYxnv%3!z>w_6^~2wYi0;F z&e4}8M}L5G^eyAC)T<#7n`3R1oV}v! zEmt}`_PJfiWsER+jC+vIgUDd1z+wytw!&$^{QvkaLp=;}F-IcH`eMcrPf4aNo~;8d zcN1n(;nJ-Jc-9#%#f?HX9BJ}Z9<}9OP!0=aAJ{g1+t&uZ=IL50>`f-i$B@N=!DSAZ zP9dO_tGel6Pw1ot*)EhpAdYx`Un@+M8^DA}3fse@&ZMxgJ5c`1%LpwrmP2(F?VN8~ zRv6E{zl;c%XIl^EcJOBm@3+3ZrDfg zYE!vksV~wHY^^pCBIeaeVb|@=%005eaA8i0h{DXIZ$06xux6P^$rxuFtuy3_z+PnK z)Hbv(DQ>RhjLLfgEXK?BPUKJ^W~Vx0BH;o$R_321(V}!e>kiI6k1nUg{GuF%P7Y|- zOv4ZrNV~I6gPdbAs@#aThZkg zF=Rbk+({Q)zmxho#%~Rou|LZmb%YZtFB~8FcDz)cKgM{{vOCro3Y~x0G&*syPwMxZ zMW??U)k@AL%Kc0OQ#maodP~cpEs?XMZX%~cO^eJg=_hb20G`Q7s?a}^vq}}RRL-&u zK$Xgwx)&y(+@PvcIDfSH6i&xtymC1EYNT)qO(RbZO=NM3ro4V=6G@zXjU{nbtwCmS zK6VyrKxT2C!7thbdlAa_2^%sigGXPC6t?3Gp=9j|g1M;#PF%W@qQzAuaCV0dQ>XET zPT*{2PgbUEDgZoHPJs~)Qyui9N9rcQAjL@_ITgmUNWQ!T2vYxpG)St8e?lhSXn*dIrp7+*%0Tl2i89ZGm2&T zsf<3ELdP=DU=E0d%H%egF655U*t5>a9Ii8rE&c1J<@;f;qgL}&HZQ9~yc7J4bS}3` zr&YRgfp$obyhY?@<8+NAH@ZIq*_Et+y$e?&5zzJN@p1v(gE_jP6Rfs$K-`PLdYsE7 zMH$4yn(Ac(@@Y;sAy6!(snFBq*DfoNBg4)2%6X29FZeA(BKyuosQRgat`{7Mf4Xn} z#YNj?A7x~*`uK98z|tjH-y*ry(P3XC1H&aO@&U!va+8%ZUcyvQ_NY^w zA7kR|0_x62%H7`%pL;3|^m)kQo7>&ZMQrGkviFo9hPA9+XXLLi=erO)KvbHqWPDIjpea5eLGO-Ar5b-MvWAL zhXm^hoM{?euxF{Qq5pEIi?@bY7~(E^wZxbl1+^?+Y)pt4z=B#qW8_u?wu2D$t$Jjw#I zxGRdB3%8yxLNAM8ZB7J6Ap-xiSrPEp#;IlazEdmo*DC%>oJp+U>{J8pJ1dGVR;STb!aS%dsrJ1? zv2qs0>}a)N9ij{ud4zB*r_sgf!NsxR=MDU25RMKjXW6iU5Rwh&iiZ&*)%yrVPoxA? z%FgDYWi?;wgLq7(yW5gm5UG|gI}0D~Q?n8QoUHEr4icn4P;B;5hKkxIh+yQ8;8AyG zQ{@y`0|xxlP&=~m@_noU0Nsx4E*2uVbh;2sn#Jv4uCUXAd?<9N z&ZIjq8lf;qzp!K_QH`Lec@G#+0nh2!jEqp1p_Iou>X3f4!!C*6{SMDmwwfZ_S=n1 z$*(i+g0Q_6dZ!jg=+WsFxH!HJ|2V@rN-wyxT^xES^=)|3rh|ydlnx44>mUK4uMYZ; z7|vG*@s~Yx5S!IU2dVF*4q_iDG5%j{{SE1$zsI9)9hCY>25<{i5P?^vf)rsN^Ag}H zYC8Izexp};+G`-+lD*&NQMcvnh)V2aO5N=9zr;x)^Rg;WOQ)AAdkZMl9O%|AGLS(&sY~F3vZBDCodOTb ztypfqsdms1`5GJA2xT0n*)dZs)tnCXl-Vk%hZtxS-*MoTEkns*^sS!maw9AC)GDpgQf942l`+Oa9lw7qz}|mh;>^R z`=a!it8C2LYE?AFr|H=l1&Pl$0VRsv__F=!PmJSqur4?VkB*yXsZA>EaGMcdnHx%{ z86mT|Y#^H}p!pIgX_yBQ%E(442I$QC9I_5{9__`FBB6~P*S+G41t3hEwOc)zLQb&( z`Z-2(e@@~Tm^~&G%>%nT^e}lY%@1P;Kwf+75U_Kqm z7E76Q5GR2S`Adhjx6=`wnOa@Ek+iz|4&rmgp8meQ`OrvuVb|=QUC#FI4)@HDPHZo& zUkUa1PUO?`sqUTFM0S5;C9`>8^-a$#Z0}yZezku%G`+NOP@XHUt}d;N#S?QI*GDFX z!UyxQk>O1<+M9@ObZ_sZW_wG4(JK>k^IcZ=z{Gwkx;d4ZEU&C~j!YaZm#(J!!^OB2 zEA9o7`=zd_qLqs7PK~Ti?OtDAE|jljM%J!`qaz!A%c1R&@bZ=DYIe=qFQn&3$5KOu zna<(pSoZqxSUEI5-e<+8rWZy>HrB>F2WHl;M3a28J+H28|WM!xi&X6KfZ8nCXtvbE{(+ldviPa&FTEa!IkLsNGuXsS|2N2+3#AJ z8NZRYuJ6q6MXpUqDht-oWgQV&~XuX7zg4!17o)*}1;BU(C*qb*^V;BITjkRA(kLGqXQc-k#l_ zIvDMq%xCf|qn&1NF_nwYZ!c}{^{!mMv721qv95J)u1uCQn^|jZY&(+3_05zg%X5*P zaCu@WvXM!3jb2?V53ld_tgq+hb1PGO+kMHI8-=Nfxol`^sL(Sx8{b$pqq&uEuGEw4 zp2&}d61nSpH$t-uJJ!_I{hpm0YrWIss}uPfkD&I=;8KzdwJFP0#mq zjbGa+Y!8g*vWx5EvwOYM3&Sh3%Y9eM*XQO(XRnur4|-F{*!9w43hlX9%V5#rwY||o zXL`t7Odo`^1O3VA(d>Vo>}cH2gXKnS4So{uk0QS?`PL0#t*I(*GI;#&&Q^- z-Mho(T%VbYOr@_C_OH#(^zU3>+Fcs!AI%MqT%8{6D^16iiett7-bg&1vkLKDAa^-1 zIy+^Rmd8qSV?%jsI@;eeX(jfHy&-EgyE~OwjgOae+c(A+2PTTUJF|t!(!liSjZ~s% z(=5hj&7Fgl6?1fVtaxK#XD+=ISy?Gf&rL5E_xgwTQrYz@SI2jzdnYDGCgV%x>j`V} zO1ijH9+`{fOY5uFWbf$8+;B41J+gmgV0SE^x!S!tcYP-^oi(?u&h`9IU}Gk>v=B(; zMt65M)>tBiF>^o}nj@rDVHt(p-lTn*?U%&^M`RuG%dd7D8Q!y@=MwN%MhMrX> z{>Ml=HdTZ43e+fvQJ-4vFC6pSVMaKh@s8#CpGn1KoyBdcHIWhdPD(SisvtC6X*wv5`Wh*y|?B zuDS%C2&4)=WFZS54^9BD!RTz5FXX7FFrM(~3C^hP@*%&;e<_kVp736)KC*wBuvUj3 zL^S4C@F+X7f6pzAD8=doZ*!idEgOqrrRU&5%oXidYpj1eONh3WP7No_*skOq7c=lS z+~lc=(Nji}Up?T(1Mq>Mx3{X^(i7NgiIOOv0;3djv0U1aF>94h95jXuPwxYjNkz2d zi1qy-pA$ksym@@oB9_EB8NhCbN1F&V;M;`jUD z30aKN-Y%IRA7Wyf$Y;R?Q&h)*>#1Ebyj%3N^r3Be%~ahj9w8*g?9TY`7eITD`0(TH z?HaX)q@5I&^HtwzIr(Daa`Kl_PW~SzC$}k6=%v$o;3;&pfJUIb4$nxWK3(%UJ09@F&}AbSW7DEpHniS$MJ&g0lUaZclYl)1`(bRIchdFDzG!w3wD6LETt1B0-J5*ho02(Xn`a|8pkOcXVB})^~vz z+_>~bB+ahBG7ENtj&POwdYmDr?`GSjJ=($Xs0}H1n6=vd90wNuoN1KW9@am@Gq&wZ z9eOE$z!9tnORJ$L(9054WOq$v0=YDn$cJ(&0MxZ`)52>MN$;op9?^`o(KuJH;!%ds z$G!CGpdOPRY;NPV$B?;_F!APyoLtJZYq=@ z9Wcs9MIx2n;%Q@5mxquQ!7n*NOiA=mibQd3%w=17_|{f|-@M@f@gha6BHMHWi3m3t z^U)M+WkjfBF?K%;Zgt6tx%W#Ye6BJLUlVFog zaidf&>tJgK@6JhHy@B6hdNbQ~+FC1ok_%wzi0NDi3*6v`@s!US5QH7Fn)c z1ITjK>RG15)lH}UmRo33Vq3n$&`7K|cMzA32uWk;HaEwi0y?K~XmtatiOrl2wql>+)=0~i;M*S}yGcM_-dDX5-V@QT=- z%F^s=)Qor2x*5fjgyQ*x$Fl7KTU(BwhvHcufvfh;G2-~g2oDYS`2AYLJ>tf(Ci|0k z430y`&V0V=Bqx>9gN_rP9_1};6est)*+8f!nvhh}`jepjof9HXCeAdasFegVYu)xi8^4-Kpm{XI0W`c7(K_JPvC(+x0|tf*s*<>bNEYhVJe zst7>xG_{UbpmWkSqfk>&sE>NA!YxTPEV;k@lJO>ZsJtR@Cyly4d>tb~^Vl8}52yA% zE4(gJXP<%(M!)eYd&4OuZvGOQng(Y^SbJ`N-dLCR5A`@4FoDvKSyJH zyz*5t74@}nA=~4cf)|tlS9$Mi?B3?|Pz7zi$W~URKRr|`n#uxBeTrD$S-_^GVdX^p z>Q!>#I5{0v+CPhR)XVU4OZx&3O>sASE8O|Dmv)+Y`=xl@{T}`F7mon^`)+}-fnEVu zam|=BY3PsdCg!V?mgjHIR0<+H?54*o9GM2!Z#oo=g(%+e{4u81w0r1*Y6r#}ePcS3 ze;@aZ`RGxfV52s){Sp9d`#r-0MtTqdTB{E41BgMX3jXfu!@B@P>3(+?k!}F0)T}H9 zX4(_X%wP66yt7&T+@}PQ!+lC0s1xvT14tBy_jfTQI`Q55!#k~|>hP}U_kcaVr&qzL z*o<<>0H19h3v!>c9Lm9e0^f3Hiu@EBaKJhnSJ7KCN86ouw6W}y3Ys?y$dbtL@TzXg z#Byd4Ohvgf3s|%2=)6jirSujN#!#0)oa7XW^Y$9xJZF(?&WROAb`iDl!$lC2MZVYK z%$Y>L8eSAmZiYy)g!FKc#ULVrBIU-G$`MKLAjn)yAooQCtL1%C$dkaA2skIq2oid2 zR{TW~eWo5uvRlkRI25LCF^HG5jGA_II~1 z3@dmxk$s?maW24_ZnT?>1I($lr7BR_eGU>sJe8W|lMsk#`GxcxwR}pqA+*Wl6~Q4q z{lRo216dBatirCygtDcb$mE)>;X*lI%+Da9Pw`vInT`NdP zj+(e`hpEM=33X`tR1_IWmcfj?CRKCfP%e~lg=K*SbNigpy~;Qsgc?Ca7!pV2Y*PRQNYl$1E9T)WKZ=0P(bB-0Q>}?_B{adm%R>v zG^^hMP<|()x6b^TUuXcM;sE$bhS3v000Q2s1E3=2J(rCWq+KYi4)4IHy9H=H+WplL zX@^;TX(ztZw8IDL2=#Z3)9%0BB-(|-{9R}HX2%+)=lhhn%#V7jB z#~y6hg{v4Y*xdO`Pv!+Clp8yqNf1xrH~q$QM*!~$?~|S$l!M{#xu~v`x{hP^w|KCN zk89+c*rU#5)gP6+hs!{}1y7k=^z8oD)EMX>_rcMYtVEMzg3-8{EpNVYuAsr$mKTy+ z9xTs>PUckrIzoworVj3sxu5bo?Tg7Mz84`>pRV{nTFZGa8&mqfjj-RtF3*BJ5-0Gb zHsi`0svQx0H7YpvRLt(e26dCQQN}O?;k>djJJHj}^ zxn(yY$KT?^{pzf76a6n9g8D(?9#I+bqz|Z?vk&pKd*67_u@cF-=S0lkuAIM{y71;gRwmHHsYFU6~G@m0>ICylW|Q~m>a}qxY7bwej7tjZCnb+yVveg@genV z;)e5J%U{Rx8fVMjWOS<95tv6&GUO@zrjh<{8>cJ{&RFr1qAWWGyF6uf*QlPy3$n%q z<}Z!_m!$3pA>Y!X36d^H7ab8-KaAr?$s2VZCGoacVn{N8P*V z354yuPHh5h=PQm=Tgz!@JGJ#UPrDb6NV_AS+NK+)-S|zSoyVz7)9#WjVVcvf8GT=b zzW+4SLPys3AM(}ruVt9SL-7|uuErJr9^->5#n0BH6hD5`3i;IrI7iqZG&ocIuhdkj zI3FA<3Z!8Zt2q&kJWwswVtu|E`Ma@xUq2duxwRVkM;oAx(8xc;XyX)zo1~EyTR1dw z%V|d%8JEf6hMqv!<1U?g#QW_d67R?=`A-@r-oLv^#Pd+ens|1V%!${GN-jYq7d)2H z#KG`osgiAxy;cQyJrwJ?hqYquI>OXiP2G=?+=sx2RcS8|Jxk?#zl`A`AgxDu0~^69 zy>842B}|hsCH#Pn65C@B0+`n7OeuFB_s0l$e3fPh@cJrE{&H)T=DQlerBIsBGh8~+ zev_1@BI7-Fx#PrZM(*|?cV|78;pUziN8jI&%wBZ&^ui5{P81<{p zkSq~QnlY#Fn||YS>-7diBCrEJgVLWEWUDg&m%SDj=$Vm zxjT;u8IP_(6J#@<$ zvfl%-?oGOes{M?Qj=BBQpFNc8Cy5FTCjtCxMvp3u$kM_kADqH(nu4EVZ#bFUO$(tB zX>g_yH>J|y$?~q#`SCN%HFRFz*(0p&%JDPWtH5uSwxuL_?RoY{zZDen)wX{N zg!pP({<4R*Wz!N5dNofXkmx&^!pR<1DV%4|H*7|p!lNf|MiO{cDV&P29cCowy=KhF z8_;b(%Y>x1Jk`)`e)c=@{M;W7iv9JhzdGL3Ny^>7i?R{O}U*2Cpg zGTx~(QmK(Zt)4A!!`JG<@vk68b|$1M-gbEJxS%zo{@)GtA7paUg!=cNAhnDuB~mN& z*DC%>oJp`ZGndM??aEag?Zcy(GjsaP-SaS z8EZ#47;c-$S;avkpNt1YyX8Vq+`Jvk6?WQ&(Tg6{n1N+@{09x(H32_AYtr9w5Wuy_ z0qQ;wC>3x41hpWIx3$Sj);B3e@FIQK_MA$seevz+;Ex*~k{B_!9Y9fO0QK&HWS0Gi z+Ks?IiYCpX{WgHN<9)in0{!gqRd&aGadcqTOeb=Y&iVblvBK!=^3+agcp{QBr^Chm zmBqDaX?$wQD((kjv+j2{Q3#jF#a~?N?CEWLPQ-d&G|N+o=y)tSpPX7+xiJ}@OHNvo znPPrpc(QjgW8vQ9#nfar6g2lk)04x-R6f=0flWjE5XWKY^0A1lVj57IN4xxMHTd&k(B%uc0aU03#^ z*}3$3*J4j>e1%PLt#e>^W9dqMV{9N4?JTCFfQ(NvXGPXlOYyM*4(0IFjk(>a+{V~c zA+~=X?icWvojFm??D;Td*13Wkk94u*sE>9Ha0Et{f{&W(naY#+3L`5E2nKgAn&c@ z;KAobZ${#sJ^j7?u|R)UUtgfRZy*}z4-Iq&x_h^yVY6?bueY;@zksj-UI_R0_x5)8 zgu^`yIS4h%4|_Vh!aZ%TN=<$TqbH=rhz$xWF{;qh1M;IUeFe6JHv4&Cu1u&-FleXh;{`0S{QVs{bY{q6Eba(-rDX1jCPoG#5R zcTU|nNX{&dB(uAr(n2iG=5w4I@KO^ehwAr*J%(Y##sCC+Tu^mk@MUZn#0=Ot$QmXU z%P$7r)HhvWc=mw)WD^N|`kKs5zT+(5vb|h(QnZ`lC$Eu6F>(QKzuNW+!*v{efnr5U zV+CktDW2RP?C1cR3dJBlP1z50m{+OiJ4}0rX~nH-w*k{C&Ha0IG`DL9O#Kp`_uc$H z>Qw5V!%eW#AgrW4Z@gv~sCxBt;@!yEZRM)Po-n&%YVV33=aZ?=KPPp z05Y7zTkZg*J5pYY3=V7a&-lg2MxVS}*+K(T%Vd`;`?8_BB`!j3F9NJ>9D0tRU!`#G ziQa;&dmX*Vrm?Cgq*0Dn zRnyx5$Rg6FKz`JI@vop`D`A>A0!$sEGh(BhQybpKGdVVn0Bd^_oT^jaD~eS_msCAdBXTAjbaEwl z_Mk7wSq9PPm;Q1!qu^jVNn}Z4MfyHpc7rxLSn_+#X?Ra8h%U8=Ksh?m$UD0gNOY}s zlrG0cCtubmQ?<{e*2Ekr-~#7`s(A!-bYFpa5Hq12d%~T@(9-baq`nfs!rj*B2g+5V z?lw(#5mSK(x>!bVT2bvQc}L{IHg?iM3(MI^7F}2q(9#OmnMh&REaKMjWIAocb1eNH z9av5Ds%E5ywNy^$B5{iY4}7DQGOh;)sbEUsbVV11gD*_D8em=#%vgIk)Y)AHdys+A z88qf`rMO{HL=PvfthfW*Dxo1Pw0Fel90%^ANpyVGUxPjZo|VNJV?S3)M>>Ybkeoy0@3Qfk&2ru&n>?fkETe-Gx zJHp!DZ`?}TLo2cI{YSvYmvc%VeM72RK&#R~X|vI3pdOt(1-Gj79d|#Up94C4(?I#l z9%-O#TAwsf^&L!Yajh|6R94k*Hh_O&v40wmx=&drk#z6XfPhVn6+GlLAoMzpuXFyY z0ZfR4fYLehvh1WqCQH?NPKGf(8co$>%=;d_$&C3VCamWP5RCaK9(}DD^PWqCZsIj_ zRQWX=RSJyBQ;yq3`e0$*0!Hg?Yp|y3HEgfE_ccBcFq_JeO_3S`Ka0fu*Bm;vQ4BXA zkIpoQe*>O=mxpM&J#!-G{ss1^vz_lx+@8lICpp(OId8-DCBuWMgFBdzz{oG-@NxeNzlQMTPi7H9#aTRP z4Asu8l1G1XNWc}fpM^6B&INI5hvD?jCScMV*?Sqyoh1#;H7)wa2DnC8RWunp$t_6l zPRp>Mn3yl9Hl3YX>^H$3ww!Ex!bRohWdgI&844T2@H`cfeLNgNkDLJIEEjU=LC`G_ zqfai=PZll#GHc{Br{KD3W0_cp+uK412&#LhzS^D{jPA#}r=|m=OT(f4emJng17S08 zEj+V4ObHPz(hv6z9Bs+0pSUE-W)G#h8`x}dRyV=;Vp zi0=wlG&F+qSs4q0XOXh%FB@iXC&(Rz2q!tRRUEfrF%K`CkZ|0VvPoQdM&RL|CQOwi zH+8{#9zL>r;mom~%ff5Q9hh#Hvv4QVT9p47_uO52o&}3Mwd>KYA@sxz&n9v~-eMf3mq>8CLv?ScW;ltyhn$?K$N8lO zP$hO0g{lN`DZhV+$4*X)jWw8F%WZD!{QV;=^g$UKVuDizP3znVxb{ai+VtpsEHLlu z=lXA0o3EdXzwGJfI`VBp_deFJJK-)odNbS!9=8o?hP`QuPHmc;VVg0H{>Zs6Ivf`d zAQ#nkVO)`HqpElxQ}PIRQ6$cmG(izlwm*m-pV%I`-4aJ|k6pDHG$wNUxXiSG3mtLs z>d-ZQ&7Fae7ovl_JWSoosRD)(+G`3JgMxVom3AOT24g58?lDXj*!KYxMj-BW(eK(s zT!jaBh^z$`m++N&(3V5TLwFb&8P76EYn7t7XAkC~LETDg4Q{)9RIVRk$s&vg&#j71 z6F{v9Thg9RK~Q?!y`^du2!zuE1PQDI`jPF#`?&lMTY4TfSL{R2`Scx$?wzOBqT0Bd zqpmmR_at6lR}ACf;|W5^u(UdIYC9LLwRVUpt>YZO`WjGsVzZ>l*zxPf_#Sdw$Ym9- zPG*Pm=mRd$<-5bJ0G+-&9DljBJ6ya0QVWOq79+JYZSf=`IUYNl;xb1=5BjvZ?8|?T zz2~yWGJKqim)N6D=i)Ufb}iT89`gQv03hXkrj-+G3HSg*V(LUBpwpw7I?V@#;VS{( zkMDgYfWO>Y3HS+y04H0!`9Vm)#~AF+M{kk@2(;mD5_?l;PP}HUuRnnVe2d32+$$FD zbuS6{9m$BVJ43_nqpAG%>u#A$!B9_{vDPe2E0KT4Wav01$LAW5LSb^yWX$9sqf?&G zZ-#MNwce9anjW3-#gcuM<~@(sP@4SZ)+){On6SY(`-6D&H98n8PH`wr`m{N-;ZLD7 z|A29wQ}@?Yn*Lh3v5?fW4NT|^Ns)Eq7j*d5@looaBK*bXyHo+dk@}j*_9IlE@FGGC z&vp$_e+~S@B+|kUtj7lawS^k+Ta92tqkUbN7K0Ld9j!=tQ%35DRg)oz&p8>wUN^M< zVYph_+gHf7K__;~t>!hFEcG05D7b`+gYE6iU5rqIp$fqq9&jw+rdHbRq0MiDIu|h6G5ffzS z=VH0E0sLEe%KhFGiQ4W3Mq)rUHpB=5N$D~zV*$~Y@?}xqBOF)w%{HNeglEXRyfi$8 z-Sr{&wk0BaluEAAl#7xt3B*IMBskWvVph=0)>tfn)Bul?;Hku(edq$8N1q+Z5O z#_%p-yTh#R@aWBFR#(XH?TzSFxs4h1RIs)>zoO3WU<>!HGoveUe*Mc4X}+VvkEg;l z1qiK(M!xTqtpf4^yM~ukJ*Tw3c$sbw&*E)#mb886wu|isrMNCUwMTD#Jk^K&nh5;0 zm>XjeB&n~*6*SX#(^+W!Inepe_R`SyqO2`WO@BL`(Ctj?`64jC49wS}8@<(V(%0X~ z?0|465Dr)8f!L~u$;|Ld>F^2N^B6f&F^ahzG!BHB$2Q!pE!KqupOZNyub@`vXzVjh z7yu4SP#4v)%f2W&=NS*;OY+Q>xYRH4P%jDto<>dy|B zrQ(-|qo<=W+}R8FNy^AI+)FtN`kfza07T&lQ6N6-qOu;%3xacs2_y)o8B^%De(DG? zoMs%Q$MBl@tYA1fuk)htPaR>_qV@sZMBY^@gfFrg74n~)XEI0l`>oFKH?| zWSXw+d=$%NGRTq>2XUsbWgc6ovyWE8B&U9T!VgFfuUv9<9)O_uYsW);DR!TG>Mx-I zWV~zRVyHp=?;hH*x$6`E z1|!t6TxwjOc-IrnU!V9!Uj^cEf8yUjEfO)9WB+d3rF)!0&1hH}>I-$2N=BLpaeaJ0M!P&Mz}in`51g5C~7NeTM$>KLlFFTK#tP+<^OC)wS;&FZl{h~im*2+c$^bn!$ zRYngd=~^G^rnOYv-lAB+5w)RDn~U1~7wCZt9?P&Fvg_!9PrD`PwznMY+im67UO&rY zs*qyaJx5xTRuW&&_{1Yu9|Mwn)gph{LoKptebl1*PO3%rfl`bAvH=1LwfIwvfKFPsUM&)MRccZ3 zjzcZdr_HIw{|dGEH6F`wv#i5B^0&Vl3ugaG1NN9Rm`zrkEtqYOT~Y(!yOMIHjo&6z&|Mr{K>*_zm$gtBfZy zmko+oNzBL<MX8C33}jct-NR$V1DUq< z5){xzqGf%_lCU7szDEnACDCfwD}1qW%CK;$A^`}E6obwS^5>&TY9vUA7(y326mxLQ z!V!nweYhcq3PjukIoC(HL%B+F2e9ywGD(Y)Ab^Rq8QBGb033>$aTk(f5-4l#kwY;w z>lY4XEGa6A(Vd5#4izY9j3=bLy;Fn>8hJ|_NKe(_cREA}``|G=$_%{s-%@O-*Fpf| zAm1`$51g%yJ&*gM1wwp{yO|$#J6m=y9WNJ$_8zY<_%qVeX>p0FJB8EM;=AQn;i=RC zkwUB{c+qwt9@>frS@Ibsf-Y3p&3pdop>WKD`1-N zWJC6iuuW_z;`S2?cd5aOkuODY0VK1LnAYmrwz6&t;?br02QruxSj5kOx^K45>-q< z0nW2Rk?T>sAU*1hpVZ+VdeYewyb0kLn1KdEiz944SDxsg0N~j_GC|5|{;I$K6Cvr1G^ve_3M7Gp< zZ2CUV44yZ{3@^G9g>Jtom}m}S#vNHt3I=y(jeUAv6+t!}3>G$2)PzBa%8R{Zu4M5( zR&nVj;xjukmTa?7V-9^^8kU!d6k#@SOM>S~iQd-g{uVipY$#@k3@MSZ92`blxo4QM zAycSckbYA5g|f+bFl!b&sMy5n;2#8#E=2bZ;NOB72ycei$<;B&OIw@4wr<_)gyDd^ zQ)FQ|w`uGv_UtsLH%U3tf?W-#J$5T=kFwJWK2K|0A*LBYxA8iP-Z z_7D?oXEd^&r7_XCI-ud1yDCgNwJBk#g0WRDC6?bHyF^jvrZaQJ!w78z@4JuLX#!|p zm(n&C}oU3S+Y_wdndPwI#1|(8C-&Pj_jic|wd+vm&dV=}G z>>VfZ-3SuK4h_!)6RoN&QCwGl8>s^CWMtB#5xjucS0;Z6>+zLI{&H(&@^>4+wUEi* zVz_parS)!JPnlF?cEt4Q)23qjv!_Y^zQfL9;OT$e6Qod@t1@b|!U*Qr zdGb}5eQ$i_u=12LpJ6sLud;9|A1bXVp9zv_{fz6Gw<1a8Z5Zbanh(MmdYHNhWWXj$ zd^Gh4yjRmC|B9*X>C>Dwn%T?G&{+TDc)Da(3R??}e|ug)MK!}}#RQC2WS(~&0ccG%z7^;z@x9`%gy0~?GaxX3*<;Tgkl|Bj#GPLPB)^k(Fnd_p z!5M}C=SJ$@fW)4gWUxCQZT+50;8oed0&R3FkYPV#x(V5g%$y~e8S_|^d-;z2*MEk_ zlInUJ5K>1{-7K@yZCQ2p1giBdY#$5rOK20rlux7mSZeg8KM3sa?*}N}5hxXq^g%x9 zcpLcu1`V@36*AX{lJm)_-PriR{&Z))D?U7FO=iZdjq+sgVZF1zb8aG^ zTpe4qu63=>FJ;EAFO7#obJ=S>tD}o+vGmIR)y~Dv#qiW98|Ug0fj?J{Cjn7-G5fF4j6(yqb-V%!XE%uie;4TXZY>g9(#mN*KCzo6q9avsv$Vi0Z zwBQW>ow#yiKH0w)>s&3zGpps9%xd?wweWs)e5G`)bD%iWwYV4QTrIJ|*f?urA*|_O zZuweyHg&B$mm2Ndz8dTdj2{g3F88Mwy7#sVJNmnxF+V*E;KyEtWTbPumC1Tt3!I;T7PN{Q&o)JixX zE^O|vg?Gl*#^y&;>$`1eN2EPtJOyvCqr)%NuOk-4WG=sYtAYa6Bft1|TU=BaO?PDN zj;!60wd^1@4IAVw!ve43qDxW0*9T zusVB=c6-|{YPU?+qqcmL9-VK(bHi1_iC1cXG-bI*Uz`u%|6y0~Qby)>DUGm%(QePr zY&R}CZhL1AcI1I_AD_%*-HL5yb7=05t`CTtsC3mRFVLQ(JLOrYCR-AOtWM@h6e?fE z&_ls76+t#9OU(f6C3K_OPb6^{G0U~ZjjE+A0uXWBdCYDMCifLyK|W}l^64?5nBELP{T=qt*6z1YqkXcv(!7QsmtX-@uf5;r!N zQ8Qmck#+%1$5;$0vO@**MK%B*pMpJTX%0S%#CC(m9PY(tktTj4Nx_Vns476~424p* zcHF5_Au_(Z?=2MxgX5ey0?qhPyoe8JTK92M}tIs)JyB>B6w z)I=2`94SU;g%*+YJI%C$e&>HSfCM*ZZQmS~q=7stg&%rTeHW&iHBHg&<75@!@z-V? zVQpvm+HCCzIA;A%?xY$W$*HqXyQ~GrnfoV^*r4i`Izu62e!9kan%(nOeNi009!}o> zhLAe;#!YsH$8~KNrf39F4$&zRs78VeMMb=w|<9u#_dQwbuQ?y zqY_-_g48daN7KC@#$T_p2*M$LO1vZW&nSKL((GGZa_%@4e51XNtv3+vtEyugR_v=v zpVVo=Z5UFGmpC8Dyyy`)Zi*LajV1ap6LM=SwZDt>CT>=XlbR8D7ncCxclm!jH z(lY_OWlW)gqZ!>v4)@!5Mk1iv#(kxMWr!z6Ips>}=)fl=8~9ybn&h51H_-VYr4Mv3^#t&I|WPvb=SPCV+4 z4BwZE*_9zh(yee8c>Hv_c%k-Dz%2W7Fzws{`SiD;<9&)NeJ(yr6$Mk5*Bs8T2 zzT(oU~i@YzO?=~t+R>W4S>a#ueQjtJx zbKBYGLCZgJjqWlvi;%;y{Yj+cvMti?s<`ahATN`nOV&P+_J73aGfzfCZNq3tZaq*CK)qx*PCsW z1zDj5c;hI-=l-**a;oa8a!D%BqN=yaO~sduq)a_69h9EzrX}>x8;~`z0sSe{b?D@L z9{lXN!QWw5v~KuPWmly=iBFnK4(xMjPe*0NRajN1tRP{f?h;JgxN?x1i+anFO2Z`{ zaqh>0Ll3PZP!+&0=@2G5_wqws$fOF1Nbr06ZOa)J-K8eknLfdzrIT<;<7ClOak~mQMmWy))j2sc^LXl)Z!&^*`qJ;MQ_ojln^8G}b*Y zKu09%LB{}k%17Ch&YZL68t6WZ5!~kydxlqy2D(q<)yi3{kF?NXrsOX>511 zN1bIHiDgK8wK|i_Y@H_e;NKy@L;MRSxOrfxop~6u*J_JZ9U2%U+P&*|_`X5-c5DBe zvzvKPU|mpvvT3c?05Z+}8;lw$M|AcK--a370PtSgl=T~t2Iwb(Uo?1?yzv>Ek+b_H>?r1|QJbYKvczBWU@Zn?Ofn6(g$4Z24du%Jw5hi*GVWK-|Jq}u#tkLdsn&DAv z_n%;L;@l4!$=3Oq2INcZ3N!`V6|SAwk?HvB`ScOiGtSp@>;qbD=uflro7|jF;V`G4 z|Dz*7{k7r*iU4KgH989F1#tFj#yEJ1)bz&~OEqB}_|MQ-P02qnH)QPzoi!!w&|u4k zb#!X}XnVWOZEN$HFQIisCc@k$OStp2L~e8H%gl2#Z1>JqU8BP`Tj`lmHy;U4v!20{ z?tFB3O_OsP6YPn0z$~dYYr@|i=iy-IG5Fk@#WC1f0yS{twMd@sIT9{36FmgL>YXrz zJNbS*%5+hJIh<@0FG$~cs}ZS85}La?7v(VV`dJ2YZPshF8}#}&pOVE)@FB^#ip;cX zo5)$kLBp>*bG-~KM>CN@9>{4T%j)%40LAj7PzBXM0n}7_b}e^fH9e4A>P)BRhr_d1 zS5WChMPBv-D3oxmh!4Y5mxV7wv5DE+=f>DLu~1KWH8ho+ok*;&jSnQ2v%BH>m2`e7GyAt;kp0iL+Y3WeGAmS(mnYkVlNrs&83 zWXTqYNzwg~i0?#A^yk0aM)8|msc5izW0s7Fn4I#E@u=9;+LCaZicA2U7+*LJaN0*)64b}+MVbVp2pq17fS}%rt?m@*<3&d zmEMqci)Hryu-u3a=+|_AajcLy2y}H9SGy96lf#Q6*9LA3?~bJNR}y30ohw&Yw%1mN z)~<|M@;x@p!0KpsYI}2jcQe=9eIvTOoQ{>|rXs0{OtE)wV0mPaAwUaY`Ln3 z=OS?~u@G4AFBP1-b>OUK-@FSH2mAh@u!wNdB>IP<-Cf;1U7>&(?gxuN3+kL$u$uf~roL-TQYy8d~9r~yu--HtcZ-#q9-Ms??;jUg`e6hGS4ao{E zP-nr*EHoqD9>6M6mFtkINtPEIf&c>INLb9LWceWGjI}0DFo{mk; zd?!{3S^rUNojU8~dWrWm*GGQVi!+kOWmeUIGga$K@{?mx6j$f<0TQ}4NAsw$G%++Y zLrE^O0vTx;_I{pQ^9!SMlOx?Y-)(KGHTMNO@qdqCww(W;#dT$NfFHGw5ol1y-umB9)sh+c@= zQ&JFBWg+cES}&R$p1Ft5sS1ReEGg}V3!>zp#>3hod4C=0B1I_NM&FD_nOX79+HNBU z^Xr-Db$8*e=-IAiL#~1MY*(M_QNFhUctwe&g14hdiPN(Qm`@}jzbjPTzEpthn~?vr zSiNsTK7YBj3Hkq~0dx!Y_!J&>C&1jKgnUKmH;DG7HVs)tOh-j;bCu&?XaE~-=KHbR zNGVt0%F#9OL5I$klG>&fxpg$p9G<`SepY{83YPz#!jELyRpqpyV9Lm1RWeqv+KGocd;{@C#Bb;}L9lbfsPaWJbINUt$AhRebmn8=~AZaKWD4N)SnZ%!+|6 zL_4U>#=v2g->PXF_XTG1*b07;OU$3zWY@2}wB_j3F4trlw45Yd1v^OAEmQjuUT7d| zD3y=ER_~}%d#e+kx3=&l{1H{jSCj)i5}=JuWHjo%-=NxJV-{_&(#8uo2W*;=$R;os z+04*q!GcwM2{#22<_HnCj9+uDlai2sH}RL z5PmMgJhkDU-)H0KQflFKgzjwSEGJ=;t8_Gphn>dm9Aqp**B|lf4^A+N&DCKtbE&%J zqJx9BmPUfW_A{&O-XwnGr*7gIFGRMBR*FW_51Z|M`{)C{Zu>bf^=8_KM6&a{U&Hlk)&3Sh_1DcpYc>if|#)D7G z9YL8#d8s)SCa%2o~yQZj{Ih1fQ|KuIxGGE*?SW>xvDCE9I^mm2_%FN_96&$ znsg_fl>`KuEYJaxkVS%sUDe&y-Bs!CYOA^laX}FmoGE`gV-Oc~6n8}!aT^)s@4k)V z;OMw-xZtiRilT%6?>TpS_r3exyRW*s6BIuRcD=iu<(_lyx#ymfya#q25>W5|*asxX z_In7pRoica+I|zllG$s&$Jo%_mS^k@2l^>fsf1%4r(p>idF>u0yv?jTTP5yF>AstG zD*E45f3dpE+|S2rR>abWNMys-)t>eGKOHz;06`sH59C-8yJtBL0;NFkxgEZUGlG5v ze2!EBIUK}*5D8WRkw}iuflYWGDkH)%eP z;Mu=koRXQ$t==nQ@ik`FDs8?U(Np}S3Dko(X>CN*5tlCGr3vj(T@bexxUjrWxA#IGu4pz?FSH}G5i%&p_KK}3#P zFFFtd#4$8F52upjo~j- zU?C^UH>d^Twgrl040lTypVza6xGT4;eQB<94B6Z8+6`|r+Ik992w@!;wP60EYdv{) zbxmH}JOyf9w6UFS?AhyjYh&a6{q4y5Iym0bUaCazt%ALIHeEsk>&e)h@49f6b*;Xd zG!an&TyuOG0>Xd+P7Y*(t6zM8klWb2`D;A- zu?J#ws@cvgS0cwc0l)fy9can6PS&wa*WB{uOmJiSvch#S*j==k4 zF9y%Ol3~ob_qqF7P6&GF!|wD_-*ThQ=@c7}|AJlS@?P2t_5oLKkENM~kydAdy^ZZL zcoLEZor3=bEDQUD^cpf-lxnk_45zfW=eosRA~A%@YbQccWURVEMR=a_JE8vT3%GY1 z^=^|I5u&!T5G)Z)J$`+C@GN#-Xo%7`p5!^^Fbg zyKEj=Q-7wNIlufzp04~T{$=AOcBJx*(-3-geiO!su7k-$fg4f4W+4$6Ox+0is0-|Y z>fXpF%Z{qgYHeLdjMCc5WVGI^ms98aBt*Q zC3{0`xNj%8*Lify2KP~|t=m*4dneR`2I^V5rGdHZ4|BiA;%%7UL@@VybhBVi7Q81D zJoC#Zc#L|yXe#zQ?=v#*Bb%nBdShN0Y5IJe`y}r+X&%$?Y#s;WZ^WF*d}VX)TL^I<c&4#!m)>iv_*XCEP zUa>|z@@#2ZL1-FtpGx(=yd(Ou;D-V;+71jCg#JCg$G$8Oo$Wg>F8a*V5{p~frEY%% zLzo}5wJW6 zYFp}a%Btlchm=*bbW5`bSNc<{15LBZskafz+C92Sl%2y(Q{_}SB!$SY4~NKb4^kT2 zFUK7vWqL>Y?dRkpHF_%+xElyKY>ebP(`!zH*DD#XwmeL(5^**6NES;{8q(k_4P&cB z#7xh?D``9(f0+gEZeaRF=12jrS|T2`cn~W~-WImdemil|W(GMKJK4Bs%7pf^sL-wp z0>%pM+weVBXp7Fx725CepuRjCyv;$0DH7TO@+`db4&t4cI941Zw1ospo?+rbdoF}F zETQh+LFCyljtsc1%x`1aQgY9>o10zxU4OcL(*q0k#(O6r?`t02A#G+ZDo-qov?uQ~%y zpZRiQMf);!RG6Uod&0Jj>(0yJAGz=Z#uQ#2m8xfe4nS_KR9%kmu~JoZwx#Mk=Mti3 zaeO5|O*6Bo@Vghg|=xMg(O)_bse zDWQ+ECA92iWW-*^k4?KUpi;q(d*H<0mPCleuZCn7>2C#Uh5Iz&Y~}qk^Z^BJd?p zCJGq0pPxo>3nj(o0;sv62Thub%clSPF0U~*krnBL^8_xamoT-FvYSZGZAt<7Gw zA>zeM#E9=E!FjTYdn8L&Db#6j)-5}IohRAwV+>1PQ}Sl96~%jqzb@qUC4-WUzl!-S zqs0+=L|z#g!C3+St`^%(pt^}$5ZM6vy*}Lu*OrJM+EBENI^y4WuHVtURG6n=QOO)N z1SzphZn1=Sc^I%r`|Q-@HAv!9utg$_*;)9v>ev#Lk%*;~15NNDlf`9@JRT)_fdyDj`ewaWP-TC|txC4jR4t`)HZ8L|e(WzdEA>8Fm zI9nypG%*9e6(!i_`j|f7nk4a+QWG1({;Df{kT|8>?0Gl;>nHxDk_ zT<$6BCTW|mu=dzeS^wS zWFDI75&#n)NK5}uF{dPx+?M|L5T__)0K^9XuN`Du{zK%amh8_Gf=>$mml-qr7{R9v zjgH}1#{zI`2;@dWtr6QFAhgrw`x^k4Hs29}w#E)P_(|U8-v2QYvyl3uMCwO9x=BU< zh#*rF-ZY#BuoT?RHw~xz!+i>xW;1g?MsT0#(JdR?sc#xCG*G+VG<5pI{A7>C+uQo% z1oK*tZWhc&?1mqCk%X2C;9(CAl5ZO1CVhEigEjV;;n3DrBpY<@tY;Wp+X)G4{#dSf zpv%VcCkV?!9^E9COWZW=0JW?A;DZk8%=MM@A=lNpxihzrO4a19D)!{I#PE;F4daHZ+-BGSn4OCmGN|x@mLIddb zOXkw6jgO92s&wAc)7NrCsB(&5e24 zTXs+Z4(&LliuO3qQOVnpy}8=nVMJ|IF`gbH*K$SYx}AWL({ZfX=S%H_w8+Ea2d0=>>Dpo~R#m$1^ z+B6BPidW%#tf~;5ZB;Q>M&1V(5LFX#t)L=YpEM!g=D|)bp8>nXr}S8UwmplHf4^YL*%l8JBrif)#?$ea>G3=6kt{+a z!_wd^d>47cW9Erj8H1}=hQCaY8E1JbX}z*wWQv$Eo*T%IV$0P3A})TAp-e`|4?%J? zRlZuCC2(`tF}+ebre&>JD(uFNa;g?(d!{wh)U-Fc!QNUJE%d;kje+|J0}3qbL^$81 zB|?Oh^6Go#Bbp=f5m8{3ifZQ59}*GGnHHE&CnA~>&-VpD4#+j3q&|&~5%he^F`DH0 zPR!sl0Fb5cH=Mzz}oXwn{fQO|^(UGWfh0BT0ze8GK%X z2A(H@7kU6-!~MSm_wzlvWrI7_+x<2JwaeT64u6>6;<0!e=C2XVw|jK6U{03O(h_)@ z$EecVEjLvYz1=9&?L1?C1B;RzHXUt@`uY|=cyiX)JOHz?{B^?eS3J5&EZ@&fQ+L#p zqCq;Oq;Q%P;l)%A(3}S6yIUI+Ji;ijkAg>8gDK7L${+GK?wu@W(NKb|&*e)^lDAOE1~H||frXG{tGXnFDU z3rYwtHFGhHq+`Pd}%2(ew*y7eTvZ*>6h-PRsml2OGv{ z7a=y2XK0FcDP9jJrtnFAW4iHnmPBX{JbjNVG-u2Yr|{{ozQol}5ieHAKG&=#RVo>38Rp(9fwq zH2s45L(nc+y4w=sha@4M>Hs4wPc6ZiJj2BGhga={2eE2-8i}i&@H2l>{@4QtHtK#v zsC&Spn?&9BxM`|R(Z%3pU_RpZWU&8Q1XQoh?4OQEurr|qx%2t%-SHCd0(JF( z6U+%AznYoBXyci!ECoJ0!yNzW7ffsc;y`)b(PqT*(U?V&@Z==8%(~|Ay6iiFZ1v-h z!U##m1IMi+jp@GfPXK&<7LeXo8OGE3edUwTHEaENQJu*_5sujX45rZGBv<^HIEpYI zx!e-uNZxifck)=%QeY)DnvFZxZ7&vc6XOGOqd0>GGqk-3tA*y7WS-lES+eom<-D$m z@Z6;-bV%U2r=aU(^4w2|=Lqu=o)hHA!gD;dEZKPO7rZW; zW3m}852nx|f#?2!u9L}gKO>$a%tv@mkRuDv@mSwZfi=Q&$umq`i6GFDN-w+XYn*wG z=7yQv%Gfk#U z7~V(sAr0q_K}0$8%OTvM3=PqP;%X6ZpGS&)sxY@~FV8Wm&>ceK#c(Lkt!`SV9ET}o zZM}>xn65c^%!boT3|Q-RF%+fEsN&!7tE zD%FdA3X?6(ZD0tb_>Db+Je84P`vadoxoc4|k;iZ0+{O`zr7WRW<2_g%C7FtAnIt__ z_31K=(Qvll02+fYP6=%g{W{99@od3?2`&(r(NEBi7Zew{n+sqG^}0ZNcTpD_I4t$G zQ-0tx>?V-}!Btwb{VH98VZV+NERn2V?0xY|+80+bN^E@}v=9RtOo-*=878j5{7OZ= zp4daA3yv)n^#-)@)M>YQV8KS-uLyas_UI;c+AFzfs!lsFylNk2%uV)z=+l@bn{oPC zUYE_R*^JXqG8ya%@|52e5w*xH`lIhhBd zN3hz-KM)AkMNuzM;4yru^vu=HNtbr zGfZ5aWGZjIVKy=y*`Bw2|RZPx=tp~{f>B!FdyMLL5?gu z$78)B1=a}9CC|_l(4P)_ogr*M_7pwNY$l#=0rFiv(-yN9QTCCP8BVCM^{!%XkzaB%X z$Gqil1aK`9?6j1>8~ClhjB|)&LcNIY_(Wio@|-rYF(G&ZuL$agslk=!YX%kKF`INg zx_NHWW6_j_;5-+Pm?5bh)RdJ%@VI>5!9r?Hb0Xi&Xe}NKlrNR_0uNqn`is>h%TRlx z{E;@w(G0Au)55~*JHS7h9?4BDn(jIkd+LeJkx$(m77JerM3Qa^vG8drh*Vs3Qk*=1 zEHeCXg$F;$BhMx#EMmBxKDmO-ERJTx)_MIgMm*Qg^pbN531`G1As`gZeBB<%cpVl4 zF4xHDo@9|~RwuDx36hiZ2~4Gsupo}_%-GNHfLw|d4S6v5Q>-nESb2oR%0_0X3}PjI zhVtnMXDctnKiH5WS#);!4*J)kD_Ddb<}ufoquqpw5I=9gK8-c1Y@6yObjNhfw$5#c zW$W)|xj?(92?WM{R zS(Z>0nOxC!9qu9fOBATtW|+TCJp|B&C#{>PS$au^CEm;|(X?y>1f|XvvBHt4mF9y! z)%Q5z?0f%#@A|eSkSuNRjbJ3v*}gjy2_R@%lA<9yfHL#(lBD%+8f%;KGmL;_=9HrG z6TEi2=_JI`1C~g(0g1Lb^+N;;MF@CP(Eb^jS`JeZXr7C&QS>$P@>b1*%CAUi6r_P9XmlSkTP>e#AUK%o%nJ77^;KaSE?de zeK#_KJKu$!)(-X)7mr5<8=Jj!I$C(13r<1PB$g!%*cSGm32`TSbd!ho^;jR%xH3eU={k?&u_05w#c+6&;M~QLPHl1Y^1C?`bNaZ91y;x-!hG>1Z){#rL16~CAlXZf<2mV5P;7SJHw!dPu zju4*7GfZ6TWGa*WD&h#Ce$vWhzXnY`_0TIlaAKqKuY}51cyyC`=;horRSz8);V&Ox z%uV(UD9orWQ>Gb(`(SmQ>Cm#(`-kZzY#H(d32L1 zWeGQZoT!wYjJe5HDczVQ+x9N-x+b!{uVpgWBY3Km-RL@*D&-(b<4%~5Y;Qr1X=6OrATKc#be1 z;W*a~h%i zevfWaaoopEQx(TwVyj9~wxqGa!q{TC$p(suU?CS3-fB@Si+Es$n-&BD(aSOwagoQZ z3W{NIfXm`sZnRoNUFtDWZKYZqH{lXAcuTc7I)qpnxW5X$yB8t;1K~0vRwfU;=H)Df zA*#X&KiNoS4A0DlP;-;~cW~FC_-0`Q>kEWk=ybGwGIC@HxdW}`m#`eV`%zhGsie#0 z%|wFXhliOT>_7)p<6<1CivT-s{a?9<0_gy@3bVrtKT`@F2hiv<7_BDaT^VgauZwFsvkiUeH z*|ZBr&bm}TtOQ5)^=&I0<-KS=uu$v;<2rn|E>z@w1z#|V&bD8Y?+ho9>}i_^H^~de z&AfJ-Le0NmbS8U}Xq!`?20Cg^6U58HX)}n^7CYbw?|6&Tl4r0KUvg7fw@Xy(h;Qnu z+jU;3Ohb7seqc^9)w}AV@=$l6U=duU^5GxJu^*fYHEIeT4W7MuaM9*+$IOEcdd|M` z%Yl~iQjA(FFBiYi6yld~ou|uoKqCdp$g7Y%N7+SOuOM<0|HWHn^`M$-FH2RXt3Ne$ zOwA*=c<{F^jSe9man^*IYuAJtt&DorgF4F8gF+X&eZ+2FbVXNio~f+`^&Z{<6RQQ) z=os^e5&tY0QI651T2QEu6kti`CF?fJYF(%k zJ2cd;x=<(MvnR|8&@`LV>1cxaIFD`?%<(#bc8%0DU-H1DtP3SKSQG0)p~|^)XI*Y^ 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
=NG?AWDWk~Kdc4ChY5n<8dZMR5t2OiE z3~NGFn6wcQ=u|&w{ehP1)X6%L;!LGXk!oegs8SjfYnm?LobDBo`H_nvDLQ1wWi0*_J9qR?uqeh~B;}7$w~-L@vrt%qEI&^ya6TrYT78rHOZt zR4;OE`E9Dlkz2CJdWZ9k@rHNR)YDD5o)gQ`u4A#p3~KD8TYcK!po!XSEkD6Zsy)hS z{p(mt>rOg6MbD4dqhT!_)KVSvOYHQm^mvxf9*>5ZDz~rn3z|MHHj=h8pg-QAylAm8 z2lF3qjl~}y9?yU5rhl~9v$Q(`J@ym&M~j_2i~p#nf3(;a>iLh`=^rijmqq-?i}a5c zyR3!(NYOu9?DuEzAHSx5G~TU&Qp1J{8aqw&2OJa1=)n+|nbXMKk-H-IN4^?)Eb^_$ zGm#%eo{RiC^5@7OBX33Ch>fEI24iCYGXT>7HGp>k>HzZrrvh35D*-D2=K(eX+5wjU zx&d8)U4Wf{J%HVSn*asC9e`T__W|w!JOp?E@IAnH0Y3%&81Mq%w}96GuL9ly{2MS4 zPRDq_(SRcWvjHanng9)eC4j|%wSZNCEr1IE5r7WJ0#bkv0Nw|<7LW&g9B?y$-5>UN z-hw0a2H;?5Qyfzikdon==@H**G>~DZaW)eUFWBoM*R{=gm>c)B) zyKEj^^#RUmB!D``x{v^LF&4*F6wn5MO2)#ZgE0-T;WUDEfR@4;KP{xR~H+ zz`^))G~gt_Y(PI%w%ApGlh+VHzhkYqS_sH2BiIhueJ;TjfXngldjTz*2$}(ZgV_H9 z_;r}z7l2RV&yNFm+Y#Prgnf5jT%I3~8p11J*vj3Vi`<`!JeG?*lZ!l;i~Knkc`L`2 zBgYjZ$CV<-6(Yx#A;%RV$CV(*6(GmTpJT<(vC`*Q;d89)Iac%>D|wC;JjcqNW5v#~ zQs-EqbF9ocR^%KjagG%@$I6>y#m%wO=2&5KtgJa!)Ep~mjukY=%9)EnG5c95bF7g4 ztc*EU#2hPOKPzC4m9L)_FULxkV};AHvgKIOa;#)IRCSs`+)4E?MKlmeB1 zjuoJv3%{QWzMl&{7ej&PvXP_Eklhuzos8gpWCR}~BltZsf1R8MtEew+2^i{w~55o4-z6vH8p3ip}5UxMK5n4X)Vy zeGFG@{yvKeWv3jntR?gWgSLNFST24n$m0Nw<&(;!G}E8vl71djs7O(&QD_y^#hfX#;y zoDaASa0g%{IXSV>fK`VRtO0x;@CCraBM4dmaXQy;ELZGnL4x}MZvy@fNY@f{0hZPiEC+BS zc@M7kG!R??_zvK^fb;@_Ea0d{g6V*DO$6rxt_17`Ol~Ha0$2uE0eA}VG+@+1f-!(R z;2OZAfNufLSwyfJa1-EW05{nG!WB2ze063E{kaUlP4_Nb~KLVhk`Q3>t zZq9GU6*uQ~Xw%<5m0$$gd2ZM@y{F%1iTFR9e`biZOiED4Zv%F z$CeX(190Y91j_(B06PJvoK0{V;6A{Y0WSew1~jcCSO|y#;(!OvA$SllZWX}w-dAiZUlS;@JGN4032%` z8x6P%a65ndrctuDFGLa6Dacd-?U5bj8;DNW8&21Lh|ckD{Qro1cW$WIQfFU2)?M#>=ed zjPZlwI~d{NyEN+3)s~Fg12cT{u#%hh)8kz!j<>$bFHLi$Ps5(648~b!l%{3=G9o{L zM)TTfIW&#e6!M4AlIXZGK0<@X2QM}6Ur+2}4N=-nYF_%v!Uh_iqD2lg&}9xx;KOqw z<7qIrFHNIa)@^%$IWopLN7c1!U;gCfG!l#fXF9Yc9;KzMoF#MPI2t<+@P>n0JlH@h zOX_O^bIiX3^>eMQiS{N5d&=fE;w9QEpZ5hjJoZU?)N3!W{1|iC`Jnu0^qOewY~|V& z>o6Q#G>lIJY8ajouSW z>{_a)5)wOED6u5fm`G5|@O%eqZ;%D&2yJhYu;unMdAa>WBsaLnzU5X+FApKP{as#e ze-+6M?znHc!J&7}?ydP4ZLKG)v3sLD<|gEOlZ35*hsLC>+(dfR%gS+w#J3#(STm&b z?<9G-%@)ZG-8bKIOVP^``gV%Y-nq8f3DD+P*eWg3m39o?UZr7c+;VxzohgzWy1Tw5 zm#3E{B?ptEF(#sMOlQ2v)s~ip2(iF2k6V0r-!<(aO zdy|AMw@c;awnHR03}N_|+qv|zgxvP3ewo^~S83RiyHQ?p*NY^F;T_+S>!g<@BqyOR z`^B5PPhM{Kh~$QWFW++eCk>qqA-O#%FSo}0jTHdx0j9 zB_wy??b*-eCH6leiD9DIx5QS{%R@q9|B#p1Ya)qZLf*H;o*60s(6M>)5}PBE7y>+eOYH5TBC!?n5?d;g7y@B@OYBB^c}VD(CNHszMG`}B zkZ+0Yp_hk*#4eMUSf5B@2#)eCu|H6F)sT?bP4W^eh$M!9G2ar~O)pDGY_Ggf>3J9r zZ`k%^za%fYdqt8%fZe{9+=2IGpOTl@6C#Nr5Ye~90`#(kt{r%Z{a#*TFNh?DFiqbQ zdvd5qY*d%DCp&^3_4H&B#OhmOd+6mMp<~C(OY9ht#1Po)TVj*wa(a14=vY!-VsVkg5K!-1VowbfiS3b>*lv-;u<*dQ z#EjFYg;Ay}ow$T3?IuwnE?jP7ASc>DVT!hwd#AiqZxcxsOE(50)irduvlDJ_9T@EF zw1l&t_53t@hZ1WM1Fvlm$=?Xor}%n(39a|oNJo6puy;q_$$>hYkWrV)(uu06IvmeX zN4uRwgS{H9vdGYW4tyR%#e1|PM!HT<)M3-2;w_7K>mggBkIGB*VSz+t;_xjAimje4 zk=nCq9YhNIbXW@&YWN@uI+vsdhhku%hrJ6)xYjvS`WN!le!6$mB6F-28Atjccye`u zGgI9-zLL-O_9pued9tsmB72k%vS)aZEk9|-vwROtNITaP=}|A|TA;d4`5x_q^1O1& z@y?*8c^Bwhd3Li@u{*{GJ1_0EHp*$JUEoc2sXW;;RFOS)ACYaWZSW?$Ri5lcs>mL< zZ^#B|TGpFvuRPg|DzeA#GqM6T{;)jRYgCba*FGcL>|L^-mnZvKRb&JEjO;>hvfq{` z`=~0i@7_mbn?-f@H}YhEsfuik53;A0H>{RtIMZx;g3Yx;d;BkXy05FEJ98h>6&R`M zNoluf3O%aCZ92gR-4=<`71Y|GJk^s_Q9aQIRS6#|xJXoM&ypv*OcmK#KFG?{S|Tf= ztI5;7SQXvbKIqDot)R|cDo=KYDzbC-8QDhfw)O^jve&61J9nRvZSp32uRPhiRgpc( z2U)pVE9?$DE>HJ6s_4%1L07KU3OwZB$&-Cn71{Yd$W|Dj;9Xh0HTQqz*}bWXUC;-+ zx#fODtXDAjazwYZk8~J4s>DaCRmCmiU2YBX+-g;Et5d~I_vW@rp4-`~xYeuTw#}QH zF3+t^6}JXe+|u6M-Y3uPGF99b_~16b+?J%n!C0@L%H1qa??zShnibKDCcAqC-szX+ z>3vZZy+uCg)m1CKU{AZZem*77@Cj86TYNBFSk92nSxD2=Ew2&RceF>miM}LH^m$c8 zTYV5cshns`OLcjZJ7~LftNyksawq#BS7FAJ)(QfZjjLOsOP(^dG z51JJ^fu+F|K|06Do9qYW$-aN@$Qmctm|H_G^TBsrd9l)wH$fca669?ugB|f?F9n^L z(I*gwb)c2E5I!L8xLzT}E|nAoL(N_C z6k`f0ZdXZBFqyksp5hgQmEt1r*7H_*inl1Fm{D1ZE#4F#kf->y!AeokN&T@r#UCo9 znDtSL6-F8iH?Kk9=e;V=@s&Z#QQ+u}PfPnZW9d;<{!Ne4auhf?Gvzr36mslU%2D9q zoF>olWQ81eDCH<{an6_LxJe;LKV8e}Hb>y&Y?tSlP{?to(sC3yIsYNgF{hB@6G}M> zyqr7bIo>vCISSmIhvhkbT_ML`DJ@5VpYt<$jz3Yz@i!_tE)e)Rf0O6<7lj<3RmxG| z=S<2-`#BTnQB{7J0r3EQ)bncQT`DukD$EYPK@N~W@Px29kBo9_g zQsC-`dx|E^u0OH$zEb;^?rDCwY>8 zP)Ks8T9N`^_TWBg4`?(!s>%cUpdXSI=4#;_WRlzTgxp;1yXDy)uaNCye%MxTO9Y<# zDe@#+6q3AJElGjrzFD5+hQUix;JGK|NyZhD{F>U56nM4$@+7Ysv?Lb^{JY!bNq$Np z$p@5{G~B%c|)BnAH6U*$>uSs}@X)Rv^czdK~7wCgjD z9#!S~C?+ZJ?@p8_S)-8T_tci8z~ebxp5&33P@d#@3Q0b#mZZSrNz0S$ zR!H)PYDo$_o~z|a?omkc8Kop!1Rl?4PNb*RvB`NTDZjdK=-GL@q;e;e>KUjgwbFVzhyA`sW<)6s&+<)$EH^1;DR6s^*d^`u97d0-a(h&>6!<+2@+@l= zvOHgLSqdDVRq`y)9>gpKo{uiivP~h&3l*28!1Z~bJj=@lF-w8(bF)0l8x^v=NNrh) zHpBn2Jj*W*VwM8m=P7xXPbg#=Q(Tq;-{&QHmd`6>xy=vD<<(YJw5Rkio%tEn;uH)k zzrNz2_e%Q;Z!6^f)gtbC{*X*cOQbuJsV+TLSerj2nrM$_!+I#5>?~|8#8?-OXLfI&D%aueI7<9k2ndAnSl&7%*(htJAVTR;{^ZJv+53jB&m2R)I?Y7+hPNmlDY*jpFukF^4+}Ry2S^a*`tq%HVo|-%4 zIv%PX9*%BZokPQ zuZAbDO9m=sbc^#21)sRZwu#w$-v8h(jb2@;f4f(;>d%0)_2=&F)<1+l--16M!Jm)a z*&WpXNc{{7eX9P+`l0%A{l)qxE*<9N9RqKy&7Re*N2&P3TXok{e99F_jE$jVo>K2@ zDVFjw>$x?T^^_iaW5B$=r}XPg>GqfhE?d-DrBhR^wzASHcI-qUf9>XqQs^-UuU)ID z^gF2J70z1aLfh+GZJQ~UZFhQ(+uo$tRNu;l^=pcjRkdUyrL1?EjW%sw`^u_vt=-&F zR@Mhy*1P9=%u$N$o{L&;G6)&Fhek*!Rut;Rpxf>A`Y7YJQ8AwMnO$$AuBPI)x=luE zAgIO|*4!prX!-w5ql)l3wnK;T?-MZzuUXOr`y_udGL<@?u;+6AViB*0|o0STQ2YaqqbfmwB#EJ;tC2)dYX< z36l%~Id}y@7ruWUzhoDdB3(E(e5%^)*mo;$3_AU&{oDADhaY=PTUAz8e1$HxH?2*s zqAM$FicrTvRdln;Hr=+TY}FYlHdAhUuu14U)VS3pg-6#N*Rz`)@Wf`lz6A>qPD4r! z<@krBWv9I}tEitTooa(D_C5Sm6ZQg(3;2pEVezbL)Aj1GVla_|9xCs&S_3jE-1ymb z3-d@*sj~hS^J&{-?%E&^tp&C;*X^EFJTiS&KOic!uolY0z;-)r%$14_<6313+oq;A z(Nky8WpIg1J)Z_pG*uS)4Pm-s=oD>xx&06;0s9 zCf<_;?KC@^F6shHnl$Bes=FP}bE|F>9su#rZTA^GiZ161^?_OUnCJ95-7e@QqGH%% zqP98kFeEVgzB%`l8#mEahbgsAPg?&_SXP&obdsWVbeQI&V9dzalOz>GhJm4b%P4%r z&+Zu`j5y}IK{q<~7;HYpuPV7_Q*o@mHNwEoJ%}Zrc3_9jDnv*9cnwCLLw-9hj9k=JMdNO7zSRO zixKP&pu)C76_8N~Y7E#!f+F=r7zR$(0KDVO;lmtQ5XsSrpL06|p9v;~*ec6P;vL52 zfWM1&eRU}!q?5IJf_!2E;5BuG&VeDmmxg{qRa(MC1%&&Y5)v3~9b+CfIf4aXf6MCa zC@oSvsP`yUq{_U1!Y2AwFklHpCt{`~7obmruBd%{)O-aQ5ei`e6+!PLZc5V?6^E#i zRqnY~WW4z>`eu=+pgzoT51}4WJCtt@SieK6c^Teu2@8nL9p!ZXa_I~=O+@1;n}T^5 z8smGK!IZvH{J>)VTg-o>>yd-Zf4*R;!$a_9K!aM=pt$34Ftg!zThMF z1w-=#)`!FR%P>D*3zn}Ro$8-UyYu||B;P!&@2|(PJ-^It&uxgo!tLh^od@gohogbf zji;o~>`_wn&|{A+Ru6%z99?`YRu4SbvRFNcm0P%a2yHAhC)C2<8L_e77H2^&&8;$T z?H;!B`*AGq?{Ld|47yET-(tzn!ws~oUM%_FuS@<=gP^DJX3GzX*>ZN_FZ&w>e#7nRx%L6yGWrlz`Z3ng}X3=fB7J^_rW)|Jr zp@=JDablmBZ?uUWGi)e4{Dy*!hyORv0?Cbs4@X$?RN#E-v|9~ERL;Ab^~7a{;Bta? zToV^=i8xf^dSpX0f&TluCe!v<>)$#|puR+%>TB})h@sd#-V(dW(GAjs>vj09>=Jfj zKPm~NF~qnX8y*%T6j`8$d&bAG0nV_WjeUB#cQ3b;X-63Wy3OdDjhA44(N|I9+M2Su zdJg~R#k_N|JHP7P+gwuc-x?~~a-DvCP0>{KCGpH^x|{7a?6FX|Upx}{fHkGw?{~em zbLY0UwpP1M$kU+JT!nC*lfRrp&F89@&HQWaLOYq?F4wn{IrV(q_(5#zy|) zt8aX6bMR)#wEOza8*R0E?_#l9d9Aa4J$a*iLEpBjm5uGhHp0fQC5@}syRPe9Ew;5m z?UvRzKX?6nW#jf%Hf!gSml}g|C3&OS-nx24cg`1IeZ#z0({3bgcMZoW_3mP$$-MMh zGOLx=%bRAemQP>YYM1iH1vmHVt=yn9$h5Cka?QjmH?rII%Ws}{bf=YNmst5i!oE_= zb*~n?FFVPrEwgQ^z1F46c`NA|7qV5u(46&Gdbe7cE&J--H!?Si$?ffnB{fsHP;YLu z-q?8~ts9BLD^A%oZoYcMT7Sj8Zn(KEcJs|fPrG;d-p#w$UVin0{pzbp{njhjvbNb< z&vz@Id-at|opqMYUVig>-@CV+I)CX}YP;VqtiSwn_o`dXrE|9$rR;^B+NEB`%5Qf2 zFBf||>MPCb8yE7|&g<6oZl`2dH{UE?yLfBkLh1Uz)vwojZ`{20T4(dFn@V4+T^-!B zx9>XV@1?Gq=dt>^6AYd0DfD_7h?v$5TF zZeLCJ+4j|Jv6m?I)*Fu6>%7*xTDsjR7uR35F1}&Cc0Ij$?Mkkl)!(sGn2SB`%nu#4FbW8%ByRVzEG#(qwKy(Zb z!we8b8$X1g+Cs?|O7`ARGMdyHF9=!w82;hY*%8~~yHSw|YxvQriYQkjGfGG&pz$4O zVvZls_;jdJpMZu5szPsyL(#O|#)naiN#GQp$}91wa!VquhEMXzad-Fx&5nSy@u_il zcv#GhoIM{QfQ04Y+1}c1T*oJk6Zp#;et2R*K;lr0 z`XGu$-M@`5z(gR{)@NNsOCdJUIEaGp8s1|-NX>vvxIKk73;~?LK63}~F4{?@ z?XIzXJh8baz!`1qCkOuK#ByT~l`FT`Zz*<<(YCLpwAmK+=UM=C(KaOQpmr_Lak?Zn zC@!&`)$7=3J*z|?460|&^4(0g4U8Fmi@Nx}oZF>MVQ=8#0pK!#rxC7A?5c*p3m^#K z7R{y$Ikpw-Z(=W(++e1G`Ud z`Drc!6!w|4&CXFOgbI*-=R1~?Beb~W9K*K0+XfDf&o&sDR*S*2?-PQ;s=-N{v{Q?k zf(R6IR+Tb90nH|$2onaCfHm;ocErj7Sd7ASEQTMb2m`;zqrxcF{iu}BV2RYIkigHF z1PRuN-KECoQ4RvHZgl(&rbwt^A>0e$CNS1R6YgLxA}Nf!rvIe0{ZTtT{NX&KB{;xc zY}+DeDp?*2(ISp*ooFmLT#S&}?weS}Ll4O+?fro4!W^IiM?&-@el}Rqzo%#lc)b zmULL!veFs7W~WsvmC9IFl77ypI><|^ppz)CfyP=&t)^5Xg;+!_W9U`gHnOP3w31bo zX%6U4n_5QN_V-VR1G)L?9Jv`D+io@2ysky(EspZo5S$7)j8I@adS`eP!II4Z1#^Z+ z9E|&**$4ceTv7yE>ir7NU(iVk^0&W&w){oosfY*$sG{MAFSL1Juif#;e`$9Fz$B3T zsqcgC{NkMM&{QlH?%P8e8oT&T#@se8Ar$omtishbWm#KQm(MCM5dfApC24W4txo&IC0jP!T%v5?tDQYh68+UP|a|^;4-_Hd}<6=L@A&+0aYn99Q!)SM#D?%I2Wv z=V!>DZd@ijOje=18 z9Nren$zmy;%R%wWg|wQ3;^%Tn`Z;q7l3K9E<`BL`dlt8lghO&4&Gb5BZ*Am7nO?2WZfgANS5E> z#NAnX%eSrzwNjLYS}oM-fvHt6>3x09q}TWv6lnZ8`s-)$*E@}$qaS~s{`v*{wP$ip zgcD{dGqbqH4=rWsM#hXfen87=ZT!|=fA z(oJSLtQQH5L>?eCvZ`F*fZH}sl{D=^lUGP9eu>aVq~UA?a2-L;_n6IqY7YWGrO>pm z2jL8&l;}g~rn!@lG&|Tqbnnpw$*Tuwy))?3flXf7-oQudP9z=ypuem~^nHX>ad4uA ztxY=I;IMav5+N3j6<2Taw-GF* zGes?&F5(b`z=(t}g?6W%Xp18&2)Ftnk-eI@6f#ok;b9(2%!FF_2Yke4ACRU<;=e&T zu7wHwFhL6!!?Fo4dg8DI+Ce;ws~tBcX~*zm!GdgU3D5;P=9l0>l(k^R`q8OH!a@Ik zF$P_(S=U2CM%Sz#z=2dtPiHdebSk4~l4&ztOEVd~NmtVbeov-!ywx%({GH4g86XJo zjh!|#Mmm*tGGp&~u*X!jlukAKH5eH)qvHEix|YFHo#E?bx`q&umPG6Ye<$&CihjpC z2Ma(uZGjRk?W9wwB)-+sNowEH(Q1r33^Qd|$xKT04E;*uPcp6HYu-n+Lhnq_m!cl0 z5rE2MHN=nbT%TB8L+`0Z9klQ-QZ;aaw~)5yeGR_p_!j)bS73nX85mD}sp4yGey^-* zCJhcE5C*EjKi(IH(Mxe|WS_98@}7!!YVbQ~$M}Gz8jUg^Y19OM zrx~Y`@!x3db(BEJOY|S(L8Xb4;2FM@&;8cH%NkM1du;NajhBEd;p;5#F{CJiQmCKk zq|wce)L%vWS&TouGe_PamWQVpFU}EPR!|d_23M(la2fUESry|?vSg-hUQ1ZoLa7wq zp*I=b@F~k0M$*y{rc7HJ0vB2e@~oRlm4cai3jb=hW2q_+8X|B=Pbqe2sc96kvS}l0 zv!sJSBuY@Bq^2Pls@Zs-Od+y}=e7p92KT^k1VSS;=&Gb5BM_TRS5p}q!PZQb;j6Tx zIyEP$nc1Yt(zb3mYBpm#kYv+jwo$_`SyEFpg@Cf1);0WUI4q^wj)vH9735AH3DB3J zK{E^rLK|5loo1%4>uIJMI?~6enPfFTi5P*U`1LbC>T1z7= zuBNh<>KM9aWmqa%%{Wy^fR6UlHD;k#7VM#&wIFtuk#U@?;bal=%34*;fMqnQjtT-H z#)b`h>gY8Kv2NYYXjvm=YIe#@o2=%flIRkm;^3>HsVT6aYHJ9UGp%aMP|IRAASy0oJIJ|ueD|oAlj3LoIDG!T! zA3QGB&xFw*+sdQWv{*TNQ`bzl9!Blqa_i%BcoE$q+z7iry4*@)xkdYK%h-vbeZgh9 zRY=dUUvtw>Ifm!7MMOpMg0}5E{}tYd9X|0+e0FQ6%c!bOZ*vvU`&FL2WHp7vC9UG+ z<+HpNlq9&_I&H~%C@jCn^Sz&4xHVD&Wk7I{p==e14MZGmYE$e!`7Lm2M@l03-2h2- zY*yiC2IhZ&z^d1;)Nn?FQKCBeLD0ZkvNx0H9w&Oxt^ml@$Dxn`5*p#3iU%aWtTU_$ zbvcNfQUQwFA`c9*2u&{LCl;)<2iRWiO)TT0 ?=&7%%CA%}g7TeCuGS&c_i?mTZ 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 O#O~`=@~H>a)&CDycaK8= literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/en/.doctrees/pseudonyms.doctree b/refs/pull/212/merge/en/.doctrees/pseudonyms.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b3b239c798650add2420c82750b8f99853fd1d98 GIT binary patch literal 30353 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 W?{M)yYAw-s0{(e=`qB=L7XKeF>I0bo literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/en/.doctrees/relying-party-solution.doctree b/refs/pull/212/merge/en/.doctrees/relying-party-solution.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4a1e4900c360e3e2fa4bd07aa71177622be34061 GIT binary patch literal 236862 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 literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/en/.doctrees/revocation-lists.doctree b/refs/pull/212/merge/en/.doctrees/revocation-lists.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d16212f9f778f891f8a1cad0e87aace5b203508d GIT binary patch literal 30425 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 literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/en/.doctrees/ssi-introduction.doctree b/refs/pull/212/merge/en/.doctrees/ssi-introduction.doctree new file mode 100644 index 0000000000000000000000000000000000000000..93bd82a68305c1a4a77857ca934b98dfb0869b84 GIT binary patch literal 38570 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 XU2Vf3Em9;p2cxx5)7B)|f${$V-Hg_~ literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/en/.doctrees/standards.doctree b/refs/pull/212/merge/en/.doctrees/standards.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9e9c3a480bb288749f7d8413b984304a2c0d04a5 GIT binary patch literal 49646 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%0A}|m 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 literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/en/.doctrees/wallet-attestation.doctree b/refs/pull/212/merge/en/.doctrees/wallet-attestation.doctree new file mode 100644 index 0000000000000000000000000000000000000000..230480b3bb278e498645895ac3b071a11feee343 GIT binary patch literal 92731 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ⅅTM~32%a5zxc9)H|Bx*u&7 zy6khs4SHIy=+-e(pY@LJXIh2s8=K&6p9k*N(b_M2NA(X{h3ex?pz0y4@b}i!+V6Tt z_B*XY_K7Bt^&-YVwjR1?U+X!FYD3eOL{U#Rfvz{+*3sFk-jRJntB}2ZY{+)G``R~q zN4CFJ$Ub#!$acFUyW$<$#a1DEqX}faX>Hx+i}J=` z{;*ZJb+igMlz?(u^8LPd+`iW;+}Jk+8w}+gWpdjcxATv94tUO?X-fj0V5|66$Cf}mqT&T0%rI+N;-;)Zt=S6hW*cM~Yy ztVYo|{^x323f|GX(<=1BO`zu>qnv|TcLx5bcMN}|RT%a(fuR!v)l7D$&LryRy`%Rt ztwOK23G^HosLQ8+C+5z;FL=lB^R2?LuL%r$sx{Dhj#b`^Dej1V-8-Ux)G9>#n?UqN zHKLl7OSvQW-@GIDUs{FSttOCj*qEndKK9~t=EQF4C I6{CUwA5@P@hyVZp literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/en/.doctrees/wallet-solution.doctree b/refs/pull/212/merge/en/.doctrees/wallet-solution.doctree new file mode 100644 index 0000000000000000000000000000000000000000..79ed225ae1afb986ddb4716f8fdfe41610145aff GIT binary patch literal 75609 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 literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/en/_images/Eo_circle_green_checkmark.svg b/refs/pull/212/merge/en/_images/Eo_circle_green_checkmark.svg new file mode 100644 index 000000000..19e0bd7f0 --- /dev/null +++ b/refs/pull/212/merge/en/_images/Eo_circle_green_checkmark.svg @@ -0,0 +1,2 @@ + diff --git a/refs/pull/212/merge/en/_images/Eo_circle_red_letter-x.svg b/refs/pull/212/merge/en/_images/Eo_circle_red_letter-x.svg new file mode 100644 index 000000000..4c3c8e785 --- /dev/null +++ b/refs/pull/212/merge/en/_images/Eo_circle_red_letter-x.svg @@ -0,0 +1 @@ + diff --git a/refs/pull/212/merge/en/_images/High-Level-Flow-ITWallet-PID-Issuance.svg b/refs/pull/212/merge/en/_images/High-Level-Flow-ITWallet-PID-Issuance.svg new file mode 100644 index 000000000..112223018 --- /dev/null +++ b/refs/pull/212/merge/en/_images/High-Level-Flow-ITWallet-PID-Issuance.svg @@ -0,0 +1,3 @@ + + +
PID Provider
PID Provider
Wallet Solution
Wallet Solution
Wallet Instance
Wallet Instance
VCI Component (OIDC4VCI)
VCI Component (OIDC4VCI...
Issues PID
Issues PID
National eID Component
 (e.g. OIDC, SAML)
National eID Component...
Wallet Provider
Wallet Provider
Attestation Service
Attestation Service
Issues
Wallet Verifiable Attestation
Issues...
Authenticates the User
Authenticates the User
Requests PID
Requests PID
Develop and Maintains
Develop and Maintains
Federation API Services
Federation API Services
Federation API Services
Federation API Serv...
National IdP
National IdP
0
0
3
3
4
4
5
5
Trust Anchor - Accreditation Body
Trust Anchor - Accreditation Body
Federation API Services
Federation API Services
Requests for PID Provider identifier
Requests for PID Provider identifier
1
1
2
2
Requests for PID Provider Metadata
Requests for PID Provider Metadata
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/refs/pull/212/merge/en/_images/High-Level-Flow-ITWallet-Presentation-ISO.svg b/refs/pull/212/merge/en/_images/High-Level-Flow-ITWallet-Presentation-ISO.svg new file mode 100644 index 000000000..6bcf4030f --- /dev/null +++ b/refs/pull/212/merge/en/_images/High-Level-Flow-ITWallet-Presentation-ISO.svg @@ -0,0 +1 @@ +User's SmartphoneVerifier's SmartphoneUserUserWallet InstanceWallet InstanceVerifier AppVerifier App1Open the Wallet Instance to present an mDoc CredentialDevice Engagement subphase -over QR-2Generate new ephemeral key pair3Show the QR Code for Device Engagement4Scan the QR Code5Generate newephemeral key pair6Compute session keySession establishment and Communication subphase -over BLE secure channel-7mDoc Request + public key of the Verifier App(Session establishment)8Compute session key9Prompt for consent to share the requested information10Grant consent11Retrieve mDoc from local storage12mDoc Response13Verify Response signatureand check mDoc validity \ No newline at end of file diff --git a/refs/pull/212/merge/en/_images/High-Level-Flow-ITWallet-QEAA-Issuance.svg b/refs/pull/212/merge/en/_images/High-Level-Flow-ITWallet-QEAA-Issuance.svg new file mode 100644 index 000000000..7a55b4792 --- /dev/null +++ b/refs/pull/212/merge/en/_images/High-Level-Flow-ITWallet-QEAA-Issuance.svg @@ -0,0 +1,3 @@ + + +
(Q)EAA Provider
(Q)EAA Provider
Wallet Solution
Wallet Solution
Wallet Instance
Wallet Instance
VCI Component (OpenID4VCI)
VCI Component (OpenID4V...
Issues (Q)EAA
Issues (Q)EAA
Requests (Q)EAA
Requests (Q)EAA
Federation API Services
Federation API Services
Trust Anchor - Accreditation Body
Trust Anchor - Accreditation Body
Federation API Services
Federation API Services
Requests for Issuer identifier
Requests for Issuer identifier
1
1
2
2
Register
Register
User Authentication with PID
User Authentication with PID
Requests for Issuer Metadata
Requests for Issuer Metadata
RP Component (OpenID4VP)
RP Component (OpenID4VP...
5
5
3
3
4
4
Text is not SVG - cannot display
\ No newline at end of file diff --git a/refs/pull/212/merge/en/_images/Low-Level-Flow-ITWallet-PID-QEAA-Issuance.svg b/refs/pull/212/merge/en/_images/Low-Level-Flow-ITWallet-PID-QEAA-Issuance.svg new file mode 100644 index 000000000..d4bacd980 --- /dev/null +++ b/refs/pull/212/merge/en/_images/Low-Level-Flow-ITWallet-PID-QEAA-Issuance.svg @@ -0,0 +1,2 @@ + +User's smartphoneUserUserBrowserBrowserWallet InstanceWallet InstancePID ProviderPID Provider1obtain your PID2yesobtain the list of the Trusted PID Providers3confirm the selection of PID Provider4okCheck PID Provider is part of the Federation and obtain its metadata5create PKCE code verifier and WIA-PoP6PAR Request (response_type,client_id,code_challenge,code_challenge_method,request,client_assertion_type,client_assertion=WIA~WIA-PoP)Check Wallet Provider is part of the FederationCheck signature of the Wallet Attestation and its validity7PAR Response (request_uri, expires_in)8Authorization Request (client_id, request_uri)9Authorization Request (client_id, request_uri)user authentication with eIDAS High and consent10Authorization Response (code, state, iss)11Authorization Response (code, state, iss)12generate DPoP key13generate DPoP proof and WIA-PoP for PID Provider token endpoint14Token Request with DPoP proof (client_id,grant_type,code,code_verifier,client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation,client_assertion=WIA~WIA-PoP,redirect_uri)15Token Response (access_token, token_type, expires_in, c_nonce, c_nonce_expires_in)16create proof of possession (c_nonce)17create DPoP proof for PID Provider credential endpoint18Credential Request with DPoP access_token and DPoP proof (credential_definition, format, proof)Register all the credential-relatedinformation for verification/revocation19Credential Response (format, credential, c_nonce, c_nonce_expires_in)20PID validity and status check21store credential \ No newline at end of file diff --git a/refs/pull/212/merge/en/_images/cross_device_auth_seq_diagram.svg b/refs/pull/212/merge/en/_images/cross_device_auth_seq_diagram.svg new file mode 100644 index 000000000..f495b1d91 --- /dev/null +++ b/refs/pull/212/merge/en/_images/cross_device_auth_seq_diagram.svg @@ -0,0 +1 @@ +User's DevicesUserUserWallet InstanceWallet Instanceuser-agentuser-agentRelying PartyRelying Party1Web Service navigation2Request Protected ResourceUser Authentication (Presentation Phase)3Create astatevaluebound to user-agent cookie4Create request_uri resource5QRCode OR HTTP Redirect (302) with client_id, request_uri, stateCross Device only6Show the QRCode page7Open the Wallet Instance app, local authentication8Scan QR Code9Extractclient_idrequest_uriand statefrom the QR Code10evaluates trust with the client_id11requests the signed request object from the request_uri endpoint12signed request objectalt[if request_uri_method is set with POST]13provides Wallet metadata to the request_uri endpoint14evaluates the Wallet tecnical capabilities15updated signed request object16evaluates Relying Party Metadata and policies17Verify signature of the signed Request Object18Validate Requested VP(s)19Request for consent20Confirmed21POST Authorization Responsewith vp_token22Evaluate the Verifiable Presentation token23Validate the Wallet Attestation.Attest the Wallet Provideris part of the Federationand the Wallet Instance is not revoked.24Attest Credential Issuer Trustand Validate JWT Signature25Process the credentialProcess the credential:Check Holder Key Binding and Proof of Possession:- using the public key bound in\n the Credential to verify the VP token. Then Extract the disclosed attributes: \n Check if all the required data are available26Update the User session (cookie updated)27HTTP/1.1 200 OK{"redirect_uri": https url with response_code }Same Device only28Use the redirect_uriCross Device only29QRCode JS: Check authentication state (HTTP request with cookie)30Authentication state given with HTTP codes, untill expired or successful \ No newline at end of file diff --git a/refs/pull/212/merge/en/_images/dynamic_view_sequence_wallet_instance_attestation.svg b/refs/pull/212/merge/en/_images/dynamic_view_sequence_wallet_instance_attestation.svg new file mode 100644 index 000000000..4ab9a713d --- /dev/null +++ b/refs/pull/212/merge/en/_images/dynamic_view_sequence_wallet_instance_attestation.svg @@ -0,0 +1 @@ +UserWallet InstanceWallet ProviderApp attestation serviceUserWallet InstanceWallet ProviderApp attestation service1Initialize Wallet Instanceor request/present credentials2Get Wallet Provider metadata3Metadata containing credential types, key requirements, endpoints4Validate Wallet Provider trust5Generate key pairs6Request nonce7nonce8Create Wallet Instance Attestation Request JWT9Get attestation (Wallet Instance Attestation Request)10Validate Wallet Instance genuineness (nonce)11Integrity check result12Validate signature13Generate and sign Wallet Instance Attestation14Wallet Instance Attestation15Validate Wallet Instance Attestation16Wallet Instance initializedready to obtain new credentials \ No newline at end of file diff --git a/refs/pull/212/merge/en/_images/static_view_wallet_instance_attestation.svg b/refs/pull/212/merge/en/_images/static_view_wallet_instance_attestation.svg new file mode 100644 index 000000000..aab862f78 --- /dev/null +++ b/refs/pull/212/merge/en/_images/static_view_wallet_instance_attestation.svg @@ -0,0 +1 @@ +UserWallet providerWallet solutionWallet instanceWallet backendIs part ofProvides wallet assertionscontrol / activateIs an instance ofProvide \ No newline at end of file diff --git a/refs/pull/212/merge/en/_images/trust-roles.svg b/refs/pull/212/merge/en/_images/trust-roles.svg new file mode 100644 index 000000000..a1e8dd823 --- /dev/null +++ b/refs/pull/212/merge/en/_images/trust-roles.svg @@ -0,0 +1,426 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/refs/pull/212/merge/en/_images/verifier_qr_code.svg b/refs/pull/212/merge/en/_images/verifier_qr_code.svg new file mode 100644 index 000000000..437ad39ca --- /dev/null +++ b/refs/pull/212/merge/en/_images/verifier_qr_code.svg @@ -0,0 +1,2 @@ + + diff --git a/refs/pull/212/merge/en/_sources/algorithms.rst.txt b/refs/pull/212/merge/en/_sources/algorithms.rst.txt new file mode 100644 index 000000000..7fae0ee7f --- /dev/null +++ b/refs/pull/212/merge/en/_sources/algorithms.rst.txt @@ -0,0 +1,98 @@ +.. include:: ../common/common_definitions.rst + +.. _supported_algs: + +Cryptographic algorithms +++++++++++++++++++++++++ + +The following algorithms MUST be supported: + +.. list-table:: + :widths: 20 20 20 + :header-rows: 1 + + * - **Algorithm** + - **Operations** + - **References** + * - **RS256** + - Signature + - :rfc:`7518`. + * - **RS512** + - Signature + - :rfc:`7518`. + * - **RSA-OAEP** + - Key Encryption + - :rfc:`7518`. + * - **RSA-OAEP-256** + - Key Encryption + - :rfc:`7516`. + * - **A128CBC-HS256** + - Content Encryption + - :rfc:`7516`. + * - **A256CBC-HS512** + - Content Encryption + - :rfc:`7516`. + +The following algorithms are RECOMMENDED to be supported: + +.. list-table:: + :widths: 20 20 20 + :header-rows: 1 + + * - **Algorithm** + - **Operations** + - **References** + * - **ES256** + - Signature + - :rfc:`7518`. + * - **ES512** + - Signature + - :rfc:`7518`. + * - **PS256** + - Signature + - :rfc:`7518`. + * - **PS512** + - Signature + - :rfc:`7518`. + * - **ECDH-ES** + - Key Encryption + - :rfc:`7518`. + * - **ECDH-ES+A128KW** + - Key Encryption + - :rfc:`7518`. + * - **ECDH-ES+A256KW** + - Key Encryption + - :rfc:`7518`. + +The following algorithms MUST NOT be supported: + +.. list-table:: + :widths: 20 20 20 + :header-rows: 1 + + * - **Algorithm** + - **Operations** + - **References** + * - **none** + - Signature + - :rfc:`7518`. + * - **RSA_1_5** + - Key Encryption + - :rfc:`7516`. + * - **HS256** + - Signature + - :rfc:`7518`. + * - **HS384** + - Signature + - :rfc:`7518`. + * - **HS512** + - Signature + - :rfc:`7518`. + +.. warning:: + + The length of the RSA keys MUST be equal to or greater than 2048 bits. + A length of 4096 bits is RECOMMENDED. + + + diff --git a/refs/pull/212/merge/en/_sources/backup-restore.rst.txt b/refs/pull/212/merge/en/_sources/backup-restore.rst.txt new file mode 100644 index 000000000..186042348 --- /dev/null +++ b/refs/pull/212/merge/en/_sources/backup-restore.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _backup-restore.rst: + +backup-restore.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/refs/pull/212/merge/en/_sources/contribute.rst.txt b/refs/pull/212/merge/en/_sources/contribute.rst.txt new file mode 100644 index 000000000..60fc0b3d0 --- /dev/null +++ b/refs/pull/212/merge/en/_sources/contribute.rst.txt @@ -0,0 +1,61 @@ +.. include:: ../common/common_definitions.rst + +.. _contribute.rst: + +How to contribute ++++++++++++++++++++++++++++ + +The IT Wallet project, including this document, follows an **open development process**. This approach ensures the development process is accessible to all, inviting all interested parties to participate. + +Consequently, stakeholders, national and international community members are not only encouraged but also heartily welcomed to contribute to the refinement of these technical rules. + +Below are several methods available for contributing to this project: + +- **GitHub issues**. By opening an issue, you can seek clarification, propose enhancements, or report editorial typos. If you are working on an issue, we encourage you to open a draft pull request and link it. +- **Pull requests**. Pull requests represent active contributions to the project, typically, but not always following issue-based discussions. Once a pull request is initiated, it facilitates discussion and review of the proposed changes before they are merged into the main branch (`versione-corrente`). +- **Developers Italia Slack channel**. Slack is a messaging application designed for businesses, connecting people to the information they need. *Developers Italia* is an open community based on contributions and participation from public administrations, developers, technicians, students, and citizens. *Developers Italia* has initiated a Slack channel that [everyone can join for free](https://slack.developers.italia.it/), where you can learn about all their activities and partake in discussions. + + +Acknowledgements +---------------- + +We would like to thank the following individuals for their comments, +concerns, ideas, contributions, some of which substantial, to this +implementation profile and to the initial set of implementations. + +- Alen Horvat +- Amir Sharif +- Andrea Prosseda +- Emanuele De Cupis +- Emiliano Vernini +- Francesco Grauso +- Francesco Marino +- Francesco Ventola +- Giada Sciarretta +- Giuseppe De Marco +- Klaas Wierenga +- Kristina Yasuda +- Leif Johansson +- Lorenzo Cerini +- Marta Sciunnach +- Michele Silletti +- Nicola Saitto +- Niels van Dijk +- Paul Bastien +- Pasquale De Rose +- Peter Altmann +- Riccardo Iaconelli +- Roland Hedberg +- Salvatore Laiso +- Salvatore Manfredi +- Stefano Alifuoco +- Takahiko Kawasaki +- Torsten Lodderstedt +- Vladimir Duzhinov + + +If anyone has been forgotten, please accept our apologies with the +request to propose the modification of this page via a [Pull Request](https://github.com/italia/eudi-wallet-it-docs) +with a brief description of the contribution offered, during which +event or channel, and during which period. We will then have the opportunity +to apologize again and make amends as soon as possible, including you in the list. diff --git a/refs/pull/212/merge/en/_sources/defined-terms.rst.txt b/refs/pull/212/merge/en/_sources/defined-terms.rst.txt new file mode 100644 index 000000000..a6004323c --- /dev/null +++ b/refs/pull/212/merge/en/_sources/defined-terms.rst.txt @@ -0,0 +1,83 @@ +.. include:: ../common/common_definitions.rst + +.. _defined-terms.rst: + + +Normative Language and Conventions +++++++++++++++++++++++++++++++++++ + +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. + + +Defined Terms ++++++++++++++ + +The terms *User*, *Trust Service*, *Trust Model*, *Trusted List*, *Trust Framework*, *Attribute*, *Electronic Attestations of Attributes Provider* or *Trust Service Provider (TSP)*, *Person Identification Data (PID)*, *Revocation List*, *Qualified Electronic Attestations of Attributes Provider* or *Qualified Trust Service Provider (QTSP)*, *Electronic Attestation of Attributes (EAA)*, are defined in the `EIDAS-ARF`_. + +Below are the description of acronyms and definitions which are useful for further insights into topics that complement the it-wallet and the interacting components. + + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - Accreditation Body + - An entity accredited by the Federation Authority, responsible for managing the process of verification and certification of accreditation requirements for ecosystem roles. + * - Digital Identity Provider + - An entity, recognized and accredited by the State, responsible for identifying citizens for the issuance of an Electronic Identity Certificate. + * - Electronic Attestation of Identity + - Electronic attestation of attributes referring to master data already present in Italian digital identity systems. + * - Digital Credential + - An signed Credential whose integrity can be cryptographically verified using the public keys of its Issuer. It is also known as Credential. + * - Federation Authority + - A public governance entity that issues guidelines and technical rules, and administers - directly or through its intermediary - Trusted Lists, services, and accreditation processes, the status of participants, and their eligibility evaluation. It also performs oversight functions. + * - Wallet Instance + - An instance of the Wallet Solution, installed on a personal mobile device and controlled by a specific User who is its sole owner. It is the application that enables citizens to fully and autonomously manage their digital identity and EAAs. + * - Wallet Provider + - All public and/or private entities, conforming to a technical profile and accredited by the Federation Authority, that provide citizens with an IT Wallet Instance. + * - Wallet Attestation + - Verifiable Attestation, issued by the Wallet Provider, that proves the security compliace of the Wallet Instance. + * - Wallet Attestation Service + - Device manufacturer service that allows you to certify the authenticity of the mobile app (Wallet Instance). + * - Qualified Electronic Attestation of Attributes (QEAA) + - A digitally verifiable attestation in electronic form, issued by a QTSP, that substantiates a person's possession of attributes. + * - Qualified Electronic Signature Provider + - The Electronic Trust Service Provider responsible for the issuing of Qualified Electronic Signature certificates to the User. + * - Relying Party + - A natural or legal person that implements an authentication system requiring electronic attribute attestation submissions as an authentication mechanism. + * - Verifier + - See Relying Party. + * - Trust Attestation + - Electronic attestation of an entity's compliance with the national regulatory framework, which is cryptographically verifiable and cannot be repudiated over time by the entity that issued it. A Trust Attestation is always related to a particular Trust Framework. + * - Trust Layer + - An architectural component that enables IT Wallet system participants to establish trust, in terms of reliability and compliance of all participants with the regulatory framework governing the digital identity system. + * - Trust Model + - System defining how the participants of the ecosystem establish and maintain trust in their interactions. The Trust Model outlines the rules and the procedures for the entities (like users, systems, or applications) should validate each other's identities, authenticate, and establish the level of trust before exchanging information. + * - Level of Assurance + - The degree of confidence in the vetting process used to establish the identity of the User and the degree of confidence that the User who presents the credential is the same User to whom the Digital Credential was issued. + * - Holder Key Binding + - Ability of the Holder to prove legitimate possession of the private part, related to the public part attested by a Trusted Third Party. + +Acronyms +-------- + +.. list-table:: + :widths: 20 80 + :header-rows: 1 + + * - **Acronym** + - **Description** + * - **OID4VP** + - OpenID for Verifiable Presentation + * - **PID** + - Person Identification Data + * - **VC** + - Verifiable Credential + * - **VP** + - Verifiable Presentation + * - **API** + - Application Programming Interface + * - **LoA** + - Level of Assurance diff --git a/refs/pull/212/merge/en/_sources/index.rst.txt b/refs/pull/212/merge/en/_sources/index.rst.txt new file mode 100644 index 000000000..a25387a11 --- /dev/null +++ b/refs/pull/212/merge/en/_sources/index.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +============================================== +The Italian EUDI Wallet implementation profile +============================================== + +Introduction +------------ + +The European Council requested the update of the +eIDAS Regulation on electronic identification and trust services by +implementing a new tool: the `European Digital Identity Wallet `_. + +Italy responded to the input received from the European community by creating the National digital identity Wallet solution, called IT Wallet, to be fully interoperable with all the other solutions made available by other European Member States and in full compliance to the European regulation. + +The current Italian scenario counts 3 coexisting digital identity tools that are partially overlapping, sometimes competing, and based on different technologies. This points to a highly fragmented system which yields difficulties for users and service providers. Therefore, the IT Wallet proposes to rationalise the digital identity ecosystem in Italy in order to simplify the experience of citizens, public administrations, and businesses in accessing digital services. + +To achieve these objectives and enhance the already active and eIDAS-notified digital identity schemes, the IT Wallet project entails a technological and governance evolution that envisages the progressive migration of the current threefold digital identification solution towards IT Wallet. + +The purpose of the following technical rules is to define the technical architecture and reference framework to be used as a guideline by all the parties involved in the development of the IT Wallet project. + +This documentation defines the national implementation profile of EUDI Wallet, containing the technical details about components of the Wallet ecosystem, as listed below: + + - Entities of the ecosystem according to `EIDAS-ARF`_. + - Infrastructure of trust attesting realiability and eligibility of the participants. + - PID and EAAs data schemes and attribute sets. + - PID/EAA in MDL CBOR format. + - PID/EAA in `SD-JWT`_ format. + - Wallet Solution general architecture. + - Wallet Attestation. + - Issuance of PID/EAA according to `OpenID4VCI`_. + - Presentation of PID/EAA according to `OpenID4VP`_. + - Presentation of pseudonyms according to `SIOPv2`_. + - PID/EAA backup and restore mechanisms. + - PID/EAA revocation lists. + +Index of content +---------------- + +.. toctree:: + :maxdepth: 3 + + ssi-introduction.rst + defined-terms.rst + trust.rst + wallet-solution.rst + wallet-attestation.rst + pid-eaa-data-model.rst + pid-eaa-issuance.rst + relying-party-solution.rst + revocation-lists.rst + pseudonyms.rst + backup-restore.rst + algorithms.rst + contribute.rst + standards.rst + diff --git a/refs/pull/212/merge/en/_sources/pid-eaa-data-model.rst.txt b/refs/pull/212/merge/en/_sources/pid-eaa-data-model.rst.txt new file mode 100644 index 000000000..b95cf5401 --- /dev/null +++ b/refs/pull/212/merge/en/_sources/pid-eaa-data-model.rst.txt @@ -0,0 +1,1149 @@ + +.. include:: ../common/common_definitions.rst + +.. _pid_eaa_data_model.rst: + +PID/(Q)EAA Data Model ++++++++++++++++++++++ + +The Person Identification Data (PID) is issued by the PID Provider according to national laws. The main scope of the PID is allowing natural persons to be authenticated for the access to a service or to a protected resource. +The User attributes provided within the Italian PID are the ones listed below: + + - Current Family Name + - Current First Name + - Date of Birth + - Unique Identifier + - Taxpayer identification number + +The Italian digital Credentials, like the PID and the (Q)EAA, contains additional claims and according to the `OpenID Identity Assurance Profile [OIDC.IDA] `_, these carries the national trust framework and the identity proofing procedures underlying the issuance. In particular, these carries some relevant information about the Authentic Sources of the subject's attributes. + +The (Q)EAAs are issued by (Q)EAA Issuers to a Wallet Instance and MUST be provided in SD-JWT-VC or MDOC-CBOR data format. + +The PID/(Q)EAA data format and the mechanism through which a digital credential is issued to the Wallet Instance and presented to a Relying Party are described in the following sections. + +SD-JWT +====== + +The PID/(Q)EAA is issued in the form of a digital credential. The digital credential format is `Selective Disclosure JWT format `_ as specified in `[draft-terbu-sd-jwt-vc-latest] `__. + +An SD-JWT is a JWT that MUST be signed using the Issuer's private key. The SD-JWT payload of the MUST contain the **_sd_alg** claim described in `[SD-JWT]. Section 5.1.2. `_ and other claims specified in this section, some of them may be selectively disclosable claims. + +The claim **_sd_alg** indicates the hash algorithm used by the Issuer to generate the digests over the salts and the claim values. The **_sd_alg** claim MUST be set to one of the specified algorithms in Section :ref:`Cryptographic Algorithms `. + +Selectively disclosable claims are omitted from the SD-JWT. Instead, the digests of the respective disclosures and decoy digests are contained as an array in a new JWT claim, **_sd**. + +Each digest value ensures the integrity of, and maps to, the respective Disclosure. Digest values are calculated using a hash function over the disclosures, each of which contains + + - a random salt, + - the claim name (only when the claim is an object property), + - the claim value. + +The Disclosures are sent to the Holder together with the SD-JWT in the *Combined Format for Issuance* that MUST be an ordered series of base64url-encoded values, each separated from the next by a single tilde ('~') character as follows: + +.. code-block:: + + ~~~...~ + +See `[draft-terbu-sd-jwt-vc-latest] `_ and `[SD-JWT] `__ for more details. + + +PID/(Q)EAA SD-JWT parameters +---------------------------- + +The JOSE header contains the following mandatory parameters: + +.. _pid_jose_header: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **typ** + - MUST be set to ``vc+sd-jwt`` as defined in `[draft-terbu-sd-jwt-vc-latest] `__. + - `[RFC7515, Section 4.1.9] `_. + * - **alg** + - Signature Algorithm. + - `[RFC7515, Section 4.1.1] `_. + * - **kid** + - Unique identifier of the public key. + - `[RFC7515, Section 4.1.8] `_. + * - **trust_chain** + - JSON array containing the trust chain that proves the reliability of the issuer of the JWT. + - `[OIDC-FED, Section 3.2.1] `_. + +The following claims MUST be in the JWT payload. Some of these claims can be disclosed, these are listed in the following tables that specify whether a claim is selectively disclosable [SD] or not [NSD]. + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **iss** + - [NSD].URL string representing the PID/(Q)EAA Issuer unique identifier. + - `[RFC7519, Section 4.1.1] `_. + * - **sub** + - [NSD].Thumbprint of the JWK in the ``cnf`` parameter. + - `[RFC7519, Section 4.1.2] `_. + * - **jti** + - [NSD].Unique Token ID identifier of this JWT. It SHOULD be a String in *uuid4* format. + - `[RFC7519, Section 4.1.7] `_. + * - **iat** + - [SD].UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in :rfc:`7519`. + - `[RFC7519, Section 4.1.6] `_. + * - **exp** + - [NSD].UNIX Timestamp with the expiry time of the JWT, coded as NumericDate as indicated in :rfc:`7519`. + - `[RFC7519, Section 4.1.4] `_. + * - **status** + - [NSD].HTTPS URL where the credential validity status is available. + - `[SD-JWT-VC. Section 4.2.2.2] `_. + * - **cnf** + - [NSD].JSON object containing the proof-of-possession key materials. By including a **cnf** (confirmation) claim in a JWT, the issuer of the JWT declares that the Holder is in control of the private key related to the public one defined in the **cnf** parameter. The recipient MUST cryptographically verify that the Holder is in control of that key. + - `[RFC7800, Section 3.1] `_. + * - **vct** + - [NSD].Credential type as a string, MUST be set in accordance to the type obtained from the PID/(Q)EAA Issuer metadata. For example, in the case of the PID, it MUST be set to ``PersonIdentificationData``. + - `[draft-terbu-sd-jwt-vc-latest. Section Type Claim] `__. + * - **verified_claims** + - [NSD].JSON object containing the following sub-elements: + + - **verification**; + - **claims**. + - `[OIDC.IDA. Section 5] `_. + +.. _sec-pid-eaa-verification-field: + +PID/(Q)EAA Verification field +----------------------------- + +The ``verification`` claim contains the information regarding the trust framework used by the PID/(Q)EAA Issuer to provide the User attributes (claims). + +The ``verification`` claim is a JSON structure with all the following mandatory sub-claims. + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **trust_framework** + - [NSD]. It MUST be set to ``eidas``. + - `[OID.IDA. Section 5.1] `_ + * - **assurance_level** + - [NSD]. MUST be set according to the LoA required. For PID credential it MUST be set to ``high``. + - `[OID.IDA. Section 5.1] `_ + * - **evidence** + - [SD]. JSON Array. Each element is the electronic evidence of the User identification during the PID issuance or, in the case of (Q)EAA, with this evidence the Authentic Source assures the authenticity of the data conveyed in the (Q)EAA. It MUST contain at least the following claims: + + - **type**: MUST be set to ``electronic_record`` + - **record**: JSON object (see the table below) + - `[OID.IDA. Section 5.1] `_ + + +The ``record`` MUST have at least the following sub parameters: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **type** + - It uniquely identifies the trust framework used for the provisioning of the credential. For example, in case of PID, the value ``https://eudi.wallet.cie.gov.it`` means that the CIE id identification scheme is used. + - `[OID.IDA. Section 5.1.1.2] `_ + * - **source** + - JSON Object cointaining the following mandatory claims: + + - **organization_name**: Name of the Organization acting as Authentic Source. + - **organization_id**: Identification code for the Organization. For public Organization, it MUST be set to the *IPA Code*, following the URN namespace ``urn:eudi:it:organization_id:ipa_code:``. + - **country_code**: String representing country in `[ISO3166-1] Alpha-2 (e.g., IT) or [ISO3166-3] syntax `_. + - `[OID.IDA. Section 5.1.1.2] `_ + +.. warning:: + Note that the sub-claims of the **evidence** parameter are not selectively disclosable separately, thus, for example, the User cannot give only the *record type* without the disclosure of the *record source* value (organization name, identifier and country). + +.. _sec-pid-user-claims: + +PID Claims field +---------------- + +The ``claims`` parameter contains the User attributes with the following mandatory fields: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **given_name** + - [SD]. Current First Name. + - `[OpenID Connect Core 1.0, Section 5.1] `_ + * - **family_name** + - [SD]. Current Family Name. + - `[OpenID Connect Core 1.0, Section 5.1] `_ + * - **birth_date** + - [SD]. Date of Birth. + - + * - **unique_id** + - [SD]. Unique citizen identifier (ID ANPR) given by the National Register of the Resident Population (ANPR). It MUST be set according to `ANPR rules `_ + - + * - **tax_id_code** + - [SD]. National tax identification code of natural person as a String format. It MUST be set according to ETSI EN 319 412-1. For example ``TINIT-`` + - + + + +PID Non-normative Examples +-------------------------- + +In the following, the non-normative example of a PID in JSON format. + +.. code-block:: JSON + + { + "iss": "https://issuer.example.org", + "sub": "NzbLsXh8uDCcd7noWXFZAfHkxZsRGC9Xs", + "jti": "urn:uuid:6c5c0a49-b589-431d-bae7-219122a9ec2c", + "iat": 1683000000, + "exp": 1883000000, + "status": "https://pidprovider.example.org/status", + "vct": "PidIdentificationData", + "verified_claims": { + "verification": { + "trust_framework": "eidas", + "assurance_level": "high", + "evidence": [ + { + "type": "electronic_record", + "record": { + "type": "https://eudi.wallet.cie.gov.it", + "source": { + "organization_name": "Ministero dell'Interno", + "organization_id": + "urn:eudi:it:organization_id:ipa_code:m_it", + "country_code": "IT" + } + } + } + ] + }, + "claims": { + "unique_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "given_name": "Mario", + "family_name": "Rossi", + "birth_date": "1980-01-10", + "tax_id_code": "TINIT-XXXXXXXXXXXXXXXX" + } + } + } + +The corresponding SD-JWT verson for PID is given by + +.. code-block:: JSON + + { + "typ":"vc+sd-jwt", + "alg":"RS512", + "kid":"dB67gL7ck3TFiIAf7N6_7SHvqk0MDYMEQcoGGlkUAAw", + "trust_chain" : [ + "NEhRdERpYnlHY3M5WldWTWZ2aUhm ...", + "eyJhbGciOiJSUzI1NiIsImtpZCI6 ...", + "IkJYdmZybG5oQU11SFIwN2FqVW1B ..." + ] + } + +.. code-block:: JSON + + { + "_sd": [ + "7WG4nT6K26_R3975zcwnVwgoHA7b988_3-vJzbZf6Yc" + ], + "iss": "https://issuer.example.org", + "exp": 1883000000, + "sub": "NzbLsXh8uDCcd7noWXFZAfHkxZsRGC9Xs", + "jti": "urn:uuid:6c5c0a49-b589-431d-bae7-219122a9ec2c", + "status": "https://pidprovider.example.org/status", + "vct": "PidIdentificationData", + "verified_claims": { + "verification": { + "_sd": [ + "gd8gRxKT1hg8ptnvR5fPGhae0VXllDblsiJT9adxiS8" + ], + "trust_framework": "eidas", + "assurance_level": "high" + }, + "claims": { + "_sd": [ + "4g9lBt38U1EeTA1zlvvGfFgPPcoe3zmbQ_zSRDgHQaE", + "EYgzJ1hTYWJjhBK2V3b8HV3e_fEf-Udffc5ymY77WtQ", + "IcYHQydT_C3U1IqaJlFicxLlaHTHvElyFZ6Jxia27qQ", + "KxIG8rWXmtR884xTV7eXuHICfPYPw6gFvfr07v-d5oc", + "lXgxEDAuPeUvmkcNGr9FZuqodwFqUT01gJj7xd4yEPA" + ] + } + }, + "_sd_alg": "sha-256", + "cnf": { + "jwk": { + "kty": "EC", + "crv": "P-256", + "x": "TCAER19Zvu3OHF4j4W4vfSVoHIP1ILilDls7vCeGemc", + "y": "ZxjiWWbZMQGHVWKVQ4hbSIirsVfuecCE6t4jT9F2HZQ" + } + } + } + +In the following the disclosure list is given + +**Claim** ``iat``: + +- SHA-256 Hash: ``7WG4nT6K26_R3975zcwnVwgoHA7b988_3-vJzbZf6Yc`` +- Disclosure: + ``WyI1N212eWNUaDV5WkNyS0xaNXhuZlV3IiwgImlhdCIsIDE2ODMwMDAwMDBd`` +- Contents: ``["57mvycTh5yZCrKLZ5xnfUw", "iat", 1683000000]`` + +**Claim** ``source``: + +- SHA-256 Hash: ``ZMHbFH9SeT9CZQaOMVrXDMGWIouzXRKspKp9fDhvJ3I`` +- Disclosure: + ``WyJrdWNyQm1sb19oTWFJRkY1ODVSemFRIiwgInNvdXJjZSIsIHsib3JnYW5p`` + ``emF0aW9uX25hbWUiOiAiTWluaXN0ZXJvIGRlbGwnSW50ZXJubyIsICJvcmdh`` + ``bml6YXRpb25faWQiOiAidXJuOmV1ZGk6aXQ6b3JnYW5pemF0aW9uX2lkOmlw`` + ``YV9jb2RlOm1faXQiLCAiY291bnRyeV9jb2RlIjogIklUIn1d`` +- Contents: + ``["kucrBmlo_hMaIFF585RzaQ", "source", {"organization_name":`` + ``"Ministero dell'Interno", "organization_id":`` + ``"urn:eudi:it:organization_id:ipa_code:m_it", "country_code":`` + ``"IT"}]`` + +**Claim** ``evidence``: + +- SHA-256 Hash: ``gd8gRxKT1hg8ptnvR5fPGhae0VXllDblsiJT9adxiS8`` +- Disclosure: + ``WyJOVE5Sb09pdVZWUnRGNkNFenRkOVp3IiwgImV2aWRlbmNlIiwgW3sidHlw`` + ``ZSI6ICJlbGVjdHJvbmljX3JlY29yZCIsICJyZWNvcmQiOiB7Il9zZCI6IFsi`` + ``Wk1IYkZIOVNlVDlDWlFhT01WclhETUdXSW91elhSS3NwS3A5ZkRodkozSSJd`` + ``LCAidHlwZSI6ICJodHRwczovL2V1ZGkud2FsbGV0LmNpZS5nb3YuaXQifX1d`` + ``XQ`` +- Contents: ``["NTNRoOiuVVRtF6CEztd9Zw", "evidence", [{"type":`` + ``"electronic_record", "record": {"_sd":`` + ``["ZMHbFH9SeT9CZQaOMVrXDMGWIouzXRKspKp9fDhvJ3I"], "type":`` + ``"https://eudi.wallet.cie.gov.it"}}]]`` + +**Claim** ``unique_id``: + +- SHA-256 Hash: ``4g9lBt38U1EeTA1zlvvGfFgPPcoe3zmbQ_zSRDgHQaE`` +- Disclosure: + ``WyJGRFNTUGdnekdCVXdRTEhEU0U2d1FRIiwgInVuaXF1ZV9pZCIsICJ4eHh4`` + ``eHh4eC14eHh4LXh4eHgteHh4eC14eHh4eHh4eHh4eHgiXQ`` +- Contents: ``["FDSSPggzGBUwQLHDSE6wQQ", "unique_id",`` + ``"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]`` + +**Claim** ``given_name``: + +- SHA-256 Hash: ``lXgxEDAuPeUvmkcNGr9FZuqodwFqUT01gJj7xd4yEPA`` +- Disclosure: + ``WyJLWjhlNXdWRXREdmIxemlTUEE0RHpBIiwgImdpdmVuX25hbWUiLCAiTWFy`` + ``aW8iXQ`` +- Contents: ``["KZ8e5wVEtDvb1ziSPA4DzA", "given_name", "Mario"]`` + +**Claim** ``family_name``: + +- SHA-256 Hash: ``IcYHQydT_C3U1IqaJlFicxLlaHTHvElyFZ6Jxia27qQ`` +- Disclosure: + ``WyJwWjVNUnlPeHBWV1p1SExvSi15alJnIiwgImZhbWlseV9uYW1lIiwgIlJv`` + ``c3NpIl0`` +- Contents: ``["pZ5MRyOxpVWZuHLoJ-yjRg", "family_name", "Rossi"]`` + +**Claim** ``birth_date``: + +- SHA-256 Hash: ``EYgzJ1hTYWJjhBK2V3b8HV3e_fEf-Udffc5ymY77WtQ`` +- Disclosure: + ``WyJqdFZ1S0NwbjdiVGNIckFnX3NlVWJRIiwgImJpcnRoX2RhdGUiLCAiMTk4`` + ``MC0wMS0xMCJd`` +- Contents: ``["jtVuKCpn7bTcHrAg_seUbQ", "birth_date", "1980-01-10"]`` + +**Claim** ``tax_id_code``: + +- SHA-256 Hash: ``KxIG8rWXmtR884xTV7eXuHICfPYPw6gFvfr07v-d5oc`` +- Disclosure: + ``WyI0a3NBejZiTVVLeTZadk4xaDhIRHVRIiwgInRheF9pZF9jb2RlIiwgIlRJ`` + ``TklULVhYWFhYWFhYWFhYWFhYWFgiXQ`` +- Contents: ``["4ksAz6bMUKy6ZvN1h8HDuQ", "tax_id_code",`` + ``"TINIT-XXXXXXXXXXXXXXXX"]`` + + + +The combined format for the PID issuance is given by + +.. code-block:: + + eyJhbGciOiAiRVMyNTYiLCAidHlwIjogImV4YW1wbGUrc2Qtand0In0.eyJfc2QiOiBb + IjdXRzRuVDZLMjZfUjM5NzV6Y3duVndnb0hBN2I5ODhfMy12SnpiWmY2WWMiXSwgImlz + cyI6ICJodHRwczovL3BpZHByb3ZpZGVyLmV4YW1wbGUub3JnIiwgImV4cCI6IDE4ODMw + MDAwMDAsICJzdWIiOiAiTnpiTHNYaDh1RENjZDdub1dYRlpBZkhreFpzUkdDOVhzIiwg + Imp0aSI6ICJ1cm46dXVpZDo2YzVjMGE0OS1iNTg5LTQzMWQtYmFlNy0yMTkxMjJhOWVj + MmMiLCAic3RhdHVzIjogImh0dHBzOi8vcGlkcHJvdmlkZXIuZXhhbXBsZS5vcmcvc3Rh + dHVzIiwgInZjdCI6ICJQaWRJZGVudGlmaWNhdGlvbkRhdGEiLCAidmVyaWZpZWRfY2xh + aW1zIjogeyJ2ZXJpZmljYXRpb24iOiB7Il9zZCI6IFsiZ2Q4Z1J4S1QxaGc4cHRudlI1 + ZlBHaGFlMFZYbGxEYmxzaUpUOWFkeGlTOCJdLCAidHJ1c3RfZnJhbWV3b3JrIjogImVp + ZGFzIiwgImFzc3VyYW5jZV9sZXZlbCI6ICJoaWdoIn0sICJjbGFpbXMiOiB7Il9zZCI6 + IFsiNGc5bEJ0MzhVMUVlVEExemx2dkdmRmdQUGNvZTN6bWJRX3pTUkRnSFFhRSIsICJF + WWd6SjFoVFlXSmpoQksyVjNiOEhWM2VfZkVmLVVkZmZjNXltWTc3V3RRIiwgIkljWUhR + eWRUX0MzVTFJcWFKbEZpY3hMbGFIVEh2RWx5Rlo2SnhpYTI3cVEiLCAiS3hJRzhyV1ht + dFI4ODR4VFY3ZVh1SElDZlBZUHc2Z0Z2ZnIwN3YtZDVvYyIsICJsWGd4RURBdVBlVXZt + a2NOR3I5Rlp1cW9kd0ZxVVQwMWdKajd4ZDR5RVBBIl19fSwgIl9zZF9hbGciOiAic2hh + LTI1NiIsICJjbmYiOiB7Imp3ayI6IHsia3R5IjogIkVDIiwgImNydiI6ICJQLTI1NiIs + ICJ4IjogIlRDQUVSMTladnUzT0hGNGo0VzR2ZlNWb0hJUDFJTGlsRGxzN3ZDZUdlbWMi + LCAieSI6ICJaeGppV1diWk1RR0hWV0tWUTRoYlNJaXJzVmZ1ZWNDRTZ0NGpUOUYySFpR + In19fQ.1xdAqLpgMM0bBDQrYv0thRwtgRikZq75JJVhGyfWAsu8SopmhumzsTA4ohJKC + le1MV3UB6DYMFkEnoal8R1Yrw~WyI1N212eWNUaDV5WkNyS0xaNXhuZlV3IiwgImlhdC + IsIDE2ODMwMDAwMDBd~WyJrdWNyQm1sb19oTWFJRkY1ODVSemFRIiwgInNvdXJjZSIsI + Hsib3JnYW5pemF0aW9uX25hbWUiOiAiTWluaXN0ZXJvIGRlbGwnSW50ZXJubyIsICJvc + mdhbml6YXRpb25faWQiOiAidXJuOmV1ZGk6aXQ6b3JnYW5pemF0aW9uX2lkOmlwYV9jb + 2RlOm1faXQiLCAiY291bnRyeV9jb2RlIjogIklUIn1d~WyJOVE5Sb09pdVZWUnRGNkNF + enRkOVp3IiwgImV2aWRlbmNlIiwgW3sidHlwZSI6ICJlbGVjdHJvbmljX3JlY29yZCIs + ICJyZWNvcmQiOiB7Il9zZCI6IFsiWk1IYkZIOVNlVDlDWlFhT01WclhETUdXSW91elhS + S3NwS3A5ZkRodkozSSJdLCAidHlwZSI6ICJodHRwczovL2V1ZGkud2FsbGV0LmNpZS5n + b3YuaXQifX1dXQ~WyJGRFNTUGdnekdCVXdRTEhEU0U2d1FRIiwgInVuaXF1ZV9pZCIsI + CJ4eHh4eHh4eC14eHh4LXh4eHgteHh4eC14eHh4eHh4eHh4eHgiXQ~WyJLWjhlNXdWRX + REdmIxemlTUEE0RHpBIiwgImdpdmVuX25hbWUiLCAiTWFyaW8iXQ~WyJwWjVNUnlPeHB + WV1p1SExvSi15alJnIiwgImZhbWlseV9uYW1lIiwgIlJvc3NpIl0~WyJqdFZ1S0Nwbjd + iVGNIckFnX3NlVWJRIiwgImJpcnRoX2RhdGUiLCAiMTk4MC0wMS0xMCJd~WyJXRGtkNk + pzTmhERnZMUDRzMWhRZHlBIiwgInRheF9pZF9jb2RlIiwgIlRJTklULVhYWFhYWFhYWF + hYWFhYWFgiXQ~ + +(Q)EAA Non-normative examples +----------------------------- + +In the following, we provide a non-normative example of (Q)EAA in JSON. + +.. code-block:: JSON + + { + "iss": "https://issuer.example.org", + "sub": "NzbLsXh8uDCcd7noWXFZAfHkxZsRGC9Xs", + "jti": "urn:uuid:6c5c0a49-b589-431d-bae7-219122a9ec2c", + "iat": 1683000000, + "exp": 1883000000, + "status": "https://issuer.example.org/status", + "vct": "DisabilityCard", + "verified_claims": { + "verification": { + "trust_framework": "eidas", + "assurance_level": "high", + "evidence": [ + { + "type": "electronic_record", + "record": { + "type": "https://eudi.wallet.pdnd.gov.it", + "source": { + "organization_name": "Istituto Nazionale della Previdenza Sociale", + "organization_id": + "urn:eudi:it:organization_id:ipa_code:inps", + "country_code": "IT" + } + } + } + ] + }, + "claims": { + "document_number": "XXXXXXXXXX", + "given_name": "Mario", + "family_name": "Rossi", + "birth_date": "1980-01-10", + "expiry_date": "2024-01-01", + "tax_id_code": "TINIT-XXXXXXXXXXXXXXXX", + "constant_attendance_allowance": true + } + } + } + +The corresponding SD-JWT for the previous data is represented as follow, as decoded JSON for both header and payload. + +.. code-block:: JSON + + { + "typ":"vc+sd-jwt", + "alg":"RS512", + "kid":"d126a6a856f7724560484fa9dc59d195", + "trust_chain" : [ + "NEhRdERpYnlHY3M5WldWTWZ2aUhm ...", + "eyJhbGciOiJSUzI1NiIsImtpZCI6 ...", + "IkJYdmZybG5oQU11SFIwN2FqVW1B ..." + ] + } + +.. code-block:: JSON + + { + "_sd": [ + "7WG4nT6K26_R3975zcwnVwgoHA7b988_3-vJzbZf6Yc" + ], + "iss": "https://issuer.example.org", + "exp": 1883000000, + "sub": "NzbLsXh8uDCcd7noWXFZAfHkxZsRGC9Xs", + "jti": "urn:uuid:6c5c0a49-b589-431d-bae7-219122a9ec2c", + "status": "https://issuer.example.org/status", + "vct": "DisabilityCard", + "verified_claims": { + "verification": { + "_sd": [ + "sTskq0yFy31ZH3YP2nN_nFnd7H9q18dU3oEa1DC5LRc" + ], + "trust_framework": "eidas", + "assurance_level": "high" + }, + "claims": { + "_sd": [ + "3humFjiCYHdHzjL-OEd1vKnQa10ivaYEd1dCCkfRuaA", + "EYgzJ1hTYWJjhBK2V3b8HV3e_fEf-Udffc5ymY77WtQ", + "F90SKK9nIQcHIElkHY_ult_9FGqYe-RydvY3E0qR96s", + "IcYHQydT_C3U1IqaJlFicxLlaHTHvElyFZ6Jxia27qQ", + "dfrmUvonZDgealZCGwk3ufmc_4ept3y9N7xhWZlCyxo", + "ji86HS1v3D41tU5JqW4oWCwTJDuTUwp1ewqoCUzzEXk", + "lXgxEDAuPeUvmkcNGr9FZuqodwFqUT01gJj7xd4yEPA" + ] + } + }, + "_sd_alg": "sha-256", + "cnf": { + "jwk": { + "kty": "EC", + "crv": "P-256", + "x": "TCAER19Zvu3OHF4j4W4vfSVoHIP1ILilDls7vCeGemc", + "y": "ZxjiWWbZMQGHVWKVQ4hbSIirsVfuecCE6t4jT9F2HZQ" + } + } + } + +In the following the disclosure list is given: + +**Claim** ``iat``: + +- SHA-256 Hash: ``7WG4nT6K26_R3975zcwnVwgoHA7b988_3-vJzbZf6Yc`` +- Disclosure: + ``WyI1N212eWNUaDV5WkNyS0xaNXhuZlV3IiwgImlhdCIsIDE2ODMwMDAwMDBd`` +- Contents: ``["57mvycTh5yZCrKLZ5xnfUw", "iat", 1683000000]`` + +**Claim** ``source``: + +- SHA-256 Hash: ``qfuzrQuGcbBBKaE4Q9eqVCSznzJ2rNndLG8q606RLsM`` +- Disclosure: + ``WyJrdWNyQm1sb19oTWFJRkY1ODVSemFRIiwgInNvdXJjZSIsIHsib3JnYW5p`` + ``emF0aW9uX25hbWUiOiAiSXN0aXR1dG8gTmF6aW9uYWxlIGRlbGxhIFByZXZp`` + ``ZGVuemEgU29jaWFsZSIsICJvcmdhbml6YXRpb25faWQiOiAidXJuOmV1ZGk6`` + ``aXQ6b3JnYW5pemF0aW9uX2lkOmlwYV9jb2RlOmlucHMiLCAiY291bnRyeV9j`` + ``b2RlIjogIklUIn1d`` +- Contents: + ``["kucrBmlo_hMaIFF585RzaQ", "source", {"organization_name":`` + ``"Istituto Nazionale della Previdenza Sociale",`` + ``"organization_id":`` + ``"urn:eudi:it:organization_id:ipa_code:inps", "country_code":`` + ``"IT"}]`` + +**Claim** ``evidence``: + +- SHA-256 Hash: ``sTskq0yFy31ZH3YP2nN_nFnd7H9q18dU3oEa1DC5LRc`` +- Disclosure: + ``WyJOVE5Sb09pdVZWUnRGNkNFenRkOVp3IiwgImV2aWRlbmNlIiwgW3sidHlw`` + ``ZSI6ICJlbGVjdHJvbmljX3JlY29yZCIsICJyZWNvcmQiOiB7Il9zZCI6IFsi`` + ``cWZ1enJRdUdjYkJCS2FFNFE5ZXFWQ1N6bnpKMnJObmRMRzhxNjA2UkxzTSJd`` + ``LCAidHlwZSI6ICJodHRwczovL2V1ZGkud2FsbGV0LnBkbmQuZ292Lml0In19`` + ``XV0`` +- Contents: ``["NTNRoOiuVVRtF6CEztd9Zw", "evidence", [{"type":`` + ``"electronic_record", "record": {"_sd":`` + ``["qfuzrQuGcbBBKaE4Q9eqVCSznzJ2rNndLG8q606RLsM"], "type":`` + ``"https://eudi.wallet.pdnd.gov.it"}}]]`` + +**Claim** ``document_number``: + +- SHA-256 Hash: ``3humFjiCYHdHzjL-OEd1vKnQa10ivaYEd1dCCkfRuaA`` +- Disclosure: + ``WyJGRFNTUGdnekdCVXdRTEhEU0U2d1FRIiwgImRvY3VtZW50X251bWJlciIs`` + ``ICJYWFhYWFhYWFhYIl0`` +- Contents: + ``["FDSSPggzGBUwQLHDSE6wQQ", "document_number", "XXXXXXXXXX"]`` + +**Claim** ``given_name``: + +- SHA-256 Hash: ``lXgxEDAuPeUvmkcNGr9FZuqodwFqUT01gJj7xd4yEPA`` +- Disclosure: + ``WyJLWjhlNXdWRXREdmIxemlTUEE0RHpBIiwgImdpdmVuX25hbWUiLCAiTWFy`` + ``aW8iXQ`` +- Contents: ``["KZ8e5wVEtDvb1ziSPA4DzA", "given_name", "Mario"]`` + +**Claim** ``family_name``: + +- SHA-256 Hash: ``IcYHQydT_C3U1IqaJlFicxLlaHTHvElyFZ6Jxia27qQ`` +- Disclosure: + ``WyJwWjVNUnlPeHBWV1p1SExvSi15alJnIiwgImZhbWlseV9uYW1lIiwgIlJv`` + ``c3NpIl0`` +- Contents: ``["pZ5MRyOxpVWZuHLoJ-yjRg", "family_name", "Rossi"]`` + +**Claim** ``birth_date``: + +- SHA-256 Hash: ``EYgzJ1hTYWJjhBK2V3b8HV3e_fEf-Udffc5ymY77WtQ`` +- Disclosure: + ``WyJqdFZ1S0NwbjdiVGNIckFnX3NlVWJRIiwgImJpcnRoX2RhdGUiLCAiMTk4`` + ``MC0wMS0xMCJd`` +- Contents: ``["jtVuKCpn7bTcHrAg_seUbQ", "birth_date", "1980-01-10"]`` + +**Claim** ``expiry_date``: + +- SHA-256 Hash: ``dfrmUvonZDgealZCGwk3ufmc_4ept3y9N7xhWZlCyxo`` +- Disclosure: + ``WyJXRGtkNkpzTmhERnZMUDRzMWhRZHlBIiwgImV4cGlyeV9kYXRlIiwgIjIw`` + ``MjQtMDEtMDEiXQ`` +- Contents: ``["WDkd6JsNhDFvLP4s1hQdyA", "expiry_date", "2024-01-01"]`` + +**Claim** ``tax_id_code``: + +- SHA-256 Hash: ``F90SKK9nIQcHIElkHY_ult_9FGqYe-RydvY3E0qR96s`` +- Disclosure: + ``WyI0a3NBejZiTVVLeTZadk4xaDhIRHVRIiwgInRheF9pZF9jb2RlIiwgIlRJ`` + ``TklULVhYWFhYWFhYWFhYWFhYWFgiXQ`` +- Contents: ``["4ksAz6bMUKy6ZvN1h8HDuQ", "tax_id_code",`` + ``"TINIT-XXXXXXXXXXXXXXXX"]`` + +**Claim** ``constant_attendance_allowance``: + +- SHA-256 Hash: ``ji86HS1v3D41tU5JqW4oWCwTJDuTUwp1ewqoCUzzEXk`` +- Disclosure: + ``WyJEZFdxS2g3d2RJNVZBeEtTdnhzWFZRIiwgImNvbnN0YW50X2F0dGVuZGFu`` + ``Y2VfYWxsb3dhbmNlIiwgdHJ1ZV0`` +- Contents: + ``["DdWqKh7wdI5VAxKSvxsXVQ", "constant_attendance_allowance",`` + ``true]`` + + + +The combined format for the PID issuance is represented below: + +.. code-block:: + + eyJhbGciOiAiRVMyNTYiLCAidHlwIjogImV4YW1wbGUrc2Qtand0In0.eyJfc2QiOiBb + IjdXRzRuVDZLMjZfUjM5NzV6Y3duVndnb0hBN2I5ODhfMy12SnpiWmY2WWMiXSwgImlz + cyI6ICJodHRwczovL2lzc3Vlci5leGFtcGxlLm9yZyIsICJleHAiOiAxODgzMDAwMDAw + LCAic3ViIjogIk56YkxzWGg4dURDY2Q3bm9XWEZaQWZIa3hac1JHQzlYcyIsICJqdGki + OiAidXJuOnV1aWQ6NmM1YzBhNDktYjU4OS00MzFkLWJhZTctMjE5MTIyYTllYzJjIiwg + InN0YXR1cyI6ICJodHRwczovL2lzc3Vlci5leGFtcGxlLm9yZy9zdGF0dXMiLCAidmN0 + IjogIkRpc2FiaWxpdHlDYXJkIiwgInZlcmlmaWVkX2NsYWltcyI6IHsidmVyaWZpY2F0 + aW9uIjogeyJfc2QiOiBbInNUc2txMHlGeTMxWkgzWVAybk5fbkZuZDdIOXExOGRVM29F + YTFEQzVMUmMiXSwgInRydXN0X2ZyYW1ld29yayI6ICJlaWRhcyIsICJhc3N1cmFuY2Vf + bGV2ZWwiOiAiaGlnaCJ9LCAiY2xhaW1zIjogeyJfc2QiOiBbIjNodW1GamlDWUhkSHpq + TC1PRWQxdktuUWExMGl2YVlFZDFkQ0NrZlJ1YUEiLCAiRVlnekoxaFRZV0pqaEJLMlYz + YjhIVjNlX2ZFZi1VZGZmYzV5bVk3N1d0USIsICJGOTBTS0s5bklRY0hJRWxrSFlfdWx0 + XzlGR3FZZS1SeWR2WTNFMHFSOTZzIiwgIkljWUhReWRUX0MzVTFJcWFKbEZpY3hMbGFI + VEh2RWx5Rlo2SnhpYTI3cVEiLCAiZGZybVV2b25aRGdlYWxaQ0d3azN1Zm1jXzRlcHQz + eTlON3hoV1psQ3l4byIsICJqaTg2SFMxdjNENDF0VTVKcVc0b1dDd1RKRHVUVXdwMWV3 + cW9DVXp6RVhrIiwgImxYZ3hFREF1UGVVdm1rY05HcjlGWnVxb2R3RnFVVDAxZ0pqN3hk + NHlFUEEiXX19LCAiX3NkX2FsZyI6ICJzaGEtMjU2IiwgImNuZiI6IHsiandrIjogeyJr + dHkiOiAiRUMiLCAiY3J2IjogIlAtMjU2IiwgIngiOiAiVENBRVIxOVp2dTNPSEY0ajRX + NHZmU1ZvSElQMUlMaWxEbHM3dkNlR2VtYyIsICJ5IjogIlp4amlXV2JaTVFHSFZXS1ZR + NGhiU0lpcnNWZnVlY0NFNnQ0alQ5RjJIWlEifX19.hbgWxBoQtLVpTfygYVDhrgnoCkw + aw_hqY9GpxG4oXixejLEMvTOAwYFtqiNnYSuNaaGD6aemJW7jLSHDm9NOGA~WyI1N212 + eWNUaDV5WkNyS0xaNXhuZlV3IiwgImlhdCIsIDE2ODMwMDAwMDBd~WyJrdWNyQm1sb19 + oTWFJRkY1ODVSemFRIiwgInNvdXJjZSIsIHsib3JnYW5pemF0aW9uX25hbWUiOiAiSXN + 0aXR1dG8gTmF6aW9uYWxlIGRlbGxhIFByZXZpZGVuemEgU29jaWFsZSIsICJvcmdhbml + 6YXRpb25faWQiOiAidXJuOmV1ZGk6aXQ6b3JnYW5pemF0aW9uX2lkOmlwYV9jb2RlOml + ucHMiLCAiY291bnRyeV9jb2RlIjogIklUIn1d~WyJOVE5Sb09pdVZWUnRGNkNFenRkOV + p3IiwgImV2aWRlbmNlIiwgW3sidHlwZSI6ICJlbGVjdHJvbmljX3JlY29yZCIsICJyZW + NvcmQiOiB7Il9zZCI6IFsicWZ1enJRdUdjYkJCS2FFNFE5ZXFWQ1N6bnpKMnJObmRMRz + hxNjA2UkxzTSJdLCAidHlwZSI6ICJodHRwczovL2V1ZGkud2FsbGV0LnBkbmQuZ292Lm + l0In19XV0~WyJGRFNTUGdnekdCVXdRTEhEU0U2d1FRIiwgImRvY3VtZW50X251bWJlci + IsICJYWFhYWFhYWFhYIl0~WyJLWjhlNXdWRXREdmIxemlTUEE0RHpBIiwgImdpdmVuX2 + 5hbWUiLCAiTWFyaW8iXQ~WyJwWjVNUnlPeHBWV1p1SExvSi15alJnIiwgImZhbWlseV9 + uYW1lIiwgIlJvc3NpIl0~WyJqdFZ1S0NwbjdiVGNIckFnX3NlVWJRIiwgImJpcnRoX2R + hdGUiLCAiMTk4MC0wMS0xMCJd~WyJXRGtkNkpzTmhERnZMUDRzMWhRZHlBIiwgImV4cG + lyeV9kYXRlIiwgIjIwMjQtMDEtMDEiXQ~WyI0a3NBejZiTVVLeTZadk4xaDhIRHVRIiw + gInRheF9pZF9jb2RlIiwgIlRJTklULVhYWFhYWFhYWFhYWFhYWFgiXQ~WyJEZFdxS2g3 + d2RJNVZBeEtTdnhzWFZRIiwgImNvbnN0YW50X2F0dGVuZGFuY2VfYWxsb3dhbmNlIiwg + dHJ1ZV0~ + +MDOC-CBOR +========= + +The PID/(Q)EAA MDOC-CBOR data model is defined in ISO/IEC 18013-5, the standard born for the the mobile driving license (mDL) use case. + +The MDOC data elements MUST be encoded as defined in `RFC 8949 - Concise Binary Object Representation (CBOR) `_. + +The PID encoded in MDOC-CBOR format uses the document type set to `eu.europa.ec.eudiw.pid.1`, according to the reverse domain approach defined in the +`EIDAS-ARF`_ and ISO/IEC 18013-5. + +The document's data elements utilize a consistent namespace for the mandatory Mobile Driving License attributes, while the national PID attributes use the domestic namespace `eu.europa.ec.eudiw.pid.it.1`, as outlined in this implementation profile. + +In compliance with ISO/IEC 18013-5, the MDOC data model in the domestic namespace `eu.europa.ec.eudiw.pid.it.1`, requires the following attributes: + +.. _table-mdoc-attributes: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Attribute name** + - **Description** + - **Reference** + * - **version** + - *tstr (text string)*. Version of the data structure being used. It's a way to track changes and updates to the standard or to a specific implementation profile. This allows for backward compatibility and understanding of the data if the standard or implementation evolves over time. + - [ISO 18013-5#8.3.2.1.2] + * - **status** + - *uint (unsigned int)*. Status code. For example ``"status":0`` means OK (normal processing). + - [ISO 18013-5#8.3.2.1.2.3] + * - **documents** + - *bstr (byte string)*. The collection of digital documents. Each document in this collection represents a specific type of data or information related to the Digital Credential. + - [ISO 18013-5#8.3.2.1.2] + +Each document within the **documents** collection MUST have the following structure: + +.. _table-mdoc-documents-attributes: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Attribute name** + - **Description** + - **Reference** + * - **docType** + - *tstr (text string)*. Document type. For the PID, the value MUST be set to ``eu.europa.ec.eudiw.pid.1.`` For an mDL, the value MUST be ``org.iso.18013-5.1.mDL``. + - [ISO 18013-5#8.3.2.1.2] + * - **issuerSigned** + - *bstr (byte string)*. It MUST contain the Mobile Security Object for Issuer data authentication and the data elements protected by Issuer data authentication. + - [ISO 18013-5#8.3.2.1.2] + +The **issuerSigned** object MUST have the following structure: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Attribute name** + - **Description** + - **Reference** + * - **nameSpaces** + - *bstr (byte string)* with *tag* 24 and *major type* 6. Returned data elements for the namespaces. It MAY be possible to have one or more namespaces. The `nameSpaces` MUST use the same value for the document type. However, it MAY have a domestic namespace to include attributes defined in this implementation profile. The value MUST be set to ``eu.europa.ec.eudiw.pid.it.1``. + - [ISO 18013-5#8.3.2.1.2] + * - **issuerAuth** + - *bstr (byte string)*. Contains *Mobile Security Object* (MSO), a COSE Sign1 Document, issued by the Credential Issuer. + - [ISO 18013-5#9.1.2.4] + +During the presentation of the MDOC-CBOR credential, in addition to the objects in the table above, a **deviceSigned** object MUST also be added. **deviceSigned** MUST NOT be included in the issued credential provided by the PID/(Q)EAA Issuer. + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Attribute name** + - **Description** + - **Reference** + * - **deviceSigned** + - *bstr (byte string)*. Data elements signed by the Wallet Instance during the presentation phase. + - [ISO 18013-5#8.3.2.1.2] + +Where the **deviceSigned** MUST have the following structure: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Attribute name** + - **Description** + - **Reference** + * - **nameSpaces** + - *tstr (text string)*. Returned data elements for the namespaces. It MAY be possible to have one or more namespaces. It MAY be used for self-attested claims. + - [ISO 18013-5#8.3.2.1.2] + * - **deviceAuth** + - *bstr (byte string)*. It MUST contain either the *DeviceSignature* or the *DeviceMac* element. + - [ISO 18013-5#8.3.2.1.2] + + +.. note:: + + A **deviceSigned** object given during the presentation phase has two purposes: + + 1. It provides optional self-attested attributes in the ``nameSpaces`` object. If no self-attested attributes are provided by the Wallet Instance, the ``nameSpaces`` object MUST be included with an empty structure. + 2. Provide a cryptographic proof attesting that the Holder is the legitimate owner of the Credential, by means of a ``deviceAuth`` object. + + +.. note:: + + The ``issuerSigned`` and the ``deviceSigned`` objects contain the ``nameSpaces`` object and the *Mobile Security Object*. The latter is the only signed object, while the ``nameSpaces`` object is not signed. + + + +nameSpaces +---------- + +The **nameSpaces** object contains one or more *IssuerSignedItemBytes* that are encoded using CBOR bitsring 24 tag (#6.24(bstr .cbor), marked with the CBOR Tag 24(<<... >>) and represented in the example using the diagnostic format). It represents the disclosure information for each digest within the `Mobile Security Object` and MUST contain the following attributes: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Name** + - **Encoding** + - **Description** + * - **digestID** + - *integer* + - Reference value to one of the ``ValueDigests`` provided in the *Mobile Security Object* (`issuerAuth`). + * - **random** + - *bstr (byte string)* + - Random byte value used as salt for the hash function. This value SHALL be different for each *IssuerSignedItem* and it SHALL have a minimum length of 16 bytes. + * - **elementIdentifier** + - *tstr (text string)* + - Data element identifier. + * - **elementValue** + - depends by the value, see the next table. + - Data element value. + +The **elementIdentifier** data that MUST be included in a PID/(Q)EAA are: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Namespace** + - **Element identifier** + - **Description** + * - **eu.europa.ec.eudiw.pid.1** + - **issue_date** + - *full-date (CBORTag 1004)*. Date when the PID/(Q)EAA was issued. + * - **eu.europa.ec.eudiw.pid.1** + - **expiry_date** + - *full-date (CBORTag 1004)*. Date when the PID/(Q)EAA will expire. + * - **eu.europa.ec.eudiw.pid.1** + - **issuing_authority** + - *tstr (text string)*. Name of administrative authority that has issued the PID/(Q)EAA. + * - **eu.europa.ec.eudiw.pid.1** + - **issuing_country** + - *tstr (text string)*. Alpha-2 country code as defined in [ISO 3166]. + * - **eu.europa.ec.eudiw.pid.it.1** + - **verification.evidence** + - *bstr (byte string)*. As defined in the :ref:`PID/(Q)EAA Verification field Section `. + * - **eu.europa.ec.eudiw.pid.it.1** + - **verification.trust_framework** + - *tstr (text string)*. As defined in the :ref:`PID/(Q)EAA Verification field Section `. + * - **eu.europa.ec.eudiw.pid.it.1** + - **verification.assurance_level** + - *tstr (text string)*. As defined in the :ref:`PID/(Q)EAA Verification field Section `. + * - **eu.europa.ec.eudiw.pid.it.1** + - **status** + - *tstr (text string)*. HTTPS URL where the credential validity status is available. + + +Depending on the Digital Credential type, additional **elementIdentifier** data MAY be added. The PID MUST support the following data: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Namespace** + - **Element identifier** + - **Description** + * - **eu.europa.ec.eudiw.pid.1** + - **given_name** + - *tstr (text string)*. See :ref:`PID Claims fields Section `. + * - **eu.europa.ec.eudiw.pid.1** + - **family_name** + - *tstr (text string)*. See :ref:`PID Claims fields Section `. + * - **eu.europa.ec.eudiw.pid.1** + - **birth_date** + - *full-date (CBORTag 1004)*. See :ref:`PID Claims fields Section `. + * - **eu.europa.ec.eudiw.pid.1** + - **unique_id** + - *tstr (text string)*. See :ref:`PID Claims fields Section `. + * - **eu.europa.ec.eudiw.pid.it.1** + - **tax_id_code** + - *tstr (text string)*. See :ref:`PID Claims fields Section `. + + +Mobile Security Object +---------------------- + +The **issuerAuth** represents the `Mobile Security Object` which is a `COSE Sign1 Document` defined in `RFC 9052 - CBOR Object Signing and Encryption (COSE): Structures and Process `_. It has the following data structure: + +* protected header +* unprotected header +* payload +* signature. + +The **protected header** MUST contain the following parameter encoded in CBOR format: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Element** + - **Description** + - **Reference** + * - **Signature algorithm** + - `-7` means ES256, SHA-256. + - RFC8152 + +.. note:: + + Only the Signature Algorithm MUST be present in the protected headers, other elements SHOULD not be present in the protected header. + + +The **unprotected header** MUST contain the following parameter: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Element** + - **Description** + - **Reference** + * - **x5chain** + - Identified with the label 33 + - `RFC 9360 CBOR Object Signing and Encryption (COSE) - Header Parameters for Carrying and Referencing X.509 Certificates `_. + +.. note:: + The `x5chain` is included in the unprotected header with the aim to make the Holder able to update the X.509 certificate chain, related to the `Mobile Security Object` issuer, without invalidating the signature. + +The **payload** MUST contain the *MobileSecurityObject*, without the `content-type` COSE Sign header parameter and encoded as a *byte string* (bstr) using the *CBOR Tag* 24. + +The `MobileSecurityObjectBytes` MUST have the following attributes: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Element** + - **Description** + - **Reference** + * - **docType** + - See :ref:`Table `. + - [ISO 18013-5#9.1.2.4] + * - **version** + - See :ref:`Table `. + - [ISO 18013-5#9.1.2.4] + * - **validityInfo**. + - Object containing issuance and expiration datetimes. It MUST contain the following sub-value: + + * *signed* + * *validFrom* + * *validUntil* + - [ISO 18013-5#9.1.2.4] + * - **digestAlgorithm** + - According to the algorithm defined in the protected header. + - [ISO 18013-5#9.1.2.4] + * - **valueDigests** + - Mapped digest by unique id, grouped by namespace. + - [ISO 18013-5#9.1.2.4] + * - **deviceKeyInfo** + - It MUST contain the Wallet Instance's public key containing the following sub-values. + + * *deviceKey* (REQUIRED). + * *keyAuthorizations* (OPTIONAL). + * *keyInfo* (OPTIONAL). + - [ISO 18013-5#9.1.2.4] + +.. note:: + The private key related to the public key stored in the `deviceKey` object is used to sign the `DeviceSignedItems` object and proof the possession of the PID during the presentation phase (see the presentation phase with MDOC-CBOR). + + +MDOC-CBOR Examples +------------------ + +A non-normative example of a PID in MDOC-CBOR format is represented below using the AF Binary encoding: + +.. code-block:: text + + a366737461747573006776657273696f6e63312e3069646f63756d656e747381a267646f6354797065781865752e6575726f70612e65632e65756469772e7069642e316c6973737565725369676e6564a26a697373756572417574688443a10126a1182159021930820215308201bca003020102021404ad06a30c1a6dc6e93be0e2e8f78dcafa7907c2300a06082a8648ce3d040302305b310b3009060355040613025a45312e302c060355040a0c25465053204d6f62696c69747920616e64205472616e73706f7274206f66205a65746f706961311c301a06035504030c1349414341205a65746573436f6e666964656e73301e170d3231303932393033333034355a170d3232313130333033333034345a3050311a301806035504030c114453205a65746573436f6e666964656e7331253023060355040a0c1c5a65746f70696120436974792044657074206f662054726166666963310b3009060355040613025a453059301306072a8648ce3d020106082a8648ce3d030107034200047c5545e9a0b15f4ff3ce5015121e8ad3257c28d541c1cd0d604fc9d1e352ccc38adef5f7902d44b7a6fc1f99f06eedf7b0018fd9da716aec2f1ffac173356c7da3693067301f0603551d23041830168014bba2a53201700d3c97542ef42889556d15b7ac4630150603551d250101ff040b3009060728818c5d050102301d0603551d0e04160414ce5fd758a8e88563e625cf056bfe9f692f4296fd300e0603551d0f0101ff040403020780300a06082a8648ce3d0403020347003044022012b06a3813ffec5679f3b8cddb51eaa4b95b0cbb1786b09405e2000e9c46618c02202c1f778ad252285ed05d9b55469f1cb78d773671f30fe7ab815371942328317c59032ad818590325a667646f6354797065781865752e6575726f70612e65632e65756469772e7069642e316776657273696f6e63312e306c76616c6964697479496e666fa3667369676e6564c074323032332d30322d32325430363a32333a35365a6976616c696446726f6dc074323032332d30322d32325430363a32333a35365a6a76616c6964556e74696cc074323032342d30322d32325430303a30303a30305a6c76616c756544696765737473a2781865752e6575726f70612e65632e65756469772e7069642e31ac015820a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a025820cd372fb85148700fa88095e3492d3f9f5beb43e555e5ff26d95f5a6adc36f8e6035820e67e72111b363d80c8124d28193926000980e1211c7986cacbd26aacc5528d48045820f7d062d662826ed95869851db06bb539b402047baee53a00e0aa35bfbe98265d0658202a132dbfe4784627b86aa3807cd19cfeff487aab3dd7a60d0ab119a72e736936075820bdca9e8dbca354e824e67bfe1533fa4a238b9ea832f23fb4271ebeb3a5a8f7200858202c0eaec2f05b6c7fe7982683e3773b5d8d7a01e33d04dfcb162add8bd99bee9a095820bfe220d85657ccec3c67e7db1df747e9148a152334bb6d4b65b273279bcc36ec0a582018e38144f5044301d6a0b4ec9d5f98d4cd950e6ea2c29b849cbd457da29b6ad30b58203c71d2f0efa09d9e3fbbdffd29204f6b292c9f79570aef72dd86c91f7a3aa5c50c582065743d58d89d45e52044758f546034fd13a4f994bc270cdfa7844f74eb3f4b6e0d5820b4a8eb5d523bffa17b41bda12ddc7da32ae1e5f7ff3dcc394a35401f16919bbf781b65752e6575726f70612e65632e65756469772e7069642e69742e31a10e58209d6c11644651126c94acdaf0803e86d4c71d15d3b2712a14295416734efd514d6d6465766963654b6579496e666fa1696465766963654b6579a401022001215820ba01aea44eee1e338eb2f04e279dbd51b34655783ee185150838c9a7a7c4db7122582025ba0044439a3871a7b975a0994a85e79b705a9ac263b3fe899b0a93412ee8c96f646967657374416c676f726974686d675348412d32353658400813c28fd62f2602cbc14724e5865733c44a0fca589b55c085ec9d5c725d6cce25ba0044439a3871a7b975a0994a85e79b705a9ac263b3fe899b0a93412ee8c96a6e616d65537061636573a2781865752e6575726f70612e65632e65756469772e7069642e318cd818586da4686469676573744944016672616e646f6d5820156df9227ad341eaa61aabd301106fd21bdc18820e01dfc16bcf5fecc447111b71656c656d656e744964656e7469666965726b6578706972795f646174656c656c656d656e7456616c7565d903ec6a323032342d30322d3232d818586fa4686469676573744944026672616e646f6d5820a3a1f13f05544d03a5b50b5fdb78465808393bcf3b7953a345fe28f820c7be0d71656c656d656e744964656e7469666965726d69737375616e63655f646174656c656c656d656e7456616c7565d903ec6a323032332d30322d3232d8185866a4686469676573744944036672616e646f6d5820852591f90f2c9ded57a03632e2c1322ab52a082a431e71a4149a6830c8f1ad0c71656c656d656e744964656e7469666965726f69737375696e675f636f756e7472796c656c656d656e7456616c7565624954d818587ca4686469676573744944046672616e646f6d5820d1d587b3512acce15c4f6b20944ceb002a464e4a158389788563408873c3fce571656c656d656e744964656e7469666965727169737375696e675f617574686f726974796c656c656d656e7456616c7565764d696e69737465726f2064656c6c27496e7465726e6fd8185864a4686469676573744944056672616e646f6d582094fdd7609c0e73dc8589b5cab11e1d9058cf8bff8a336da5f81fcba055396a0f71656c656d656e744964656e7469666965726a676976656e5f6e616d656c656c656d656e7456616c7565654d6172696fd8185865a4686469676573744944066672616e646f6d5820660c0a7bf79e0e0261ca1547a4294fb808aa70738f424b13ab1b9440b566ae1371656c656d656e744964656e7469666965726b66616d696c795f6e616d656c656c656d656e7456616c756565526f737369d818586ba4686469676573744944076672616e646f6d5820315c53491286488fa07f5c2ce67135ef5c9959c3469c99a14e9b6dc924f9eba571656c656d656e744964656e746966696572696269727468646174656c656c656d656e7456616c7565d903ec6a313935362d30312d3132d818587da4686469676573744944086672616e646f6d5820764ef39c9d01f3aa6a87f441603cfe853fba3cee3bc2c168bcc9e96271d6e06371656c656d656e744964656e74696669657269756e697175655f69646c656c656d656e7456616c7565781e78787878787878782d7878782d787878782d787878787878787878787878d81858e8a4686469676573744944096672616e646f6d5820ad20b3b9c67aed8089ff33ecdc108781c3b49b81cd7a3f059d2fe236977037b271656c656d656e744964656e74696669657275766572696669636174696f6e2e65766964656e63656c656c656d656e7456616c756581a2647479706571656c656374726f6e69635f7265636f7264667265636f7264a264747970656c65696461732e69742e63696566736f75726365a3716f7267616e697a6174696f6e5f6e616d656c65696461732e69742e6369656f6f7267616e697a6174696f6e5f6964646d5f69746c636f756e7472795f636f6465626974d8185879a46864696765737449440a6672616e646f6d5820c12314b3695d1401505187e2113115e2f7b4a14b135dee320f5e6df81275f17671656c656d656e744964656e746966696572667374617475736c656c656d656e7456616c7565781d68747470733a2f2f70696470726f76696465722e69742f737461747573d8185877a46864696765737449440b6672616e646f6d5820a7b6a9027ed97f25df96dd0eab8093b264a3bd6a1d5b24228f3fc5b18ef835fb71656c656d656e744964656e746966696572781c766572696669636174696f6e2e74727573745f6672616d65776f726b6c656c656d656e7456616c7565656569646173d8185876a46864696765737449440c6672616e646f6d5820c76ce2ae4e9be1db07a5cb397b54ace3eccc786d3f85e4348b923dee059783db71656c656d656e744964656e746966696572781c766572696669636174696f6e2e6173737572616e63655f6c6576656c6c656c656d656e7456616c75656468696768781b65752e6575726f70612e65632e65756469772e7069642e69742e3181d8185877a46864696765737449440d6672616e646f6d5820717df3f583b1484366c33a1f869f2b5d201d466a8b589c79ab1a2d85e595432571656c656d656e744964656e7469666965726d7461785f69645f6e756d6265726c656c656d656e7456616c75657554494e49542d585858585858585858585858585858 + +The `Diagnostic Notation` of the above MDOC-CBOR is given below: + +.. code-block:: text + + { + "status": 0, + "version": "1.0", + "documents": [ + { + "docType": "eu.europa.ec.eudiw.pid.1", + "issuerSigned": { + "issuerAuth": [ + << {1: -7} >>, % protected header with the value alg:ES256 + { + 33: h'30820215308201BCA003020102021404AD30C…'% 33->X5chain:COSE X_509 + }, + << + 24(<< + { + "docType": "eu.europa.ec.eudiw.pid.1", + "version": "1.0", + "validityInfo": { + "signed": 0("2023-02-22T06:23:56Z"), + "validFrom": 0("2023-02-22T06:23:56Z"), + "validUntil": 0("2024-02-22T00:00:00Z") + }, + "valueDigests": { + "eu.europa.ec.eudiw.pid.1": { + 1:h'0F1571A97FFB799CC8FCDF2BA4FC2909929…', + 2: h'0CDFE077400432C055A2B69596C90…', + 3: h'E2382149255AE8E955AF9B8984395…', + 4: h'BBC77E6CCA981A3AD0C3E544EDF86…', + 6: h'BB6E6C68D1B4B4EC5A2AE9206F5t4…', + 7: h'F8A5966E6DAC9970E0334D8F75E25…', + 8: h'DEFDF1AA746718016EF1B94BFE5R6…' + }, + "eu.europa.ec.eudiw.pid.it.1": { + 9: h'AFC5A127BE44753172844B13491D8…', + 10: h'AFC5A127BE44753172844B13492H4…', + 11: h'DJA5A127BE44753172844B13492H4…', + 12: h'KDL5A127BE44753172844B13492H4…', + 13: h'F9EE4D36F67DBD75E23311AC1C29…' + } + }, + "deviceKeyInfo": { + "deviceKey": { + 1: 2, % kty:EC2 (Eliptic curves with x and y coordinate pairs) + -1: 1, % crv:p256 + -2: h'B820963964E53AF064686DD9218303494A…', % x-coordiantes + -3: h'0A6DA0AF437E2943F1836F31C678D89298E9…'% y-ccordiantes + } + }, + "digestAlgorithm": "SHA-256" + } + >>) + >>, + h'1AD0D6A7313EFDC38FCD765852FA2BD43DEBF48BF5A580D' + ], + "nameSpaces": { + "eu.europa.ec.eudiw.pid.1": [ + 24(<< + { + "digestID": 1, + "random": h'E0B70BCEFBD43686F345C9ED429343AA', + "elementIdentifier": "expiry_date", + "elementValue": 1004("2024-02-22") + } + >>), + 24(<< + { + "digestID": 2, + "random": h'AE84834F389EE69888665B90A3E4FCCE', + "elementIdentifier": "issue_date", + "elementValue": 1004("2023-02-22") + } + >>), + 24(<< + { + "digestID": 3, + "random": h'960CB15A2EA9B68E5233CE902807AA95', + "elementIdentifier": "issuing_country", + "elementValue": "IT" + } + >>), + 24(<< + { + "digestID": 4, + "random": h'9D3774BD5994CCFED248674B32A4F76A', + "elementIdentifier": "issuing_authority", + "elementValue": "Ministero dell'Interno" + } + >>), + 24(<< + { + "digestID": 5, + "random": h'EB12193DC66C6174530CDC29B274381F', + "elementIdentifier": "given_name", + "elementValue": "Mario" + } + >>)), + 24(<< + { + "digestID": 6, + "random": h'DB143143538F3C8D41DC024F9CB25C9D', + "elementIdentifier": "family_name", + "elementValue": "Rossi" + } + >>), + 24(<< + { + "digestID": 7, + "random": h'6059FF1CE27B4997B4ADE1DE7B01DC60', + "elementIdentifier": "birth_date", + "elementValue": 1004("1956-01-12")% the tag 1004 defines the value + is a full date + } + >>), + 24(<< + { + "digestID": 8, + "random": h'53C15C57B3B076E788795829190220B4', + "elementIdentifier": "unique_id", + "elementValue": "xxxxxxxx-xxx-xxxx-xxxxxxxxxxxx" + } + >>) + ], + "eu.europa.ec.eudiw.pid.it.1": [ + 24(<< + { + "digestID": 9, + "random": h'CAD1F6A38F603451F1FA653F81FF309D', + "elementIdentifier": "verification.evidence", + "elementValue": [ + { + "type": "electronic_record", + "record": { + "type": "eidas.it.cie", + "source": { + "organization_name": "eidas.it.cie", + "organization_id": "m_it", + "country_code": "it", + } + } + } + ] + } + >>), + 24(<< + { + "digestID": 10, + "random": h'CAD1F6A38F603451F1FA653F81FF309D, + "elementIdentifier": "status", + "elementValue": "https://pidprovider.example.it/status" + } + >>), + 24(<< + { + "digestID": 11, + "random": h'564E3C65D46D06FEDEB0E7293A86GF', + "elementIdentifier": "verification.trust_framework", + "elementValue": "eidas" + } + >>), + 24(<< + { + "digestID": 12, + "random": h'D884E5D5EF4CFC93FDB1E4EE8F3923', + "elementIdentifier": "verification.assurance_level", + "elementValue": "high" + } + >>) + 24(<< + { + "digestID": 13, + "random": h'11aa7273a2d2daa973f5951f0c34c2fbae', + "elementIdentifier": "tax_id_number", + "elementValue": "TINIT-XXXXXXXXXXXXXXX" + } + >>) + ] + } + } + } + ] + } + + + diff --git a/refs/pull/212/merge/en/_sources/pid-eaa-issuance.rst.txt b/refs/pull/212/merge/en/_sources/pid-eaa-issuance.rst.txt new file mode 100644 index 000000000..719b18db5 --- /dev/null +++ b/refs/pull/212/merge/en/_sources/pid-eaa-issuance.rst.txt @@ -0,0 +1,1107 @@ +.. include:: ../common/common_definitions.rst + +.. _pid_eaa_issuance.rst: + +PID/(Q)EAA Issuance ++++++++++++++++++++ + +This section describes the PID and (Q)EAAs issuance flow with an high level of security. +The relevant entities and interfaces involved in the issuance flow are: + + - *Wallet Provider*: The entity responsible for releasing an EUDI Wallet Solution. The Wallet Provider issues the Wallet Attestations to its Wallet Instances through an Attestation Service. The Wallet Attestation certifies the genuinity and authenticity of the Wallet Instance and its compliance with the security and privacy requirements. + - *Wallet Solution*: Entire product and service owned by a Wallet Provider, offered to all the Users and certified as EUDI-compliant by a Conformity Assessment Body (CAB). + - *Wallet Instance*: Instance of a Wallet Solution, installed on the User device. The Wallet Instance provides graphical interfaces for User interaction with Relying Parties, PID, (Q)EAA Providers and the Wallet Provider. + - *PID Provider*: The entity that issues the eIDAS Person Identification Data (PID). It is composed of: + + - OpenID4VCI Component: based on the "OpenID for Verifiable Credential Issuance" specification ` [OIDC4VCI. Draft 13] `_ to release the PID. + - National eID Relying Party: The component to authenticate the User with the national Digital Identity Providers, based on OpenID Connect Core 1.0 or SAML2. + - National Identity Provider: It represents preexisting identity systems based on SAML2 or OpenID Connect Core 1.0, already in production in each Member State (eg: the Italian SPID and CIE id schemes notified eIDAS with *LoA* **High**, see `SPID/CIE OpenID Connect Specifications `_). + + - *(Q)EAA Provider*: It represents the Issuer of (Q)EAAs. It is composed of: + + - OpenID4VCI Component: based on the "OpenID for Verifiable Credential Issuance" specification to release (Q)EAAs. + - Relying Party: Component to authenticate the User with the PID. The (Q)EAA Provider acts as a Verifier by sending a presentation request to the Wallet Instance, according to [`OpenID4VP`_]. The Wallet Instance MUST have a valid PID, obtained in a previous time, to get authenticated with the (Q)EAA Provider. + +High-Level PID flow +------------------- + +The :numref:`fig_High-Level-Flow-ITWallet-PID-Issuance` shows a general architecture and highlights the main operations involved in the issuance of a PID. + +.. _fig_High-Level-Flow-ITWallet-PID-Issuance: +.. figure:: ../../images/High-Level-Flow-ITWallet-PID-Issuance.svg + :figwidth: 100% + :align: center + + PID Issuance - General architecture and high level flow. + +Below the description of the steps represented in the previous picture: + + 0. **Wallet Instance Setup**: the first time the Wallet Instance is started a preliminary setup phase is carried out. It consists of the release of the Wallet Attestation issued by Wallet Attestation Service asserting the genuineness and the compliance of the Wallet Instance with the shared trust framework. The Wallet Attestation binds the public key provided by the Wallet Instance, related to one of the private keys generated by the Wallet Instance. + 1. **PID/(Q)EAA Provider Discovery**: the Wallet Instance discovers the trusted Digital Credential Issuers using the Federation API (e.g.: using the Subordinate Listing Endpoint of the Trust Anchor and its Intermediates), inspecting the Credential Issuer metadata and Trust Marks for filtering the PID Provider. + 2. **PID Provider Metadata**: the Wallet Instance establishes the trust to the PID Provider according to the Trust Model and obtains the Metadata that discloses the formats of the PID, the algorithms supported, and any other parameter required for interoperability needs. + 3. **PID Request**: using the Authorization Code Flow defined in `[OIDC4VCI. Draft 13] `_ the Wallet Instance requests the PID to the PID Provider. + 4. **User Authentication**: the PID Provider authenticates the User with LoA High, acting as an Identity and Access Management Proxy to the National eID system. + 5. **PID Issuance**: the User is authenticated with LoA High and the PID Provider releases a PID bound to the key material held by the requesting Wallet Instance. + +In the following sections the steps from 1 to 5 are further expanded into more technical details. + +High-Level (Q)EAA flow +---------------------- + +The :numref:`fig_High-Level-Flow-ITWallet-QEAA-Issuance` shows a general architecture and highlights the main operations involved in the issuance of a (Q)EAA, following the assumptions listed below: + + - the User has a valid PID stored in their own Wallet Instance; + - the (Q)EAA requires a high security implementation profile. + +.. _fig_High-Level-Flow-ITWallet-QEAA-Issuance: +.. figure:: ../../images/High-Level-Flow-ITWallet-QEAA-Issuance.svg + :figwidth: 70% + :align: center + + (Q)EAA Issuance - General architecture and high level flow + +Below the description of the most relevant operations involved in the (Q)EAA issuance: + + 1. **Discovery of the trusted (Q)EAA Provider**: the Wallet Instance obtains the list of the trusted (Q)EAA Provider using the Federation API (e.g.: using the Subordinate Listing Endpoint of the Trust Anchor and its Intermediates), then inspects the metadata and Trust Mark looking for the Digital Credential capabilities of each (Q)EAA Provider. + 2. **(Q)EAA Provider Metadata**: the Wallet Instance establishes the trust to the (Q)EAA Provider according to the Trust Model, obtaining the Metadata that discloses the formats of the (Q)EAA, the algorithms supported, and any other parameter required for interoperability needs. + 3. **(Q)EAA Request**: using the Authorization Code Flow , defined in `[OIDC4VCI. Draft 13] `_, the Wallet Instance requests a (Q)EAA to the (Q)EAA Provider. + 4. **User Authentication**: the (Q)EAA Provider, acting as a Verifier (Relying Party), authenticates the User evaluating the presentation of the PID. + 5. **(Q)EAA Issuance**: the User is authenticated with a valid PID and the (Q)EAA Provider releases a (Q)EAA bound to the key material held by the requesting Wallet Instance. + + +Detailed Flow +------------- + +The PID/(Q)EAA Issuance phase uses the **Authorization Code Flow** with the following specifications: + +* **Pushed Authorization Requests** (PAR) [:rfc:`9126`]; +* **PKCE** (Proof Key for Code Exchange, :rfc:`7636`) as recommended in `[OIDC4VCI. Draft 13. Section 3.4] `_. + +In this section a *Wallet Initiated Flow* is outlined, where the User receives the PID/(Q)EAA directly in response to the Credential Request. + +.. warning:: + + All the non-normative examples are referred to the PID Provider issuance flow. + +.. _fig_Low-Level-Flow-ITWallet-PID-QEAA-Issuance: + +.. figure:: ../../images/Low-Level-Flow-ITWallet-PID-QEAA-Issuance.svg + :figwidth: 100% + :align: center + :target: https://www.plantuml.com/plantuml/svg/bLJVRzis47xdNt587vO0DlPke4MTn6kC5OEHfSXB086HplOj4gcHnwZUm_xs7KLPfkQqQ8C0KSZxyNtVVSUFdhNZqDHA1xOcDC_eb6hbZ4fgjM6u-EBHNO3s49Hwjb_JmIyUV2DHxTuQl81tdsctv-iwu3JtsjbkJDVJkqTTryYmDWB1bDZ7T0fD1TBbVnWswrlOEFjArL2CbFnqCFy0OG7scJKPEDZWG29LWBbST0iue5VA6Si8zXKTTF3kyMxzi5931kyHQl8CTjj_FxZW6Il8s_a8gQyX3USVf5rfpPPSqsTuhB5aiYQMoDEK2W92CDYNAOGPYLhhJtSFd-vNgp_KpHxBbqaca0SXFuBw3ULGzpsqgOvaYJqqoBhIh7E449c3W7Ie6M7p-yrA05S8qfosXAulyhXUpZTsCyIJn6-Mzt2FVmVq39TF1i2XRwtnMF2XnLayAMj2mmLLwJyfMfJxE4IpmpUE2e6tjodOfSfv6UqzkiXgsY2_UIym_nsWFfaho7LyIyNag1yHSaZmj3EQWyCXv5XXoOoUJvf7iLzrJHNn0JAr5IMdZVeboU1ou5i4HpF0hoqvz0MPgsJQw5gzW6KGVHpza_gCufzaXgpCbGgwpwIVJbGJtMRXk0J1HpT8BScYCXNhYFU0wzlbdt0dAzspBoCdm-Uy1T4Pc562Q8OPH1Nb3ta_4kX-9Ybpz0vD71_2hTW1Nl3mpRlMMRlDVGvRwwOxnlO53GYZrf9GonRXGMv6KPCUMT7ByqNOEMquCx6jicquRjstdVy-EBCWvEr2lAeRlx1n98iKEnzZvp5syLV7y-FDoQDI_BkxCwnWHGxBtXDFqOcKn4kCyo7eiaJlYrwYML8gqSkSF8EoCDQKE7uKcStFtw6adlosrdkf7iT-EMJsuTFuNFApsKb85Ishwt60sVnkJhVdGyofzGR9HtkgMrIu9KEzjh5_etcMegxUUeEkFtzPgNlSaUUuKNKTtv8CvjnXBQGgK6HIDIdSyqhsIBltgyDNcpuXVsI6EUNCic4DwB9kFpmQ4VNqgaKnefs2XpA-ZLcSP-joEkgZW0jD_Hy0 + + PID/(Q)EAA Issuance - Detailed flow + + +**Steps 1-4 (Discovery):** The User selects the PID/(Q)EAA Provider using the Wallet Instance, the Metadata for the selected PID/(Q)EAA Provider are processed by the Wallet Instance. + +.. note:: + + **Federation Check:** The Wallet Instance needs to check if the PID/(Q)EAA Provider is part of the Federation, obtaining its protocol specific Metadata. A non-normative example of a response from the endpoint **.well-known/openid-federation** with the **Entity Configuration** and the **Metadata** of the PID/(Q)EAA Provider is represented within the section `Entity Configuration Credential Issuer`_. + +**Steps 5-6 (PAR Request):** The Wallet Instance: + + * creates a fresh PKCE code verifier, Wallet Attestation Proof of Possession, and ``state`` parameter for the *Pushed Authorization Request*. + * provides to the PID/(Q)EAA Provider PAR endpoint the parameters previously listed above, using the ``request`` parameter (hereafter Request Object) according to :rfc:`9126` Section 3 to prevent Request URI swapping attack. + * MUST create the ``code_verifier`` with enough entropy random string using the unreserved characters with a minimum length of 43 characters and a maximum length of 128 characters, making it impractical for an attacker to guess its value. The value MUST be generated following the recommendation in Section 4.1 of :rfc:`7636`. + * signs this request using the private key that is created during the setup phase to obtain the Wallet Attestation. The related public key that is attested by the Wallet Provider is provided within the Wallet Attestation ``cnf`` claim. + * MUST create the value of the ``client_assertion`` parameter according to OAuth 2.0 Attestation-based Client Authentication [`oauth-attestation-draft `_], since in this flow the Pushed Authorization Endpoint is a protected endpoint. The ``client_assertion`` value MUST NOT contain more or less than precisely two JWTs separated with the ``~`` character. The first JWT MUST be the Wallet Attestation JWT and the second JWT MUST be the Wallet Attestation Proof of Possession. + * specifies the types of the requested credentials using the ``authorization_details`` [RAR :rfc:`9396`] parameter. + +The PID/(Q)EAA Provider performs the following checks upon the receipt of the PAR request: + + 1. It MUST validate the signature of the Request Object using the algorithm specified in the ``alg`` header parameter (:rfc:`9126`, :rfc:`9101`) and the public key retrieved from the Wallet Attestation (``cnf.jwk``) referenced in the Request Object, using the ``kid`` JWS header parameter. + 2. It MUST check that the used algorithm for signing the request in the ``alg`` header is one of the listed within the Section `Cryptographic Algorithms `_. + 3. It MUST check that the ``client_id`` in the request body of the PAR request matches the ``client_id`` claim included in the Request Object. + 4. It MUST check that the ``iss`` claim in the Request Object matches the ``client_id`` claim in the Request Object (:rfc:`9126`, :rfc:`9101`). + 5. It MUST check that the ``aud`` claim in the Request Object is equal to the PID/(Q)EAA Provider authorization endpoint uri (:rfc:`9126`, :rfc:`9101`). + 6. It MUST reject the PAR request, if it contains the ``request_uri`` parameter (:rfc:`9126`). + 7. It MUST check that the Request Object contains all the mandatory parameters which values are validated according to :ref:`Table of the HTTP parameters ` [derived from :rfc:`9126`]. + 8. It MUST check that the Request Object is not expired, checking the ``exp`` claim (:rfc:`9126`). + 9. It MUST check that the Request Object was issued in a previous time than the value exposed in the ``iat`` claim. It SHOULD reject the request if the ``iat`` claim is far from the current time (:rfc:`9126`) of more than `5` minutes. + 10. It MUST check that the ``jti`` claim in the Request Object has not been used before by the Wallet Instance identified by the ``client_id``. This allows the PID/(Q)EAA Provider to mitigate replay attacks (:rfc:`7519`). + 11. It MUST validate the ``client_assertion`` parameter based on Sections 4.1 and 4.2 of [`oauth-attestation-draft `_]. + +Below a non-normative example of the PAR. + +.. code-block:: http + + POST /as/par HTTP/1.1 + Host: pid-provider.example.org + Content-Type: application/x-www-form-urlencoded + + response_type=code + &client_id=$thumprint-of-the-jwk-in-the-cnf-wallet-attestation$ + &code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM + &code_challenge_method=S256 + &request=eyJhbGciOiJSUzI1NiIsImtpZCI6ImsyYmRjIn0.ew0KIC Jpc3MiOiAiczZCaGRSa3F0MyIsDQogImF1ZCI6ICJodHRwczovL3NlcnZlci5leGFtcGxlLmNvbSIsDQo gInJlc3BvbnNlX3R5cGUiOiAiY29kZSBpZF90b2tlbiIsDQogImNsaWVudF9pZCI6ICJzNkJoZFJrcXQz IiwNCiAicmVkaXJlY3RfdXJpIjogImh0dHBzOi8vY2xpZW50LmV4YW1... + &client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation + &client_assertion=$WIA~WIA-PoP + +Below an non-normative example of the Wallet Attestation Proof of Possession without encoding and signature applied: + +.. code-block:: + + { + "alg": "ES256", + "kid": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c", + "typ": "jwt-client-attestation-pop", + } + . + { + "iss": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c", + "aud": "https://pid-provider.example.org/par-endpoint", + "jti": "ad25868c-8377-479b-8094-46fb1e797625", + "iat": 1686645115, + "exp": 1686652315 + } + +Below an non-normative example of the signed Request Object without encoding and signature applied: + +.. code-block:: + + { + "alg": "ES256", + "kid": "FifYx03bnosD8m6gYQIfNHNP9cM_Sam9Tc5nLloIIrc", + } + . + { + "iss":"$thumprint-of-the-jwk-in-the-cnf-wallet-attestation$", + "aud":"https://pid-provider.example.org", + "exp":1672422065, + "iat": 1672418465, + "jti":"ac80df576e7109686717bf50b869e882", + "response_type":"code", + "client_id":"$thumprint-of-the-jwk-in-the-cnf-wallet-attestation$", + "state":"fyZiOL9Lf2CeKuNT2JzxiLRDink0uPcd", + "code_challenge":"E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM", + "code_challenge_method":"S256", + "authorization_details":[ + { + "type": "openid_credential", + "credential_configuration_id": "PersonIdentificationData" + } + ], + "redirect_uri":"eudiw://start.wallet.example.org", + } + + +.. note:: + + **Federation Check:** The PID/(Q)EAA Provider MUST check that the Wallet Provider is part of the federation. + + +.. note:: + The PID/(Q)EAA Provider MUST validate the signature of the the Wallet Attestation and that it is not expired. + + +**Step 7 (PAR Response):** The PID/(Q)EAA Provider provides a one-time use ``request_uri`` value. The issued ``request_uri`` value must be bound to the client identifier (``client_id``) that was provided in the Request Object. + + +.. note:: + The entropy of the ``request_uri`` MUST be sufficiently large. The adequate shortness of the validity and the entropy of the ``request_uri`` depends on the risk calculation based on the value of the resource being protected. The validity time SHOULD be less than a minute, and the ``request_uri`` MUST include a cryptographic random value of 128 bits or more (:rfc:`9101`). The entire ``request_uri`` SHOULD NOT exceed 512 ASCII characters due to the following two main reasons (:rfc:`9101`): + + 1. Many phones on the market still do not accept large payloads. The restriction is typically either 512 or 1024 ASCII characters. + 2. On a slow connection such as a 2G mobile connection, a large URL would cause a slow response; therefore, the use of such is not advisable from the user-experience point of view. + +The PID/(Q)EAA Provider returns the issued ``request_uri`` to the Wallet Instance. A non-normative example of the response is shown below. + +.. code-block:: http + + HTTP/1.1 201 Created + Cache-Control: no-cache, no-store + Content-Type: application/json + + { + "request_uri":"urn:ietf:params:oauth:request_uri:bwc4JK-ESC0w8acc191e-Y1LTC2", + "expires_in": 60 + } + + +**Steps 8-9 (Authorization Request):** The Wallet Instance sends an authorization request to the PID/(Q)EAA Provider Authorization Endpoint. Since parts of this Authorization Request content, e.g., the ``code_challenge`` parameter value, are unique to a particular Authorization Request, the Wallet Instance MUST only use a ``request_uri`` value once (:rfc:`9126`); The PID/(Q)EAA Provider performs the following checks upon the receipt of the Authorization Request: + + 1. It MUST treat ``request_uri`` values as one-time use and MUST reject an expired request. However, it MAY allow for duplicate requests due to a user reloading/refreshing their user-agent (derived from :rfc:`9126`). + 2. It MUST identify the request as a result of the submitted PAR (derived from :rfc:`9126`). + 3. It MUST reject all the Authorization Requests that do not contain the ``request_uri`` parameter as the PAR is the only way to pass the Authorization Request from the Wallet Instance (derived from :rfc:`9126`). + + +.. code-block:: http + + GET /authorize?client_id=$thumprint-of-the-jwk-in-the-cnf-wallet-attestation$&request_uri=urn%3Aietf%3Aparams%3Aoauth%3Arequest_uri%3Abwc4JK-ESC0w8acc191e-Y1LTC2 HTTP/1.1 + Host: pid-provider.example.org + + +.. note:: + + **User Authentication and Consent:** The PID Provider performs the User authentication based on the requirements of eIDAS LoA High by means of national notified eIDAS scheme and requires the User consent for the PID issuance. + The (Q)EAA Provider performs the User authentication requesting a valid PID to the Wallet Instance. The (Q)EAA Provider MUST use [`OpenID4VP`_] to dynamically request the presentation of the PID. From a protocol perspective, the (Q)EAA Provider acts as a Relying Party, providing the presentation request to the Wallet Instance. The Wallet Instance MUST have a valid PID obtained prior to start the transaction with the (Q)EAA Provider. + + +**Steps 10-11 (Authorization Response):** The PID/(Q)EAA Provider sends an authorization ``code`` together with ``state`` and ``iss`` parameters to the Wallet Instance. The Wallet Instance performs the following checks on the Authorization Response: + + 1. It MUST check the Authorization Response contains all the defined parameters according to :ref:`Table of the HTTP Response parameters `. + 2. It MUST check the returned value by the PID/(Q)EAA Provider for ``state`` parameter is equal to the value sent by Wallet Instance in the Request Object (:rfc:`6749`). + 3. It MUST check that the URL of PID/(Q)EAA Provider in ``iss`` parameter is equal to the URL identifier of intended PID/(Q)EAA Provider that the Wallet Instance start the communication with (:rfc:`9027`). + +.. note:: + + The Wallet Instance redirect URI is a universal or app link registered with the local operating system, so this latter will resolve it and pass the response to the Wallet Instance. + +.. code-block:: http + + HTTP/1.1 302 Found + Location: https://start.wallet.example.org?code=SplxlOBeZQQYbYS6WxSbIA&state=fyZiOL9Lf2CeKuNT2JzxiLRDink0uPcd&iss=https%3A%2F%2Fpid-provider.example.org + +**Steps 12-13 (DPoP Proof for Token Endpoint)**: The Wallet Instance MUST create a new key pair for the DPoP and a fresh DPoP Proof JWT following the instruction provided in Section 4 of (:rfc:`9449`) for the token request to the PID/(Q)EAA Provider. The DPoP Proof JWT is signed using the private key for DPoP created by Wallet Instance for this scope. DPoP binds the Access Token to a certain Wallet Instance (:rfc:`9449`) and mitigates the misuse of leaked or stolen Access Tokens at the Credential Endpoint. + +**Step 14 (Token Request):** The Wallet Instance sends a token request to the PID/(Q)EAA Provider Token Endpoint with a *DPoP Proof JWT* and the parameters: ``code``, ``code_verifier``, and OAuth 2.0 Attestation based Client Authentication (``client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation`` and ``client_assertion=WIA~WIA-PoP``). +The ``client_assertion`` is signed using the private key that is created during the setup phase to obtain the Wallet Attestation. The related public key that is attested by the Wallet Provider is provided within the Wallet Attestation (``cnf`` claim). The PID/(Q)EAA Provider performs the following checks on the Token Request: + + 1. It MUST ensure that the Authorization ``code`` is issued to the authenticated Wallet Instance (:rfc:`6749`) and was not replied. + 2. It MUST ensure the Authorization ``code`` is valid and has not been previously used (:rfc:`6749`). + 3. It MUST ensure the ``redirect_uri`` matches the value included in the previous Request Object `OpenID.Core#TokenRequest `_. + 4. It MUST validate the DPoP Proof JWT, according to (:rfc:`9449`) Section 4.3. + +.. code-block:: http + + POST /token HTTP/1.1 + Host: pid-provider.example.org + Content-Type: application/x-www-form-urlencoded + DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik + VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR + nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R1JE + QSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiItQndDM0VTYzZhY2MybFRjIiwiaHRtIj + oiUE9TVCIsImh0dSI6Imh0dHBzOi8vc2VydmVyLmV4YW1wbGUuY29tL3Rva2VuIiwia + WF0IjoxNTYyMjYyNjE2fQ.2-GxA6T8lP4vfrg8v-FdWP0A0zdrj8igiMLvqRMUvwnQg + 4PtFLbdLXiOSsX0x7NVY-FNyJK70nfbV37xRZT3Lg + + grant_type=authorization_code + &code=SplxlOBeZQQYbYS6WxSbIA + &code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk + &redirect_uri=https://start.wallet.example.org/cb + &client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation + &client_assertion=$WIA~WIA-PoP + +**Step 15 (Token Response):** The PID/(Q)EAA Provider validates the request, if successful an *Access Token* (bound to the DPoP key) and a fresh `c_nonce` are provided by the Issuer to the Wallet Instance. The parameter `c_nonce` is a string value, which MUST be unpredictable and is used later by the Wallet Instance in Step 18 to create the proof of possession of the key (*proof* claim) and it is the primary countermeasure against key proof replay attack. Note that, the received `c_nonce` value can be used to create the proof as long as the Issuer provides the Wallet Instance with a new `c_nonce` value. + +.. code-block:: + + HTTP/1.1 200 OK + Content-Type: application/json + Cache-Control: no-store + + { + "access_token": "Kz~8mXK1EalYznwH-LC-1fBAo.4Ljp~zsPE_NeO.gxU ...", + "token_type": "DPoP", + "expires_in": 2677, + "c_nonce": "tZign[...]snFbp", + "c_nonce_expires_in": 86400, + "authorization_details": [ + { + "type": "openid_credential", + "credential_configuration_id: "PersonIdentificationData" + } + } + ] + } + + +**Steps 16-17 (DPoP Proof for Credential Endpoint):** The Wallet Instance for requesting the Digital Credential creates a proof of possession with ``c_nonce`` obtained in **Step 15** and using the private key used for the DPoP, signing a DPoP Proof JWT according to (:rfc:`9449`) Section 4. The ``jwk`` value in the ``proof`` parameter MUST be equal to the public key referenced in the DPoP. + +**Step 18 (Credential Request):** The Wallet Instance sends a request for the Digital Credential to the PID/(Q)EAA Credential endpoint. This request MUST include the Access Token, DPoP Proof JWT, credential type, proof (which demonstrates possession of the key), and format parameters. The proof parameter MUST be an object that contains evidence of possession of the cryptographic key material to which the issued PID/(Q)EAA Digital Credential will be bound. To verify the proof, the PID/(Q)EAA Provider conducts the following checks at the Credential endpoint: + + 1. the JWT proof MUST include all required claims as specified in the table of Section :ref:`Token Request `; + 2. The key proof MUST be explicitly typed using header parameters as defined for the respective proof type; + 3. The header parameter alg MUST indicate a registered asymmetric digital signature algorithm, and MUST NOT be set to `none`; + 4. The signature on the key proof MUST be verified using the public key specified in the header parameter. + 5. The header parameter MUST NOT contain a private key. + 6. If a `c_nonce` value was previously provided by the server, the nonce claim in the JWT MUST match this `c_nonce` value. Furthermore, the creation time of the JWT, as indicated by the `iat` claim or a server-managed timestamp via the nonce claim, MUST be within an acceptable window of time as determined by the server. + + +.. note:: + + **PID/(Q)EAA Credential Schema and Status registration:** The PID/(Q)EAA Provider MUST register all the issued Credentials for their later revocation, if needed. + +.. code-block:: + + POST /credential HTTP/1.1 + Host: pid-provider.example.org + Content-Type: application/json + Authorization: DPoP Kz~8mXK1EalYznwH-LC-1fBAo.4Ljp~zsPE_NeO.gxU + DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik + VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR + nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R + 1JEQSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiJlMWozVl9iS2ljOC1MQUVCIiwiaHRtIj + oiR0VUIiwiaHR1IjoiaHR0cHM6Ly9yZXNvdXJjZS5leGFtcGxlLm9yZy9wcm90ZWN0Z + WRyZXNvdXJjZSIsImlhdCI6MTU2MjI2MjYxOCwiYXRoIjoiZlVIeU8ycjJaM0RaNTNF + c05yV0JiMHhXWG9hTnk1OUlpS0NBcWtzbVFFbyJ9.2oW9RP35yRqzhrtNP86L-Ey71E + OptxRimPPToA1plemAgR6pxHF8y6-yqyVnmcw6Fy1dqd-jfxSYoMxhAJpLjA + { + "format": "vc+sd-jwt" + "credential_definition":{ + "type": ["PersonIdentificationData"] + }, + "proof": { + "proof_type": "jwt", + "jwt": "eyJraWQiOiJkaWQ6ZXhhbXBsZTplYm" + } + } + + +Where a non-normative example of the decoded content of the ``jwt`` parameter is represented below, +without encoding and signature. The JWS header: + +.. code-block:: JSON + + { + "alg": "ES256", + "typ": "openid4vci-proof+jwt", + "jwk": { + "kty": "EC", + "x": "l8tFrhx-34tV3hRICRDY9zCkDlpBhF42UQUfWVAWBFs", + "y": "9VE4jf_Ok_o64zbTTlcuNJajHmt6v9TDVrU0CdvGRDA", + "crv": "P-256" + } + + } + +And the JWS payload: + +.. code-block:: JSON + + { + "iss": "0b434530-e151-4c40-98b7-74c75a5ef760", + "aud": "https://pid-provider.example.org/credential", + "iat": 1504699136, + "nonce": "tZign...snFbp" + } + + +**Steps 19-21 (Credential Response):** The PID/(Q)EAA Provider MUST validate the *DPoP JWT Proof* based on the steps defined in Section 4.3 of (:rfc:`9449`) and whether the *Access Token* is valid and suitable for the requested PID/(Q)EAA. It also MUST validate the proof of possession for the key material the new credential SHALL be bound to, according to `OPENID4VCI`_ Section 7.2.2. If all checks succeed, the PID/(Q)EAA Provider creates a new Credential bound to the key material and provide it to the Wallet Instance. The Wallet Instance MUST perform the following checks before proceeding with the secure storage of the PID/(Q)EAA: + + 1. It MUST check that the PID Credential Response contains all the mandatory parameters and values are validated according to :ref:`Table of the credential response parameters `. + 2. It MUST check the PID integrity by verifying the signature using the algorithm specified in the ``alg`` header parameter of SD-JWT (:ref:`PID/(Q)EAA Data Model `) and the public key that is identified using using the ``kid`` header of the SD-JWT. + 3. It MUST check that the received PID (in credential claim) matches the schema defined in :ref:`PID/(Q)EAA Data Model `. + 4. It MUST process and verify the PID in SD-JWT VC format (according to `SD.JWT#Verification `_ Section 6.) or MDOC CBOR format. + 5. It MUST verify the Trust Chain in the header of SD-JWT VC to verify that the PID Provider is trusted. + +If the checks defined above are successful the Wallet Instance proceeds with the secure storage of the PID/(Q)EAA. + +.. code-block:: http + + HTTP/1.1 200 OK + Content-Type: application/json + Cache-Control: no-store + Pragma: no-cache + + { + "format": "vc+sd-jwt" + "credential" : "LUpixVCWJk0eOt4CXQe1NXK[...]WZwmhmn9OQp6YxX0a2L", + "c_nonce": "fGFF7[...]UkhLa", + "c_nonce_expires_in": 86400 + } + +Pushed Authorization Request Endpoint +------------------------------------- + +Pushed Authorization Request (PAR) Request +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The requests to the PID/(Q)EAA authorization endpoint MUST use the HTTP POST method with the parameters in the message body encoded in ``application/x-www-form-urlencoded`` format. The Pushed Authorization Endpoint is protected with OAuth 2.0 Attestation-based Client Authentication [`oauth-attestation-draft `_] and the following parameters MUST be provided: + +.. _table_http_request_claim: +.. list-table:: PAR http request parameters + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **response_type** + - MUST be set to ``code``. + - :rfc:`6749` + * - **client_id** + - MUST be set to the thumbprint of the ``jwk`` value in the ``cnf`` parameter inside the Wallet Attestation. + - :rfc:`6749` + * - **code_challenge** + - A challenge derived from the **code verifier** that is sent in the authorization request. + - :rfc:`7636#section-4.2`. + * - **code_challenge_method** + - A method that was used to derive **code challenge**. It MUST be set to ``S256``. + - :rfc:`7636#section-4.3`. + * - **request** + - It MUST be a signed JWT. The private key corresponding to the public one in the ``cnf`` parameter inside the Wallet Attestation MUST be used for signing the Request Object. + - `OpenID Connect Core. Section 6 `_ + * - **client_assertion_type** + - It MUST be set to ``urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation``. + - `oauth-attestation-draft `_. + * - **client_assertion** + - It MUST be set to a value containing the Wallet Attestation JWT and the Proof of Possession, separated with the ``~`` character. + - `oauth-attestation-draft `_. + +The JWT Request Object has the following JOSE header parameters: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **JOSE header** + - **Description** + - **Reference** + * - **alg** + - A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms listed in the Section `Cryptographic Algorithms `_ and MUST NOT be set to ``none`` or any symmetric algorithm (MAC) identifier. + - :rfc:`7516#section-4.1.1`. + * - **kid** + - Unique identifier of the ``jwk`` inside the ``cnf`` claim of Wallet Attestation as base64url-encoded JWK Thumbprint value. + - :rfc:`7638#section_3`. + +.. note:: + The parameter **typ**, if omitted, assumes the implicit value **JWT**. + + +The JWT payload is given by the following parameters: + +.. _table_jwt_request: +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **iss** + - It MUST be set to the ``client_id``. + - :rfc:`9126` and :rfc:`7519`. + * - **aud** + - It MUST be set to the identifier of the PID/(Q)EAA Provider. + - :rfc:`9126` and :rfc:`7519`. + * - **exp** + - UNIX Timestamp with the expiry time of the JWT. + - :rfc:`9126` and :rfc:`7519`. + * - **iat** + - UNIX Timestamp with the time of JWT issuance. + - :rfc:`9126` and :rfc:`7519`. + * - **response_type** + - It MUST be set as in the :ref:`Table of the HTTP parameters `. + - See :ref:`Table of the HTTP parameters `. + * - **client_id** + - It MUST be set as in the :ref:`Table of the HTTP parameters `. + - See :ref:`Table of the HTTP parameters `. + * - **state** + - Unique session identifier at the client side. This value will be returned to the client in the response, at the end of the authentication. It MUST be a random string composed by alphanumeric characters and with a minimum length of 32 digits. + - See `OpenID.Core#AuthRequest `_. + * - **code_challenge** + - It MUST be set as in the :ref:`Table of the HTTP parameters `. + - See :ref:`Table of the HTTP parameters `. + * - **code_challenge_method** + - It MUST be set as in the :ref:`Table of the HTTP parameters `. + - See :ref:`Table of the HTTP parameters `. + * - **authorization_details** + - Array of JSON Objects. Each JSON Object MUST include the following claims: + + - **type**: it MUST be set to ``openid_credential``, + - **credential_configuration_id**: JSON String. String specifying a unique identifier of the Credential being described in the `credential_configurations_supported` map in the Credential Issuer Metadata. For example, in the case of the PID, it MUST be set to ``PersonIdentificationData``. + - See [RAR :rfc:`9396`] and `[OIDC4VCI. Draft 13] `_. + * - **redirect_uri** + - Redirection URI to which the response is intended to be sent. It MUST be an universal or app link registered with the local operating system, so this latter will provide the response to the Wallet Instance. + - See `OpenID.Core#AuthRequest `_. + * - **client_assertion_type** + - It MUST be set as in the :ref:`Table of the HTTP parameters `. + - See :ref:`Table of the HTTP parameters `. + * - **client_assertion** + - It MUST be set as in the :ref:`Table of the HTTP parameters `. + - See :ref:`Table of the HTTP parameters `. + * - **jti** + - Unique identifier of the JWT that, together with the value contained in the ``iss`` claim, prevents the reuse of the JWT (replay attack). Since the `jti` value alone is not collision resistant, it MUST be identified uniquely together with its issuer. + - [:rfc:`7519`]. + +The JOSE header of the Wallet Attestation proof of possession MUST contain: + +.. _table_jwt_pop: +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **JOSE header** + - **Description** + - **Reference** + * - **alg** + - A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms listed in the Section `Cryptographic Algorithms `_ and MUST NOT be set to ``none`` or any symmetric algorithm (MAC) identifier. + - :rfc:`7516#section-4.1.1`. + * - **kid** + - Unique identifier of the ``jwk`` inside the ``cnf`` claim of Wallet Attestation as base64url-encoded JWK Thumbprint value. + - :rfc:`7638#section_3`. + * - **typ** + - It MUST be set to ``jwt-client-attestation-pop`` + - Currently under discussion in [`oauth-attestation-draft `_]. + +The body of the Wallet Attestation proof of possession JWT MUST contain: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **iss** + - Thumbprint of the JWK in the ``cnf`` parameter. + - :rfc:`9126` and :rfc:`7519`. + * - **aud** + - It MUST be set to the identifier of the PID/(Q)EAA Provider. + - :rfc:`9126` and :rfc:`7519`. + * - **exp** + - UNIX Timestamp with the expiry time of the JWT. + - :rfc:`9126` and :rfc:`7519`. + * - **iat** + - UNIX Timestamp with the time of JWT issuance. + - :rfc:`9126` and :rfc:`7519`. + * - **jti** + - Unique identifier for the DPoP proof JWT. The value SHOULD be set using a *UUID v4* value according to [:rfc:`4122`]. + - [:rfc:`7519`. Section 4.1.7]. + +.. _sec_par: + +Pushed Authorization Request (PAR) Response +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If the verification is successful, the PID/(Q)EAA Issuer MUST provide the response with a *201 HTTP status code*. The following parameters are included as top-level members in the HTTP response message body, using the ``application/json`` media type as defined in [:rfc:`8259`]. + +.. _table_http_response_claim: +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **request_uri** + - The request URI corresponding to the authorization request posted. This URI MUST be a single-use reference to the respective authorization request. It MUST contain some part generated using a cryptographically strong pseudorandom algorithm. The value format MUST be ``urn:ietf:params:oauth:request_uri:`` with ```` as the random part of the URI that references the respective authorization request data. + - [:rfc:`9126`]. + * - **expires_in** + - A JSON number that represents the lifetime of the request URI in seconds as a positive integer. + - [:rfc:`9126`]. + + +Authorization endpoint +---------------------- + +The authorization endpoint is used to interact with the PID/(Q)EAA Issuer and obtain an authorization grant. +The authorization server MUST first verify the identity of the User that own the credential. + + +Authorization Request +^^^^^^^^^^^^^^^^^^^^^^^ + +The Authorization request is issued by the Web Browser in use by the Wallet Instance, the HTTP methods **POST** or **GET** are used. When the method **POST** is used, the parameters MUST be sent using the *Form Serialization*. When the method **GET** is used, the parameters MUST be sent using the *Query String Serialization*. For more details see `OpenID.Core#Serializations `_. + +The mandatory parameters in the HTTP authentication request are specified in the following table. + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **client_id** + - It MUST be set as in the :ref:`Table of the HTTP parameters `. + - See :ref:`Table of the HTTP parameters `. + * - **request_uri** + - It MUST be set to the same value as obtained by PAR Response. See :ref:`Table of the HTTP PAR Response parameters `. + - [:rfc:`9126`]. + + +Authorization Response +^^^^^^^^^^^^^^^^^^^^^^^ + +The authentication response is returned by the PID/(Q)EAA authorization endpoint at the end of the authentication flow. + +If the authentication is successful the PID/(Q)EAA Issuer redirects the User by adding the following query parameters as required to the *redirect_uri*. The redirect URI MUST be an universal or app link registered with the local operating system, so this latter is able to provide the response to the Wallet Instance. + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **code** + - Unique *Authorization Code* that the Wallet Instance submits to the Token Endpoint. + - [:rfc:`6749#section-4.1.2`], `Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants `_ + * - **state** + - The Wallet Instance MUST check the correspondence with the ``state`` parameter value in the Request Object. It is defined as in the :ref:`Table of the JWT Request parameters `. + - [:rfc:`6749#section-4.1.2`]. + * - **iss** + - Unique identifier of the PID/(Q)EAA Issuer who created the Authentication Response. The Wallet Instance MUST validate this parameter. + - `OAuth 2.0 Authorization Server Issuer Identifier in Authorization Response `_, `[RFC7519, Section 4.1.1] `_. + + +Token endpoint +-------------- + +The token endpoint is used by the Wallet Instance to obtain an Access Token by presenting an authorization grant, as +defined in :rfc:`6749`. The Token Endpoint is a protected endpoint with a client authentication based on the model defined in OAuth 2.0 Attestation-based Client Authentication [`oauth-attestation-draft `_]. + +.. _sec_token_request: + +Token Request +^^^^^^^^^^^^^^^ + +The request to the PID/(Q)EAA Token endpoint MUST be an HTTP request with method POST, with the body message encoded in ``application/x-www-form-urlencoded`` format. The Wallet Instance sends the Token endpoint request with ``client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation`` and ``client_assertion=WIA~WIA-PoP``. + +The Token endpoint MUST accept and validate the DPoP proof sent in the DPoP HTTP header. The Token endpoint MUST validate the DPoP proof according to Section 4.3 of the DPoP specifications (:rfc:`9449`). This mitigates the misuse of leaked or stolen Access Tokens at the credential endpoint. If the DPoP proof is invalid, the Token endpoint returns an error response, according to Section 5.2 of [:rfc:`6749`] with ``invalid_dpop_proof`` as the value of the error parameter. + +All the parameters listed below are REQUIRED: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **grant_type** + - It MUST be set to ``authorization_code``. + - `Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants `_. + * - **code** + - Authorization code returned in the Authentication Response. + - `Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants `_. + * - **redirect_uri** + - It MUST be set as in the Request Object :ref:`Table of the JWT Request parameters `. + - `Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants `_. + * - **code_verifier** + - Verification code of the **code_challenge**. + - `Proof Key for Code Exchange by OAuth Public Clients `_. + * - **client_assertion_type** + - It MUST be set to ``urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation``. + - `oauth-attestation-draft `_. + * - **client_assertion** + - It MUST be set to a value containing the Wallet Attestation JWT and the Proof of Possession JWT, separated with the ``~`` character (WIA~WIA-PoP). The Wallet Attestation Proof of Possession MUST contain the claims as defined in :ref:`Table of the JWT Wallet Attestation PoP `, Section :ref:`Pushed Authorization Request (PAR) Response`. + - `oauth-attestation-draft `_. + +A **DPoP Proof JWT** is included in the HTTP request using the ``DPoP`` header parameter containing a DPoP JWS. + +The JOSE header of a **DPoP JWT** MUST contain at least the following parameters: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **JOSE header** + - **Description** + - **Reference** + * - **typ** + - It MUST be equal to ``dpop+jwt``. + - [:rfc:`7515`] and [:rfc:`8725`. Section 3.11]. + * - **alg** + - A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms in Section :ref:`Cryptographic Algorithms ` and MUST NOT be set to ``none`` or with a symmetric algorithm (MAC) identifier. + - [:rfc:`7515`]. + * - **jwk** + - It represents the public key chosen by the Wallet Instance, in JSON Web Key (JWK) [:rfc:`7517`] format that the Access Token MUST be bound to, as defined in [:rfc:`7515`] Section 4.1.3. It MUST NOT contain a private key. + - [:rfc:`7517`] and [:rfc:`7515`]. + + +The payload of a **DPoP JWT Proof** MUST contain at least the following claims: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **jti** + - Unique identifier for the DPoP proof JWT. The value SHOULD be set using a *UUID v4* value according to [:rfc:`4122`]. + - [:rfc:`7519`. Section 4.1.7]. + * - **htm** + - The value of the HTTP method of the request to which the JWT is attached. + - [:rfc:`9110`. Section 9.1]. + * - **htu** + - The HTTP target URI, without query and fragment parts, of the request to which the JWT is attached. + - [:rfc:`9110`. Section 7.1]. + * - **iat** + - UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in :rfc:`7519`. + - [:rfc:`7519`. Section 4.1.6]. + + +Token Response +^^^^^^^^^^^^^^^ + +Token endpoint response MUST contain the following mandatory claims. + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **access_token** + - The *DPoP-bound Access Token*, in signed JWT format, allows accessing the PID/(Q)EAA Credential Endpoint for obtaining the credential. + - :rfc:`6749`. + * - **token_type** + - Type of *Access Token* returned. It MUST be equal to ``DPoP``. + - :rfc:`6749`. + * - **expires_in** + - Expiry time of the *Access Token* in seconds. + - :rfc:`6749`. + * - **c_nonce** + - JSON string containing a ``nonce`` value to be used to create a *proof of possession* of key material when requesting a Credential. + - `[OIDC4VCI. Draft 13] `_. + * - **c_nonce_expires_in** + - JSON integer, it represents the lifetime in seconds of the **c_nonce**. + - `[OIDC4VCI. Draft 13] `_. + * - **authorization_details** + - JSON object, used to identify Credentials with the same metadata but different claimset/claim values and/or simplify the Credential request even when only one Credential is being issued. + - `[OIDC4VCI. Draft 13] `_. + + +Access Token +^^^^^^^^^^^^ + +A DPoP-bound Access Token is provided by the PID/(Q)EAA Token endpoint as a result of a successful token request. The Access Token is encoded in JWT format, according to [:rfc:`7519`]. The Access Token MUST have at least the following mandatory claims and it MUST be bound to the public key that is provided by the DPoP proof. This binding can be accomplished based on the methodology defined in Section 6 of (:rfc:`9449`). + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **iss** + - It MUST be an HTTPS URL that uniquely identifies the PID/(Q)EAA Issuer. The Wallet Instance MUST verify that this value matches the PID/(Q)EAA Issuer where it has requested the credential. + - [:rfc:`9068`], `[RFC7519, Section 4.1.1] `_. + * - **sub** + - It identifies the subject of the JWT. It MUST be set to the value of the ``sub`` field in the PID/(Q)EAA SD-JWT-VC. + - [:rfc:`9068`], [:rfc:`7519`] and [`OpenID.Core#SubjectIDTypes `_]. + * - **aud** + - It MUST be set to the URL of Credential Endpoint of the PID/(Q)EAA Provider. + - [:rfc:`9068`]. + * - **iat** + - UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in :rfc:`7519`. + - [:rfc:`9068`], [:rfc:`7519`. Section 4.1.6]. + * - **exp** + - UNIX Timestamp with the expiry time of the JWT, coded as NumericDate as indicated in :rfc:`7519`. + - [:rfc:`9068`], [:rfc:`7519`]. + * - **jti** + - It MUST be a String in *uuid4* format. Unique Token ID identifier that the RP MAY use to prevent reuse by rejecting the Token ID if already processed. + - [:rfc:`9068`], [:rfc:`7519`]. + * - **jkt** + - JWK SHA-256 Thumbprint Confirmation Method. The value of the jkt member MUST be the base64url encoding (as defined in [RFC7515]) of the JWK SHA-256 Thumbprint of the DPoP public key (in JWK format) to which the Access Token is bound. + - [:rfc:`9449`. Section 6.1] and [:rfc:`7638`]. + + +Credential endpoint +------------------- + +The Credential Endpoint issues a Credential upon the presentation of a valid Access Token, as defined in `OPENID4VCI`_. + + +Credential Request +^^^^^^^^^^^^^^^^^^^ + +The Wallet Instance when requests the PID/(Q)EAA to the PID/(Q)EAA Credential endpoint, MUST use the following parameters in the message body of the HTTP POST request, using the `application/json` media type. + +The Credential endpoint MUST accept and validate the *DPoP proof* sent in the DPoP HTTP Header parameter, according to the steps defined in (:rfc:`9449`) Section 4.3. The *DPoP proof* in addition to the values that are defined in the Token Endpoint section MUST contain the following claim: + + - **ath**: hash value of the Access Token encoded in ASCII. The value MUST use the base64url encoding (as defined in Section 2 of :rfc:`7515`) with the SHA-256 algorithm. + +If the *DPoP proof* is invalid, the Credential endpoint returns an error response per Section 5.2 of [:rfc:`6749`] with `invalid_dpop_proof` as the value of the error parameter. + +.. warning:: + The Wallet Instance MUST create a **new DPoP proof** for the Credential request and MUST NOT use the previously created proof for the Token Endpoint. + + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **credential_definition** + - JSON object containing the detailed description of the Credential type. It MUST have at least the **type** sub claims which is a JSON array containing the type values the Wallet SHALL request in the Credential Request. It MUST be set in accordance to the type of the requested PID/(Q)EAA that is obtained from the PID/(Q)EAA Issuer metadata. In the case of the PID it MUST be set to ``PersonIdentificationData``. + - `[OIDC4VCI. Draft 13] `_. + * - **format** + - Format of the Credential to be issued. This MUST be `vc+sd-jwt`. + - `[OIDC4VCI. Draft 13] `_. + * - **proof** + - JSON object containing proof of possession of the key material the issued credential shall be bound to. The proof object MUST contain the following mandatory claims: + + - **proof_type**: JSON string denoting the proof type. It MUST be `jwt`. + - **jwt**: the JWT used as proof of possession. + - `[OIDC4VCI. Draft 13] `_. + +.. note:: + + If the **format** value is `mso_mdoc`, the credential request MUST contain the ``doctype`` claim which is a JSON string identifying the credential type according to `EIDAS-ARF`_ . See Appendix E.2. of `[OIDC4VCI. Draft 13] `_ for more details. + + +The JWT proof type MUST contain the following parameters for the JOSE header and the JWT body: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **JOSE Header** + - **Description** + - **Reference** + * - **alg** + - A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms in Section :ref:`Cryptographic Algorithms ` and MUST NOT be set to ``none`` or to a symmetric algorithm (MAC) identifier. + - `[OIDC4VCI. Draft 13] `_, [:rfc:`7515`], [:rfc:`7517`]. + * - **typ** + - It MUST be set to `openid4vci-proof+jwt`. + - `[OIDC4VCI. Draft 13] `_, [:rfc:`7515`], [:rfc:`7517`]. + * - **jwk** + - Representing the public key chosen by the Wallet Instance, in JSON Web Key (JWK) [:rfc:`7517`] format that the PID/(Q)EAA shall be bound to, as defined in Section 4.1.3 of [:rfc:`7515`]. The ``jwk`` value MUST be equal to the same public key that is generated for the DPoP. + - `[OIDC4VCI. Draft 13] `_, [:rfc:`7515`], [:rfc:`7517`]. + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **iss** + - The value of this claim MUST be the **client_id** of the Wallet Instance. + - `[OIDC4VCI. Draft 13] `_, `[RFC7519, Section 4.1.1] `_. + * - **aud** + - The value of this claim MUST be the identifier URL of the PID/(Q)EAA Issuer. + - `[OIDC4VCI. Draft 13] `_. + * - **iat** + - UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in :rfc:`7519`. + - `[OIDC4VCI. Draft 13] `_, [:rfc:`7519`. Section 4.1.6]. + * - **nonce** + - The value type of this claim MUST be a string, where the value is a **c_nonce** provided by the PID/(Q)EAA Issuer in the Token response. + - `[OIDC4VCI. Draft 13] `_. + + +Credential Response +^^^^^^^^^^^^^^^^^^^^ + +Credential Response to the Wallet Instance MUST be sent using `application/json` media type. The response MUST contain the following mandatory claims: + +.. _table_credential_response_claim: +.. list-table:: Credential http response parameters + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **format** + - Format of the Credential to be issued. This MUST be set to `vc+sd-jwt` when the credential type is SD-JWT. + - `[OIDC4VCI. Draft 13] `_. + * - **credential** + - Contains the issued PID/(Q)EAA. When the credential type is SD-JWT, it MUST be an SD-JWT JSON Object (see Section :ref:`PID/(Q)EAA Data Model `). + - Appendix E in `[OIDC4VCI. Draft 13] `_. + * - **c_nonce** + - JSON string containing a ``nonce`` value to be used to create a *proof of possession* of the key material when requesting a further Credential or for the renewal of a credential. + - `[OIDC4VCI. Draft 13] `_. + * - **c_nonce_expires_in** + - JSON integer corresponding to the **c_nonce** lifetime in seconds. + - `[OIDC4VCI. Draft 13] `_. + +.. note:: + + If the **format** value is `mso_mdoc`, the **credential** value MUST be a base64url-encoded JSON string according to Appendix E of `[OIDC4VCI. Draft 13] `_. + + +.. _Entity Configuration Credential Issuer: + +Entity Configuration Credential Issuer +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Below is a non-normative example of an Entity Configuration containing an `openid_credential_issuer` metadata. + +.. code-block:: http + + HTTP/1.1 200 OK + Content-Type: application/entity-statement+jwt + + { + + "alg": "RS256", + "kid": "FANFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs", + "typ": "entity-statement+jwt" + + } + . + { + "exp": "1649610249", + "iat": "1649437449", + "iss": "https://pid-provider.example.org", + "sub": "https://pid-provider.example.org", + "jwks": { + "keys": [{ + "kty": "RSA", + "use": "sig", + "n": "1Ta-sE ...", + "e": "AQAB", + "kid": "FANFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs" + }] + }, + "authority_hints": ["https://superior-entity.example.org/federation"], + "metadata": { + "openid_credential_issuer": { + "credential_issuer": "https://pid-provider.example.org", + "authorization_servers": ["https://pid-provider.example.org"], + "authorization_endpoint": "https://pid-provider.example.org/connect/authorize", + "token_endpoint": "https://pid-provider.example.org/connect/token", + "pushed_authorization_request_endpoint": "https://pid-provider.example.org/connect/par", + "dpop_signing_alg_values_supported": ["RS256", "RS512", "ES256", "ES512"], + "credential_endpoint": "https://pid-provider.example.org/credential", + "display": [ + { + "name": "PID Provider Italiano di esempio", + "locale": "it-IT" + }, + { + "name": "Example PID Provider", + "locale": "en-US", + "logo": { + "url": "https://pid-provider example.org/public/logo.svg", + "alt_text": "logo di questo PID Provider" + }, + } + ], + "jwks": { + "keys": [ + { + "crv": "P-256", + "kty": "EC", + "x": "newK5qDYMekrCPPO-yEYTdJVWJMTzasMavt2vm1Mb-A", + "y": "VizXaLO6dzeesZPxfpGZabTK3cTXtBUbIiQpmiYRtSE", + "kid": "ff0bded045fe63fe5d1d64dd83b567e0" + } + ] + }, + "credential_configurations_supported": [ + { + "format": "vc+sd-jwt", + "cryptographic_binding_methods_supported": ["jwk"], + "credential_signing_alg_values_supported": ["ES256", "ES384", "ES512"], + "proof_types_supported": { + "jwt": { + "proof_signing_alg_values_supported": [ + "ES256" + ] + } + }, + "display": [{ + "name": "PID Italiano di esempio", + "locale": "it-IT", + "logo": { + "url": "https://pid-provider example.org/public/logo.svg", + "alt_text": "logo di questa Credenziale" + }, + "background_color": "#12107c", + "text_color": "#FFFFFF" + }, + { + "name": "Example Italian PID", + "locale": "en-US", + "logo": { + "url": "https://pid-provider.example.org/public/logo.svg", + "alt_text": "The logo of this credential" + }, + "background_color": "#12107c", + "text_color": "#FFFFFF" + } + ], + "credential_definition": { + "type": ["PersonIdentificationData"], + "credentialSubject": { + "given_name": { + "mandatory": true, + "display": [{ + "name": "Current First Name", + "locale": "en-US" + }, + { + "name": "Nome", + "locale": "it-IT" + } + ] + }, + "family_name": { + "mandatory": true, + "display": [{ + "name": "Current Family Name", + "locale": "en-US" + }, + { + "name": "Cognome", + "locale": "it-IT" + } + ] + }, + "birthdate": { + "mandatory": true, + "display": [{ + "name": "Date of Birth", + "locale": "en-US" + }, + { + "name": "Data di Nascita", + "locale": "it-IT" + } + ] + }, + "place_of_birth": { + "mandatory": true, + "display": [{ + "name": "Place of Birth", + "locale": "en-US" + }, + { + "name": "Luogo di Nascita", + "locale": "it-IT" + } + ] + }, + "unique_id": { + "mandatory": true, + "display": [{ + "name": "Unique Identifier", + "locale": "en-US" + }, + { + "name": "Identificativo univoco", + "locale": "it-IT" + } + ] + }, + "tax_id_code": { + "mandatory": true, + "display": [{ + "name": "Tax Id Number", + "locale": "en-US" + }, + { + "name": "Codice Fiscale", + "locale": "it-IT" + } + ] + } + } + } + } + } + }, + + "federation_entity": { + "organization_name": "PID Provider Organization Example", + "homepage_uri": "https://pid-provider.example.org", + "policy_uri": "https://pid-provider.example.org/privacy_policy", + "tos_uri": "https://pid-provider.example.org/info_policy", + "logo_uri": "https://pid-provider.example.org/logo.svg" + }, + + "openid_relying_party": { + + } + } + } diff --git a/refs/pull/212/merge/en/_sources/proximity-flow.rst.txt b/refs/pull/212/merge/en/_sources/proximity-flow.rst.txt new file mode 100644 index 000000000..4b2246754 --- /dev/null +++ b/refs/pull/212/merge/en/_sources/proximity-flow.rst.txt @@ -0,0 +1,412 @@ + + +.. _proximity_flow_sec: + +Proximity Flow +============== + +This section describes how a Verifier requests the presentation of an *mDoc-CBOR* Credential to a Wallet Instance according to the *ISO 18013-5 Specification*. Only *Supervised Device Retrieval flow* is supported in this technical implementation profile. + +The presentation phase is divided into three sub-phases: + + 1. **Device Engagement**: This subphase begins when the User is prompted to disclose certain attributes from the mDoc(s). The objective of this subphase is to establish a secure communication channel between the Wallet Instance and the Verifier App, so that the mDoc requests and responses can be exchanged during the communication subphase. + The messages exchanged in this subphase are transmitted through short-range technologies to limit the possibility of interception and eavesdropping. + This technical implementation profile exclusively supports QR code for Device Engagement. + + 2. **Session establishment**: During the session establishment phase, the Verifier App sets up a secure connection. All data transmitted over this connection is encrypted using a session key, which is known to both the Wallet Instance and the Verifier at this stage. + The established session MAY be terminated based on the conditions as detailed in [ISO18013-5#9.1.1.4]. + + 3. **Communication - Device Retrieval**: The Verifier App encrypts the mDoc request with the appropriate session key and sends it to the Wallet Instance together with its public key in a session establishment message. The mDoc uses the data from the session establishment message to derive the session key and decrypt the mDoc request. + During the communication subphase, the Verifier App has the option to request information from the Wallet using mDoc requests and responses. The primary mode of communication is the secure channel established during the session setup. The Wallet Instance encrypts the mDoc response using the session key and transmits it to the Verifier App via a session data message. This technical implementation profile only supports Bluetooth Low Energy (BLE) for the communication sub-phase. + + +The following figure illustrates the flow diagram compliant with ISO 18013-5 for proximity flow. + +.. _fig_High-Level-Flow-ITWallet-Presentation-ISO: +.. figure:: ../../images/High-Level-Flow-ITWallet-Presentation-ISO.svg + :figwidth: 100% + :align: center + :target: https://www.plantuml.com/plantuml/svg/bL9BZnCn3BxFhx3A0H3q3_ImMlOXXBJYqGguzE9ct2RQn0bvJDb_ZoSP3QFI2xab_Xx-xDocZ34NPpiisNDn1ufT1t9GPH_XUw88cA3KjuF_3QlnwNM2dHDYq9vf1Q-Up4ddErkeme9KZ381ESFg9rfB6JwnEB4IiAYTAuou7nN_Al-WQ8xcVzHd2dm8eKeFI-cMfApNDpVd3Nm9n90rmKLBa3s4I8b441dSWrTm7wcNkq7RD3xxJE07CIhlXmqyq624-CWdF94RYQaSWiP4iAweRzjr1vLvRkOVYIcYY32TWO8c9rSBp_GYWKoSe88LzPtsvx5HKO5xtnCSVVpNibA6ATjE8IyfKr7aBgptVDry0WlPXIBOH2aPpoEcbgzDOJTXIEPui2PfrqROZogki56OfNuvcxkdHv5N9H8eZSnaPLRJwUPU95JTn9P-5J60Tn2AcAZQjJ_MiCljxndUN6texN8Dr-ErSjd0roZrNEUjFDSVaJqaZP6gOMpDK0-61UHglkcJjJL75Cx4NHflAKT30xLGH_41wnLQIDb7FD6C7URSAOZCSfCjxyjSWcHEZBb4slCuTQL9FJVsWDRq9akuxfQuByx-0G00 + + High-Level Proximity Flow + +**Step 1-3**: The Verifier requests the User to reveal certain attributes from their mDoc(s) stored in the Wallet Instance. The User initiates the Wallet Instance. The Wallet Instance MUST create a new temporary key pair (EDeviceKey.Priv, EDeviceKey.Pub), and incorporate the cipher suite identifier, the identifier of the elliptic curve for key agreement, and the EDeviceKey public point into the device engagement structure (refer to [ISO18013-5#9.1.1.4]). This key pair is temporary and MUST be invalidated immediately after the secure channel is established. Finally, the Wallet Instance displays the QR Code for Device Engagement. + +Below an example of a device engagement structure that utilizes QR for device engagement and Bluetooth Low Energy (BLE) for data retrieval. + +CBOR data: + +.. code-block:: + + a30063312e30018201d818584ba4010220012158205a88d182bce5f42efa59943f33359d2e8a968ff289d93e5fa444b624343167fe225820b16e8cf858ddc7690407ba61d4c338237a8cfcf3de6aa672fc60a557aa32fc670281830201a300f401f50b5045efef742b2c4837a9a3b0e1d05a6917 + +In diagnostic notation: + +.. code-block:: + + { + 0: "1.0", % Version + + 1: % Security + [ + 1, % defines the cipher suite 1 which contains only EC curves + 24(<< % embedded CBOR data item + { + 1: 2, % kty:EC2 (Elliptic curves with x and y coordinate pairs) + -1: 1, % crv:p256 + -2:h'5A88D182BCE5F42EFA59943F33359D2E8A968FF289D93E5FA444B624343 167FE',% x-coordinate + -3:h'B16E8CF858DDC7690407BA61D4C338237A8CFCF3DE6AA672FC60A557AA32FC67' % y-coordinate + } + >>) + ], + + 2: %DeviceRetrievalMethods(Device engagement using QR code) + [ + [ + 2, %BLE + 1, % Version + { %BLE options + 0: false, % no support for mdoc peripheral server mode + 1: true, % support mdoc central client mode + 11: h'45EFEF742B2C4837A9A3B0E1D05A6917' % UUID of mdoc client central mode + } + ] + ] + } + + + +**Step 4-6**: The Verifier App scans the QR Code and generates its own ephemeral key pair (EReaderKey.Priv, EReaderKey.Pub). It then calculates the session key, using the public key received in the Engagement Structure and its newly-generated private key, as outlined in [ISO18013-5#9.1.1.5]. Finally, it generates its session key, which must be independently derived by both the Wallet Instance and the Verifier App. + +**Step 7**: The Verifier App creates an mDoc request that MUST be encrypted using the relevant session key, and transmits it to the Wallet Instance along with EReaderKey.Pub within a session establishment message. The mDoc request MUST be encoded in CBOR, as demonstrated in the following non-normative example. + +CBOR data: +.. code-block:: + + a26776657273696f6e63312e306b646f63526571756573747381a26c6974656d7352657175657374d818590152a267646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6a6e616d65537061636573a2746f72672e69736f2e31383031332e352e312e4954a375766572696669636174696f6e2e65766964656e6365f4781c766572696669636174696f6e2e6173737572616e63655f6c6576656cf4781c766572696669636174696f6e2e74727573745f6672616d65776f726bf4716f72672e69736f2e31383031332e352e31ab76756e5f64697374696e6775697368696e675f7369676ef47264726976696e675f70726976696c65676573f46f646f63756d656e745f6e756d626572f46a69737375655f64617465f46f69737375696e675f636f756e747279f47169737375696e675f617574686f72697479f46a62697274685f64617465f46b6578706972795f64617465f46a676976656e5f6e616d65f468706f727472616974f46b66616d696c795f6e616d65f46a726561646572417574688443a10126a11821590129308201253081cda00302010202012a300a06082a8648ce3d0403023020311e301c06035504030c15536f6d652052656164657220417574686f72697479301e170d3233313132343130323832325a170d3238313132323130323832325a301a3118301606035504030c0f536f6d6520526561646572204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004aa1092fb59e26ddd182cfdbc85f1aa8217a4f0fae6a6a5536b57c5ef7be2fb6d0dfd319839e6c24d087cd26499ec4f87c8c766200ba4c6218c74de50cd1243b1300a06082a8648ce3d0403020347003044022048466e92226e042add073b8cdc43df5a19401e1d95ab226e142947e435af9db30220043af7a8e7d31646a424e02ea0c853ec9c293791f930bf589bee557370a4c97bf6584058a0d421a7e53b7db0412a196fea50ca6d4c8a530a47dd84d88588ab145374bd0ab2a724cf2ed2facf32c7184591c5969efd53f5aba63194105440bc1904e1b9 + +The above CBOR data is represented in diagnostic notation as follows: +.. code-block:: + + { + "version": "1.0", + "docRequests": [ + { + "itemsRequest": 24(<< { + "docType": "org.iso.18013.5.1.mDL", + "nameSpaces": { + "org.iso.18013.5.1.IT": { + "verification.evidence": false, + "verification.assurance_level": false, + "verification.trust_framework": false + }, + "org.iso.18013.5.1": { + "un_distinguishing_sign": false, + "driving_privileges": false, + "document_number": false, + "issue_date": false, + "issuing_country": false, + "issuing_authority": false, + "birth_date": false, + "expiry_date": false, + "given_name": false, + "portrait": false, + "family_name": false + } + } + } >>), + "readerAuth": [ + h'a10126', + { + 33: h'308201253081cda00302010202012a300a06082a8648ce3d0403023020311e301c06035504030c15536f6d652052656164657220417574686f72697479301e170d3233313132343130323832325a170d3238313132323130323832325a301a3118301606035504030c0f536f6d6520526561646572204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004aa1092fb59e26ddd182cfdbc85f1aa8217a4f0fae6a6a5536b57c5ef7be2fb6d0dfd319839e6c24d087cd26499ec4f87c8c766200ba4c6218c74de50cd1243b1300a06082a8648ce3d0403020347003044022048466e92226e042add073b8cdc43df5a19401e1d95ab226e142947e435af9db30220043af7a8e7d31646a424e02ea0c853ec9c293791f930bf589bee557370a4c97b' + }, + null, + h'58a0d421a7e53b7db0412a196fea50ca6d4c8a530a47dd84d88588ab145374bd0ab2a724cf2ed2facf32c7184591c5969efd53f5aba63194105440bc1904e1b9' + ] + } + ] + } + +**Step 8**: The Wallet Instance uses the session establishment message to derive the session keys and decrypt the mDoc request. It computes the session key using the public key received from the Verifier App and its private key. + +**Step 9-10**: When the Wallet Instance receives the mDoc request, it locates the documents that contain the requested attributes and asks the User for permission to provide this information to the Verifier. If the User agrees, the Wallet generates an mDoc response and transmits it to the Verifier App through the secure channel. + +**Step 11-12**: If the User gives consent, the Wallet Instance creates an mDoc response and transmits it to the Verifier App via the secure channel. The mDoc response MUST be encoded in CBOR, with its structure outlined in [ISO18013-5#8.3.2.1.2.2]. Below is a non-normative example of an mDoc response. + +CBOR Data: +.. code-block:: + + a36776657273696f6e63312e3069646f63756d656e747381a367646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6c6973737565725369676e6564a26a6e616d65537061636573a2746f72672e69736f2e31383031332e352e312e495483d81858f7a46864696765737449440b6672616e646f6d506d44f21ee875f2c1d502b43198e5a15271656c656d656e744964656e74696669657275766572696669636174696f6e2e65766964656e63656c656c656d656e7456616c756581a2647479706571656c656374726f6e69635f7265636f7264667265636f7264bf6474797065781f68747470733a2f2f657564692e77616c6c65742e70646e642e676f762e697466736f75726365bf716f7267616e697a6174696f6e5f6e616d65754d6f746f72697a7a617a696f6e6520436976696c656f6f7267616e697a6174696f6e5f6964656d5f696e666c636f756e7472795f636f6465626974ffffd8185866a4686469676573744944046672616e646f6d50185d84dfb71ce9b173010ddd62174fbe71656c656d656e744964656e746966696572781c766572696669636174696f6e2e74727573745f6672616d65776f726b6c656c656d656e7456616c7565656569646173d8185865a4686469676573744944006672616e646f6d50137f903174253c4585358267aae2ea4e71656c656d656e744964656e746966696572781c766572696669636174696f6e2e6173737572616e63655f6c6576656c6c656c656d656e7456616c75656468696768716f72672e69736f2e31383031332e352e318bd8185852a46864696765737449440c6672616e646f6d5053e29d0ddbbc7d2306a32bdbe2e56e5171656c656d656e744964656e7469666965726b66616d696c795f6e616d656c656c656d656e7456616c756563446f65d8185855a4686469676573744944036672616e646f6d50990cba2069fa1b33b8d6ae910b6549dc71656c656d656e744964656e7469666965726a676976656e5f6e616d656c656c656d656e7456616c756567416e746f6e696fd818585ba46864696765737449440a6672616e646f6d504086c1379975f805f1b1f4975e6a126571656c656d656e744964656e7469666965726a69737375655f646174656c656c656d656e7456616c7565d903ec6a323031392d31302d3230d818585ca4686469676573744944016672616e646f6d50ab4ca30c918dd2fd0bf35242c15fa2d871656c656d656e744964656e7469666965726b6578706972795f646174656c656c656d656e7456616c7565d903ec6a323032342d31302d3230d8185855a4686469676573744944076672616e646f6d508d9066f6c8da16619867cd4e2fab0c8871656c656d656e744964656e7469666965726f69737375696e675f636f756e7472796c656c656d656e7456616c7565624954d818587ea4686469676573744944056672616e646f6d5059fe68db795dee4c20976380ea24770571656c656d656e744964656e7469666965727169737375696e675f617574686f726974796c656c656d656e7456616c75657828497374697475746f20506f6c696772616669636f2065205a656363612064656c6c6f20537461746fd818585ba4686469676573744944026672616e646f6d5008b3f1ca5517019767be3dee3bb0614571656c656d656e744964656e7469666965726a62697274685f646174656c656c656d656e7456616c7565d903ec6a313935362d30312d3230d818585ca4686469676573744944096672616e646f6d50a2395ec214350c26066306e23279b3ae71656c656d656e744964656e7469666965726f646f63756d656e745f6e756d6265726c656c656d656e7456616c756569393837363534333231d8185850a4686469676573744944066672616e646f6d50a25e1a5b915d2d6eafee9674e023293971656c656d656e744964656e74696669657268706f7274726169746c656c656d656e7456616c75654420212223d81858eea46864696765737449440d6672616e646f6d50eeed6a3b856563627589a360939d12f771656c656d656e744964656e7469666965727264726976696e675f70726976696c656765736c656c656d656e7456616c756582a37576656869636c655f63617465676f72795f636f646561416a69737375655f64617465d903ec6a323031382d30382d30396b6578706972795f64617465d903ec6a323032342d31302d3230a37576656869636c655f63617465676f72795f636f646561426a69737375655f64617465d903ec6a323031372d30322d32336b6578706972795f64617465d903ec6a323032342d31302d3230d818585ba4686469676573744944086672616e646f6d50c0ef486b2a194ed3cbf7f354fd40092171656c656d656e744964656e74696669657276756e5f64697374696e6775697368696e675f7369676e6c656c656d656e7456616c756561496a697373756572417574688443a10126a118215901423082013e3081e5a00302010202012a300a06082a8648ce3d040302301a3118301606035504030c0f5374617465204f662055746f706961301e170d3233313132343134353430345a170d3238313132323134353430345a30383136303406035504030c2d5374617465204f662055746f7069612049737375696e6720417574686f72697479205369676e696e67204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004c338ec1000b351ce8bcdfc167450aeceb + +In diagnostic notation: +.. code-block:: + + { + "version": "1.0", + "documents": [ + { + "docType": "org.iso.18013.5.1.mDL", + "issuerSigned": { + "nameSpaces": { + "org.iso.18013.5.1.IT": [ + 24(<< { + "digestID": 11, + "random": h'6d44f21ee875f2c1d502b43198e5a152', + "elementIdentifier": "verification.evidence", + "elementValue": [ + { + "type": "electronic_record", + "record": { + "type": "https://eudi.wallet.pdnd.gov.it", + "source": { + "organization_name": "Motorizzazione Civile", + "organization_id": "m_inf", + "country_code": "it" + } + } + } + ] + } >>), + 24(<< { + "digestID": 4, + "random": h'185d84dfb71ce9b173010ddd62174fbe', + "elementIdentifier": "verification.trust_framework", + "elementValue": "eidas" + } >>), + 24(<< { + "digestID": 0, + "random": h'137f903174253c4585358267aae2ea4e', + "elementIdentifier": "verification.assurance_level", + "elementValue": "high" + } >>) + ], + "org.iso.18013.5.1": [ + 24(<< { + "digestID": 12, + "random": h'53e29d0ddbbc7d2306a32bdbe2e56e51', + "elementIdentifier": "family_name", + "elementValue": "Doe" + } >>), + 24(<< { + "digestID": 3, + "random": h'990cba2069fa1b33b8d6ae910b6549dc', + "elementIdentifier": "given_name", + "elementValue": "Antonio" + } >>), + 24(<< { + "digestID": 10, + "random": h'4086c1379975f805f1b1f4975e6a1265', + "elementIdentifier": "issue_date", + "elementValue": 1004("2019-10-20") + } >>), + 24(<< { + "digestID": 1, + "random": h'ab4ca30c918dd2fd0bf35242c15fa2d8', + "elementIdentifier": "expiry_date", + "elementValue": 1004("2024-10-20") + } >>), + 24(<< { + "digestID": 7, + "random": h'8d9066f6c8da16619867cd4e2fab0c88', + "elementIdentifier": "issuing_country", + "elementValue": "IT" + } >>), + 24(<< { + "digestID": 5, + "random": h'59fe68db795dee4c20976380ea247705', + "elementIdentifier": "issuing_authority", + "elementValue": "Istituto Poligrafico e Zecca dello Stato" + } >>), + 24(<< { + "digestID": 2, + "random": h'08b3f1ca5517019767be3dee3bb06145', + "elementIdentifier": "birth_date", + "elementValue": 1004("1956-01-20") + } >>), + 24(<< { + "digestID": 9, + "random": h'a2395ec214350c26066306e23279b3ae', + "elementIdentifier": "document_number", + "elementValue": "987654321" + } >>), + 24(<< { + "digestID": 6, + "random": h'a25e1a5b915d2d6eafee9674e0232939', + "elementIdentifier": "portrait", + "elementValue": h'20212223' + } >>), + 24(<< { + "digestID": 13, + "random": h'eeed6a3b856563627589a360939d12f7', + "elementIdentifier": "driving_privileges", + "elementValue": [ + { + "vehicle_category_code": "A", + "issue_date": 1004("2018-08-09"), + "expiry_date": 1004("2024-10-20") + }, + { + "vehicle_category_code": "B", + "issue_date": 1004("2017-02-23"), + "expiry_date": 1004("2024-10-20") + } + ] + } >>), + 24(<< { + "digestID": 8, + "random": h'c0ef486b2a194ed3cbf7f354fd400921', + "elementIdentifier": "un_distinguishing_sign", + "elementValue": "I" + } >>) + ] + }, + "issuerAuth": [ + h'a10126', + { + 33: h'3082013e3081e5a00302010202012a300a06082a8648ce3d040302301a3118301606035504030c0f5374617465204f662055746f706961301e170d3233313132343134353430345a170d3238313132323134353430345a30383136303406035504030c2d5374617465204f662055746f7069612049737375696e6720417574686f72697479205369676e696e67204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004c338ec1000b351ce8bcdfc167450aeceb7d518bd9a519583e082d67effff06565804fc09abf0e4a08e699c9dba3796285a15f68e40ac7f9fc7700a15153a4065300a06082a8648ce3d040302034800304502210099b7d62e6bf7b1823db3713df889bf73e70bb4d9c58c21e92c58d2f1beffe932022058d039747a00d70e6d66be4797e6142b3608a014ee09b7b79af2cae2aaf27788' + }, + 24(<< { + "version": "1.0", + "digestAlgorithm": "SHA-256", + "docType": "org.iso.18013.5.1.mDL", + "valueDigests": { + "org.iso.18013.5.1": { + 1: h'0E5F0B6B33418E508740771E82F893372EAF5B2445BC4C84DCF08B005E9493FC', + 2: h'DE21BB62FF2897D8B986D2CDA9F9BC5865C02807F7B4D9DD1FA4A79DF4C0D37F', + 3: h'BC5568239E35CE9FF8798C27FFDCD757B134B679F0FE05729AA3491381912E65', + 5: h'E6048BDC7FD6454296F1E3F54536107C9C5B24C4064DE46A98121E3630EECCA2', + 6: h'73690D92DCAA61B0203870F67C6AA9FDFEA889B6F0C720DE757B4B0A8516A206', + 7: h'E353EA0B0FD92B6BE90C64CC3B2EE1284153A8F0F5066B99AAC599200E6EEEB2', + 8: h'29227872CEB49923D267B5F4BADE6D387B42AC2DC4B2AE26C9013067FEE7018A', + 9: h'A6A119F7CACAC0B8C6AACAC747FD3FE7E50B6D9BB8A507FDA79F0DF6646F285D', + 10: h'6D8025D2F02A5E7E1406FB6AAEB67F9EDE9B07191A53F3E23B77C528223A94E2', + 12: h'B0D43E4E2EA534E4D5304E64BCF7A0F13E2C8EE8304B9CD23ABA4909652A4647', + 13: h'FBF4DE318982F2DBAD43C601CAEB22628B301AC18AA8264C5831B2AAAC89C486' + }, + "org.iso.18013.5.1.IT": { + 0: h'CF57377B675F64F37314739592C1E8A911A7DDAF341CE2902FE877C5A835E4C1', + 4: h'4A4B4CC64EC9299C1A2501EA449F577005E9F7A60408057C07A7C67FB151E5F5', + 11: h'78824FBD6FBBA88A2AAB44DF8B6F5E9759126D87D1F4415995E658FD9239E1FE' + } + }, + "deviceKeyInfo": { + "deviceKey": { + 1: 2, + -1: 1, + -2: h'AFD09E720B918CEDC2B8A881950BAB6A1051E18AE16A814D51E609938663D5E1', + -3: h'61FBC6C8AD24EC86A78BB4E9AC377DD2B7C711D9F2EB9AFD4AA0963662847AED'}}, + "validityInfo": { + "signed": 0("2023-11-24T14:54:05Z"), + "validFrom": 0("2023-11-24T14:54:05Z"), + "validUntil": 0("2024-11-24T14:54:05Z")} + } >>), + h'f2461e4fab69e9f7bcffe552395424514524d1679440036213173101448d1b1ab4a293859b389ffa8b47aeed10e9b0c1545412ac37c51a76482cd9bbbe110152' + ] + }, + "deviceSigned": { + "nameSpaces": 24(<< {} >>), + "deviceAuth": { + "deviceSignature": [ + h'a10126', + {}, + null, + h'1fed7190d2975ab79c072e6f1d9d52436059d1fc959d55baf74f057d89b10fcc0dc77a50d433d4c76ddf26223c5560c4ab123b5cb5eb805a90036aa147493076' + ] + } + } + } + ], + "status": 0 + } + +**Step 13**: The Verifier App is required to validate the signatures in the mDoc's issuerSigned field using the public key of the Credential Issuer specified within the mDoc. Subsequently, the Verifier MUST validate the signature in the deviceSigned field. If these signature checks pass, the Verifier can confidently consider the received information as valid. + +Device Engagement +----------------- + +The Device Engagement structure MUST be have at least the following components: + + - **Version**: *tstr*. Version of the data structure being used. + - **Security**: an array that contains two mandatory values + + - the cipher identifier: see Table 22 of [ISO18013-5] + - the mDL public ephemeral key generated by the Wallet Instance and required by the Verifier App to derive the Session Key. The mDL public ephemeral key MUST be of a type allowed by the indicated cipher suite. + - **transferMethod**: an array that contains one or more transferMethod arrays when performing device engagement using the QR code. This array is for offline data retrieval methods. A transferMethod array holds two mandatory values (type and version). Only the BLE option is supported by this technical implementation profile, then the type value MUST be set to ``2``. + - **BleOptions**: this elements MUST provide options for the BLE connection (support for Peripheral Server or Central Client Mode, and the device UUID). + + +mDoc Request +------------ + +The messages in the mDoc Request MUST be encoded using CBOR. The resulting CBOR byte string for the mDoc Request MUST be encrypted with the Session Key obtained after the Device Engagement phase and MUST be transmitted using the BLE protocol. +The details on the structure of mDoc Request, including identifier and format of the data elements, are provided below. + + - **version**: (tstr). Version of the data structure. + - **docRequests**: Requested DocType, NameSpace and data elements. + + - **itemsRequest**: #6.24(bstr .cbor ItemsRequest). + + - **docType**: (tstr). The DocType element contains the type of document requested. See :ref:`Data Model Section `. + - **nameSpaces**: (tstr). See :ref:`Data Model Section ` for more details. + + - **dataElements**: (tstr). Requested data elements with *Intent to Retain* value for each requested element. + + - **IntentToRetain**: (bool). It indicates that the Verifier App intends to retain the received data element. + - **readerAuth**: *COSE_Sign1*. It is required for the Verifier App authentication. + +.. note:: + + The domestic data elements MUST not be returned unless specifically requested by the Verifier App. + +mDoc Response +------------- + +The messages in the mDoc Response MUST be encoded using CBOR and MUST be encrypted with the Session Key obtained after the Device Engagement phase. +The details on the structure of mDoc Response are provided below. + + - **version**: (tstr). Version of the data structure. + - **documents**: Returned *DocType*, and *ResponseData*. + + - **docType**: (tstr). The DocType element contains the type of document returned. See :ref:`Data Model Section `. + - **ResponseData**: + + - **IssuerSigned**: Responded data elements signed by the issuer. + + - **nameSpaces**: (tstr). See :ref:`Data Model Section ` for more details. + + - **IssuerSignedItemBytes**: #6.24(bstr .cbor). + + - **digestID**: (uint). Reference value to one of the **ValueDigests** provided in the *Mobile Security Object* (`issuerAuth`). + - **random**: (bstr). Random byte value used as salt for the hash function. This value SHALL be different for each *IssuerSignedItem* and it SHALL have a minimum length of 16 bytes. + - **elementIdentifier**: (tstr). Identifier of User attribute name contained in the Credential. + - **elementValue**: (any). User attribute value + - **DeviceSigned**: Responded data elements signed by the Wallet Instance. + + - **NameSpaces**: #6.24(bstr .cbor DeviceNameSpaces). The DeviceNameSpaces structure MAY be an empty structure. DeviceNameSpaces contains the data element identifiers and values. It is returned as part of the corresponding namespace in DeviceNameSpace. + + - **DataItemName**: (tstr). The identifier of the element. + - **DataItemValue**: (any). The value of the element. + - **DeviceAuth**: The DeviceAuth structure MUST contain the DeviceSignature elements. + + - **DeviceSignature**: It MUST contain the device signature for the Wallet Instance authentication. + - **status**: It contains a status code. For detailed description and action required refer to to Table 8 (ResponseStatus) of the [ISO18013-5] + + +Session Termination +------------------- + +The session MUST be terminated if at least one of the following conditions occur. + + - After a time-out of no activity of receiving or sending session establishment or session data messages occurs. The time-out for no activity implemented by the Wallet Instance and the Verifier App SHOULD be no less than 300 seconds. + - When the Wallet Instance doesn't accept any more requests. + - When the Verifier App does not send any further requests. + +If the Wallet Instance and the Verifier App does not send or receive any further requests, the session termination MUST be initiated as follows. + + - Send the status code for session termination, or + - dispatch the "End" command as outlined in [ISO18013-5#8.3.3.1.1.5]. + +When a session is terminated, the Wallet Instance and the Verifier App MUST perform at least the following actions: + + - destruction of session keys and related ephemeral key material; + - closure of the communication channel used for data retrieval. diff --git a/refs/pull/212/merge/en/_sources/pseudonyms.rst.txt b/refs/pull/212/merge/en/_sources/pseudonyms.rst.txt new file mode 100644 index 000000000..7b20567f9 --- /dev/null +++ b/refs/pull/212/merge/en/_sources/pseudonyms.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _pseudonyms.rst: + +pseudonyms.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/refs/pull/212/merge/en/_sources/relying-party-solution.rst.txt b/refs/pull/212/merge/en/_sources/relying-party-solution.rst.txt new file mode 100644 index 000000000..1ed5fdacb --- /dev/null +++ b/refs/pull/212/merge/en/_sources/relying-party-solution.rst.txt @@ -0,0 +1,21 @@ + + + + +.. _relying-party-solution: + +Relying Party Solution ++++++++++++++++++++++++ + +This section describes how a remote Relying Party or a Verifier App requests to a Wallet Instance the presentation of the PID/EAAs. + +In this section the following flows are described: + +- :ref:`Remote Flow `, where the User presents a Credential to a remote Relying Party according to `OPENID4VP`_. In this scenario the user-agent and the Wallet Instance may be used in the same device (**Same Device Flow**), or in different devices (**Cross Device Flow**). +- :ref:`Proximity Flow `, where the User presents a Credential to a Verifier App according to ISO 18013-5. The User interacts with a Verifier using proximity connection technologies such as QR Code and Bluetooth Low Energy (BLE). + +.. include:: remote-flow.rst + +.. include:: proximity-flow.rst + + diff --git a/refs/pull/212/merge/en/_sources/remote-flow.rst.txt b/refs/pull/212/merge/en/_sources/remote-flow.rst.txt new file mode 100644 index 000000000..0cd04af47 --- /dev/null +++ b/refs/pull/212/merge/en/_sources/remote-flow.rst.txt @@ -0,0 +1,731 @@ +.. include:: ../common/common_definitions.rst +.. _Wallet Attestation: wallet-attestation.html +.. _Trust Model: trust.html + +.. _remote_flow_sec: + +Remote Flow +=========== + +In this scenario the Relying Party MUST provide the URL where the signed presentation Request Object is available for download. + +Depending on whether the User is using a mobile device or a workstation, the Relying Party MUST support the following remote flows: + +* **Same Device**, the Relying Party MUST provide a HTTP redirect (302) location to the Wallet Instance; +* **Cross Device**, the Relying Party MUST provide a QR Code which the User frames with the Wallet Instance. + +Once the Wallet Instance establishes the trust with the Relying Party and evaluates the request, the User gives the consent for the disclosure of the Digital Credentials, in the form of a Verifiable Presentation. + +A High-Level description of the remote flow, from the User's perspective, is given below: + + 1. the Wallet Instance scans the QR Code and obtains the URL (Cross Device flow) or obtain directly an URL (Same Device flow); + 2. the Wallet Instance extracts from the payload the ``client_id`` and the `request_uri` parameters; + 3. the Wallet Instance establishes the Trust to the Relying Party by building the Federation Trust Chain. Implementations may evaluate the trust after having obtained the signed Request Object (see point 5); + 4. the Wallet fetches the signed Request Object using an HTTP request with method GET to the endpoint provided in the ``request_uri`` parameter; + 5. the Wallet verifies the signature of the signed Request Object and that its issuer matches the ``client_id`` obtained at the step number 2; + 6. the Wallet checks the presence in the signed Request Object of the parameter `request_uri_method`, if this parameter is present and set with the ``post`` valueThe Wallet transmits its metadata to the request_uri endpoint of the Relying Party using an HTTP POST method and obtains an updated signed Request Object; + 7. The Wallet Instance evaluates the requested PID/EAAs and checks the elegibility of the Relying Party in asking these by applying the policies related to that specific Relying Party; + 8. the Wallet Instance asks User disclosure and consent; + 9. the Wallet Instance presents the requested disclosure of PID/EAAs to the Relying Party, which validates the Wallet Attestation and checks that the Wallet Provider is trusted; + 10. the Wallet Instance informs the User about the successfull authentication with the Relying Party and give a good user experience to let the User continuing its navigation. + +Below a sequence diagram that summarizes the interactions between all the involved parties. + +.. figure:: ../../images/cross_device_auth_seq_diagram.svg + :align: center + :target: https://www.plantuml.com/plantuml/svg/XLNTRkCs4xtdKnpuk_YI84cpspi3AJQRfflijergUpSt1W9Q6jjiQ5BbZvoqwBjtA5goN2GeO1WGEMVcdFaPVl11kX0tMiWOh8cR1JaXn5KPhCFegoStWlI8GYpiSpxulyUFrAYI_0Z_-rcjrk6ZZYHgzgDALKiJC7gGMbF0dM7tfgJMn_RG9BAhCxaY4t84ASXKu2Y7PXFIBygiKF3XIslPa10HPpymP8m7Mc1ABj61aOrQoQ2i4L4cWuR6cD0VaNn0uMoWCb359zv6LxANoqiaGRYAOKs6OxPW71MEF7_dhs8jFHtZybB8CgX61aeC6ke2N3jAPn8d9vuXT7A2Hkf8SxEmaHK5YxrKbDO-gLVWBjDyZ4x1TGGRwcJ-Dhcs5U5-WjlPh609bNAi1aVVNxm_nbQ5DKgjEC2Zgaw7paxHaX8L3TcBlPQj42jdOyr4hEyg2slqoow9SOpfscx1AUferAmbbO1ljsFSrsJQstyL7RAkJw5jAJNaGOR55XawBQLXfqXU-yERv-2OtjpqYkPce6XkfAcoghbPEhj9iNidP2hHUw9K2BRp22xwaFEKh7lFsPJhqENCj_TUhGnLtHdiulUKx3xOi5WSiBRAXBPOEUohQ4wv3b3B8VXnGs5jAoWFJpjwnVrq9WG0zDHgPnjLaUyIp2XPoI0HxDjqaeU-omQP61GgK6bKgaufQxbGMWL5lWTcBR7cI5IzfUcDT1yCBNxf-AR2rLQhakFqg6_arFAb3I13T0Ix7DIWdz_x7B57IQqIi-wUBRyLH_uu6yJzt2-jGsbDckTzqyTzzrvRirHkGzLmH6BV5sqzsWLXdVepRuG9-JfvnDpacZNrOx1FPDxO43Uxl2HPMQwI2qquM3FPGG_g1GuBTXK2-Mn_pi7pvz2Wo9tYc9ZoI7kqo-PFnCSjak-u3gyEB6EC3N3KC9dgVC0cXqhBgafZB3Nkl8_aC4k3bLtkANz-c67QrNFWXUcLv7qUmTwL48wZ4cn3ZituJRdxT3lxDBcv-LMyZXWBNA-fVCAjrImBN-W57vMfkELQ8enYsVmhhFSCPzKCEKFqRD7wgkD2gn9F3CnRMgMyyCrGOh1eskRCXIjoZSw5m6nDfjjJxMMbVAcjfmeo1ASMCP0VSuaoppJsdEf-M1N7G9u8Hv2DL3erH9gcDXLYaBElTTS5-QtQwS5HVacw0Jt6O06bD-AxT-VlyFxY0lTVcCPV8vUVZ7PBZCPOXr1xHATp1xjTIp-MjYByFPo5xU7RqJqNKxcXWzSY3vvanZxJ7KPCqlxheMceV-S-JyUxp1q-77djuoW9x7PH5f2pSPoJa7bSlGPTgOPCXhHEabv_YiXsMeEUwxOsri77CdNUCkgM-mV-Ynlz3m00 + + Remote Protocol Flow + +The details of each step shown in the previous picture are described in the table below. + + +.. list-table:: + :widths: 10 50 + :header-rows: 1 + + * - **Id** + - **Description** + * - **1**, **2** + - The User requests to access to a protected resource, the Relying Party redirects the User to a discovery page in which the User selects the *Login with the Wallet* button. The Authorization flow starts. + * - **3**, **4**, + - The Relying Party provides the Wallet Instance with a URL where a generic signed Request Object can be downloaded. + * - **5**, **6**, **7**, **8**, **9** + - In the **Cross Device Flow**: the Request URI is provided in the form of a QR Code that is shown to the User. The User frames the QRCode with the Wallet Instance and extracts ``client_id``, ``request_uri`` and ``state``. In the **Same Device Flow** the Relying Party provides the same information of the Cross-Device flow but in the form of HTTP Redirect Location (302). + * - **10**, **11**, **12** + - The Wallet Instance obtains the signed Request Object. + * - **13**, **14** and **15** + - The Wallet Instance checks if the Relying Party has provided the ``request_uri_method`` within its signed Request Object. If true, the Wallet provides its metadata in the to the Relying Party. The Relying PArty produces a new signed Request Object compliant to the Wallet technical capabilities. + * - **13**, **14**, **15**, **16**, **17**, **18** + - The Request Object JWS is verified by the Wallet Instance. The Wallet processes the Relying Party metadata and applies the policies related to the Relying Party, attesting whose Digital Credentials and User data the Relying Party is granted to request. + * - **19**, **20** + - The Wallet Instance requests the User's consent for the release of the Credentials. The User authorizes and consents the presentation of the Credentials by selecting/deselecting the personal data to release. + * - **21** + - The Wallet Instance provides the Authorization Response to the Relying Party using an HTTP request with the method POST (response mode "direct_post"). + * - **22**, **23**, **24**, **25** and **26** + - The Relying Party verifies the Authorization Response, extracts the Wallet Attestation to establish the trust with the Wallet Solution. The Relying Party extracts the Digital Credentials and attests the trust to the Credentials Issuer and the proof of possession of the Wallet Instance about the presented Digital Credentials. Finally, the Relying Party verifies the revocation status of the presented Digital Credentials. + * - **27** and **28** + - The Relying Party provides to the Wallet a redirect URI with a response code to be used by the Wallet to finalize the authentication. + * - **29** + - The User is informed by the Wallet Instance that the Autentication succeded, then the protected resource is made available to the User. + + +Request URI with HTTP POST +-------------------------- + +The Relying Party SHOULD provide the POST method with its ``request_uri`` endpoint +allowing the Wallet Instance to inform the Relying Party about its technical capabilities. + +This feature can be useful when, for example, the Wallet Instance supports +a restricted set of features, supported algorithms or a specific url for +its ``authorization_endpoint``, and any other information that it deems necessary to +provide to the Relying Party the parameters necessary for better interoperability. + +.. warning:: + The Wallet Instance, when providing its technical capabilities to the + Relying Party, MUST NOT include any User information or other explicit + information regarding the hardware used or usage preferences of its User. + +If both the Relying Party and the Wallet Instance +supports the ``request_uri_method`` with HTTP POST, +the Wallet Instance capabilities MUST +be provided using an HTTP request to the `request_uri` endpoint of the Relying Party, +with the method POST and content type set to `application/json`. + +A non-normative example of the HTTP request is represented below: + +.. code:: http + + POST /request-uri HTTP/1.1 + HOST: relying-party.example.org + Content-Type: application/json + + { + "authorization_endpoint": "https://wallet-solution.digital-strategy.europa.eu/authorization", + "response_types_supported": [ + "vp_token" + ], + "response_modes_supported": [ + "form_post.jwt" + ], + "vp_formats_supported": { + "vc+sd-jwt": { + "sd-jwt_alg_values": [ + "ES256", + "ES384" + ] + } + }, + "request_object_signing_alg_values_supported": [ + "ES256" + ], + "presentation_definition_uri_supported": false, + } + +The response of the Relying Party is defined in the section below. + + +Authorization Request Details +----------------------------- + +The Relying Party MUST create a Request Object in the form of a signed JWT and +it MUST provide it to the Wallet Instance through an HTTP URL (request URI). +The HTTP URL points to the web resource where the signed request object is +available for download. The URL parameters contained in the Relying Party +response, containing the request URI, are described in the Table below. + +.. list-table:: + :widths: 25 50 + :header-rows: 1 + + * - **Name** + - **Description** + * - **client_id** + - Unique identifier of the Relying Party. + * - **request_uri** + - The HTTPs URL where the Relying Party provides the signed Request Object to the Wallet Instance. + + + +Below a non-normative example of the response containing the required parameters previously described. + +.. code-block:: javascript + + https://wallet-solution.digital-strategy.europa.eu/authorization?client_id=...&request_uri=... + +The value corresponding to the `request_uri` endpoint SHOULD be randomized, according to `RFC 9101, The OAuth 2.0 Authorization Framework: JWT-Secured Authorization Request (JAR) `_ Section 5.2.1. + + +In the **Same Device Flow** the Relying Party uses an HTTP response redirect (with status code set to 302) as represented in the following non-normative example: + +.. code:: text + + HTTP/1.1 /authorization Found + Location: https://wallet-solution.digital-strategy.europa.eu? + client_id=https%3A%2F%2Frelying-party.example.org%2Fcb + &request_uri=https%3A%2F%2Frelying-party.example.org%2Frequest_uri + + +In the **Cross Device Flow**, a QR Code is shown by the Relying Party to the User in order to provide the Authorization Request. The User frames the QR Code using their Wallet Instance. + +Below is represented a non-normative example of a QR Code issued by the Relying Party. + +.. figure:: ../../images/verifier_qr_code.svg + :figwidth: 50% + :align: center + + +Below is represented a non-normative example of the QR Code raw payload: + +.. code-block:: text + + https://wallet-solution.digital-strategy.europa.eu/authorization?client_id=https%3A%2F%2Frelying-party.example.org&request_uri=https%3A%2F%2Frelying-party.example.org + +.. note:: + The *error correction level* chosen for the QR Code MUST be Q (Quartily - up to 25%), since it offers a good balance between error correction capability and data density/space. This level of quality and error correction allows the QR Code to remain readable even if it is damaged or partially obscured. + + +Cross Device Flow Status Checks and Security +-------------------------------------------- + +When the flow is Cross Device, the user-agent needs to check the session status to the endpoint made available by Relying Party (status endpoint). This check MAY be implemented in the form of JavaScript code, within the page that shows the QRCode, then the user-agent checks the status with a polling strategy in seconds or a push strategy (eg: web socket). + +Since the QRcode page and the status endpoint are implemented by the Relying Party, it is under its responsability the implementation details of this solution, since it is related to the Relying Party's internal API. + +The Relying Party MUST bind the request of the user-agent, with a Secure and HttpOnly session cookie, with the issued request. The request url SHOULD include a parameter with a random value. The HTTP response returned by this specialized endpoint MAY contain the HTTP status codes listed below: + +* **201 Created**. The signed Request Object was issued by the Relying Party that waits to be downloaded by the Wallet Instance at the **request_uri** endpoint. +* **202 Accepted**. This response is given when the signed Request Object was obtained by the Wallet Instance. +* **200 OK**. The Wallet Instance has provided the presentation to the Relying Party's **response_uri** endpoint and the User authentication is successful. The Relying Party updates the session cookie allowing the user-agent to access to the protected resource. An URL is provided carrying the location where the user-agent is intended to navigate. +* **401 Unauthorized**. The Wallet Instance or its User have rejected the request, or the request is expired. The QRCode page SHOULD be updated with an error message. + +Below a non-normative example of the HTTP Request to this specialized endpoint, where the parameter ``id`` contains an opaque and random value: + +.. code:: + + GET /session-state?id=3be39b69-6ac1-41aa-921b-3e6c07ddcb03 + HTTP/1.1 + HOST: relying-party.example.org + + +Request Object Details +---------------------- + +Below a non-normative example of HTTP request made by the Wallet Instance to the Relying Party. + +.. code-block:: javascript + + GET /request_uri HTTP/1.1 + HOST: relying-party.example.org + + +Request URI response +-------------------- + +The Relying Party issues the signed Request Object, where a non-normative example in the form of decoded header and payload is shown below: + +.. code-block:: text + + { + "alg": "ES256", + "typ": "JWT", + "kid": "e0bbf2f1-8c3a-4eab-a8ac-2e8f34db8a47", + "trust_chain": [ + "MIICajCCAdOgAwIBAgIC...awz", + "MIICajCCAdOgAwIBAgIC...2w3", + "MIICajCCAdOgAwIBAgIC...sf2" + ] + } + . + { + "scope": "eu.europa.ec.eudiw.pid.it.1 tax_id_number", + "client_id_scheme": "entity_id", + "client_id": "https://relying-party.example.org", + "response_mode": "direct_post.jwt", + "response_type": "vp_token", + "response_uri": "https://relying-party.example.org/response_uri", + "nonce": "2c128e4d-fc91-4cd3-86b8-18bdea0988cb", + "state": "3be39b69-6ac1-41aa-921b-3e6c07ddcb03", + "iss": "https://relying-party.example.org", + "iat": 1672418465, + "exp": 1672422065, + "request_uri_method": "post" + } + +The JWS header parameters are described below: + +.. list-table:: + :widths: 25 50 + :header-rows: 1 + + * - **Name** + - **Description** + * - **alg** + - Algorithm used to sign the JWT, according to [:rfc:`7516#section-4.1.1`]. It MUST be one of the supported algorithms in Section *Cryptographic Algorithms* and MUST NOT be set to ``none`` or to a symmetric algorithm (MAC) identifier. + * - **typ** + - Media Type of the JWT, as defined in [:rfc:`7519`]. + * - **kid** + - Key ID of the public key needed to verify the JWS signature, as defined in [:rfc:`7517`]. REQUIRED when ``trust_chain`` is used. + * - **trust_chain** + - Sequence of Entity Statements that composes the Trust Chain related to the Relying Party, as defined in `OIDC-FED`_ Section *3.2.1. Trust Chain Header Parameter*. + + +The JWS payload parameters are described herein: + +.. list-table:: + :widths: 25 50 + :header-rows: 1 + + * - **Name** + - **Description** + * - **scope** + - Aliases for well-defined Presentation Definitions IDs. It is used to identify which required credentials and User attributes are requested by the Relying Party, according to the Section "Using scope Parameter to Request Verifiable Credential(s)" of [OID4VP]. + * - **client_id_scheme** + - String identifying the scheme of the value in the ``client_id``. It MUST be set to the value ``entity_id``. + * - **client_id** + - Unique Identifier of the Relying Party. + * - **response_mode** + - It MUST be set to ``direct_post.jwt``. + * - **response_type** + - It MUST be set to``vp_token``. + * - **response_uri** + - The Response URI to which the Wallet Instance MUST send the Authorization Response using an HTTP request using the method POST. + * - **nonce** + - Fresh cryptographically random number with sufficient entropy, which length MUST be at least 32 digits. + * - **state** + - Unique identifier of the Authorization Request. + * - **iss** + - The entity that has issued the JWT. It will be populated with the Relying Party client id. + * - **iat** + - Unix Timestamp, representing the time at which the JWT was issued. + * - **exp** + - Unix Timestamp, representing the expiration time on or after which the JWT MUST NOT be valid anymore. + * - **request_uri_method** + - String determining the HTTP method to be used with the `request_uri` endpoint to provide the Wallet metadata to the Relying Party. The value is case-insensitive and can be set to: `get` or `post`. The GET method, as defined in [@RFC9101], involves the Wallet sending a GET request to retrieve a Request Object. The POST method involves the Wallet requesting the creation of a new Request Object by sending an HTTP POST request, with its metadata, to the request URI of the Relying Party. + +.. warning:: + + Using the parameter ``scope`` requires that the Relying Party Metadata MUST contain the ``presentation_definition``, where a non-normative example of it is given below: + +.. code-block:: JSON + + { + "presentation_definition": { + "id": "presentation definitions", + "input_descriptors": [ + { + "id": "eu.europa.ec.eudiw.pid.it.1", + "name": "Person Identification Data", + "purpose": "User authentication", + "format": "vc+sd-jwt", + "constraints": { + "fields": [ + { + "path": [ + "$.credentialSubject.unique_id", + "$.credentialSubject.given_name", + "$.credentialSubject.family_name", + ] + } + ], + "limit_disclosure": "preferred" + } + } + ] + } + } + + +.. note:: + + The following parameters, even if defined in [OID4VP], are not mentioned in the previous non-normative example, since their usage is conditional and may change in future release of this documentation. + + - ``presentation_definition``: JSON object according to `Presentation Exchange `_. This parameter MUST not be present when ``presentation_definition_uri`` or ``scope`` are present. + - ``presentation_definition_uri``: Not supported. String containing an HTTPS URL pointing to a resource where a Presentation Definition JSON object can be retrieved. This parameter MUST be present when ``presentation_definition`` parameter or a ``scope`` value representing a Presentation Definition is not present. + - ``client_metadata``: A JSON object containing the Relying Party metadata values. The ``client_metadata`` parameter MUST NOT be present when ``client_id_scheme`` is ``entity_id``. Since the ``client_metadata`` is taken from ``trust_chain``, this parameter is intended to not be used. + - ``client_metadata_uri``: string containing an HTTPS URL pointing to a resource where a JSON object with the Relying Party metadata can be retrieved. The ``client_metadata_uri`` parameter MUST NOT be present when ``client_id_scheme`` is ``entity_id``. Since the ``client_metadata`` is taken from ``trust_chain``, this parameter is intended to not be used. + + +Authorization Response Details +------------------------------ + +After getting the User authorization and consent for the presentation of the Credentials, the Wallet sends the Authorization Response to the Relying Party ``response_uri`` endpoint, the content SHOULD be encrypted according `OPENID4VP`_ Section 6.3, using the Relying Party public key. + +.. note:: + **Why the response is encrypted?** + + The response sent from the Wallet Instance to the Relying Party is encrypted to prevent a malicious agent from gaining access to the plaintext information transmitted within the Relying Party's network. This is only possible if the network environment of the Relying Party employs `TLS termination `_. Such technique employs a termination proxy that acts as an intermediary between the client and the webserver and handles all TLS-related operations. In this manner, the proxy deciphers the transmission's content and either forwards it in plaintext or by negotiates an internal TLS session with the actual webserver's intended target. In the first scenario, any malicious actor within the network segment could intercept the transmitted data and obtain sensitive information, such as an unencrypted response, by sniffing the transmitted data. + +Below a non-normative example of the request: + +.. code-block:: http + + POST /response_uri HTTP/1.1 + HOST: relying-party.example.org + Content-Type: application/x-www-form-urlencoded + + response=eyJhbGciOiJFUzI1NiIs...9t2LQ + + +Below is a non-normative example of the decrypted JSON ``response`` content: + +.. code-block:: + + { + "state": "3be39b69-6ac1-41aa-921b-3e6c07ddcb03", + "vp_token": [ + "eyJhbGciOiJFUzI1NiIs...PT0iXX0", + $WalletInstanceAttestation-JWT + ], + "presentation_submission": { + "definition_id": "32f54163-7166-48f1-93d8-ff217bdb0653", + "id": "04a98be3-7fb0-4cf5-af9a-31579c8b0e7d", + "descriptor_map": [ + { + "id": "eu.europa.ec.eudiw.pid.it.1", + "path": "$.vp_token.verified_claims.claims._sd[0]", + "format": "vc+sd-jwt" + } + ] + } + } + +Where the following parameters are used: + +.. list-table:: + :widths: 25 50 + :header-rows: 1 + + * - **Name** + - **Description** + * - **vp_token** + - JSON Array containing the Verifiable Presentation(s). There MUST be at least two signed presentations in this Array: + - The Requested Digital Credential (one or more, if in format SD-JWT VC or MDOC CBOR) + - The Wallet Instance Attestation + * - **presentation_submission** + - JSON Object containing the mappings between the requested Verifiable Credentials and where to find them within the returned Verifiable Presentation Token. + * - **state** + - Unique identifier provided by the Relying Party within the Authorization Request. + + +Below is a non-normative example of the ``vp_token`` decoded content, represented in the form of JWS header and payload, separated by a period: + +.. code-block:: text + + { + "alg": "ES256", + "typ": "JWT", + "kid": "e0bbf2f1-8c3a-4eab-a8ac-2e8f34db8a47" + } + . + { + "iss": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c", + "jti": "3978344f-8596-4c3a-a978-8fcaba3903c5", + "aud": "https://relying-party.example.org/response_uri", + "iat": 1541493724, + "exp": 1573029723, + "nonce": "2c128e4d-fc91-4cd3-86b8-18bdea0988cb" + "vp": "~~~...~" + } + +Where the following parameters are used: + +.. list-table:: + :widths: 25 50 + :header-rows: 1 + + * - **Name** + - **Description** + * - **vp** + - The Digital Credential in its original state. The public key contained in the Digital Credential MUST be used to verify the entire VP JWS as Proof of Possession of the private key which the public key is included in the Digital Credential. Eg: for SD-JWT VC the pblic key is provided within the ``cnf.jwk`` claim. + * - **jti** + - JWS unique identifier. + * - **iat** + - Unix timestamp of the time of issuance of this presentation. + * - **exp** + - Unix timestamp beyond which this presentation will no longer be considered valid. + * - **aud** + - Audience of the VP, corresponding to the ``response_uri`` within the Authorization request issued by the Relying Party. + * - **nonce** + - The nonce value provided by the Relying Party within the Authorization Request. + + +Redirect URI +------------ + +When the Relying Party provides the redirect URI, the Wallet MUST send the user-agent to this redirect URI. The redirect URI allows the Relying Party to continue the interaction with the End-User on the device where the Wallet resides after the Wallet has sent the Authorization Response to the response URI. + +The Relying Party MUST include a response code withing the redirect URI. The response code is a fresh, cryptographically random number used to ensure only the receiver of the redirect can fetch and process the Authorization Response. The number could be added as a path component, as a parameter or as a fragment to the URL. It is RECOMMENDED to use a cryptographic random value of 128 bits or more at the time of the writing of this specification. + +The following is a non-normative example of the response from the Relying Party to the Wallet upon receiving the Authorization Response at the Response Endpoint. + + +.. code-block:: http + + HTTP/1.1 200 OK + Content-Type: application/json;charset=UTF-8 + + { + "redirect_uri": "https://relying-party.example.org/cb#response_code=091535f699ea575c7937fa5f0f454aee" + } + +The ``redirect_uri`` value MUST be used with an HTTP method GET by either the Wallet or the user-agent to redirect the User to the Relying Party in order to complete the authentication process. The specific entity that performs this action depends on whether the flow is Same device or Cross device. + + +Relying Party Entity Configuration +----------------------------------- +According to the `Trust Model`_ section, the Relying Party is a Federation Entity and MUST expose a *well-known* endpoint containing its Entity Configuration. + +Below a non-normative example of the request made by the Wallet Instance to the *openid-federation* well-known endpoint to obtain the Relying Party Entity Configuration: + +.. code-block:: http + + GET /.well-known/openid-federation HTTP/1.1 + HOST: relying-party.example.org + + +Below is a non-normative response example: + +.. code-block:: text + + { + "alg": "RS256", + "kid": "2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs", + "typ": "entity-statement+jwt" + } + . + { + "exp": 1649590602, + "iat": 1649417862, + "iss": "https://rp.example.it", + "sub": "https://rp.example.it", + "jwks": { + "keys": [ + { + "kty": "RSA", + "n": "5s4qi ...", + "e": "AQAB", + "kid": "2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs" + } + ] + }, + "metadata": { + "wallet_relying_party": { + "application_type": "web", + "client_id": "https://rp.example.it", + "client_name": "Name of an example organization", + "jwks": { + "keys": [ + { + "kty": "RSA", + "use": "sig", + "n": "1Ta-sE ...", + "e": "AQAB", + "kid": "YhNFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs", + "x5c": [ "..." ] + } + ] + }, + + "contacts": [ + "ops@relying-party.example.org" + ], + + "request_uris": [ + "https://relying-party.example.org/request_uri" + ], + "response_uris": [ + "https://relying-party.example.org/response_uri" + ], + "default_acr_values": [ + "https://www.spid.gov.it/SpidL2", + "https://www.spid.gov.it/SpidL3" + ], + "vp_formats": { + "vc+sd-jwt": { + "sd-jwt_alg_values": [ + "ES256", + "ES384" + ], + "kb-jwt_alg_values": [ + "ES256", + "ES384" + ] + } + }, + "presentation_definitions": [ + { + "id": "eu.europa.ec.eudiw.pid.it.1", + "input_descriptors": [ + { + "id": "IdentityCredential", + "format": { + "vc+sd-jwt": {} + }, + "constraints": { + "limit_disclosure": "required", + "fields": [ + { + "path": [ + "$.type" + ], + "filter": { + "type": "string", + "const": "IdentityCredential" + } + }, + { + "path": [ + "$.family_name" + ] + }, + { + "path": [ + "$.given_name" + ] + }, + { + "path": [ + "$.unique_id" + ], + "intent_to_retain": "true" + } + ] + } + } + ] + }, + { + "id": "mDL-sample-req", + "input_descriptors": [ + { + "id": "mDL", + "format": { + "mso_mdoc": { + "alg": [ + "EdDSA", + "ES256" + ] + }, + "constraints": { + "limit_disclosure": "required", + "fields": [ + { + "path": [ + "$.mdoc.doctype" + ], + "filter": { + "type": "string", + "const": "org.iso.18013.5.1.mDL" + } + }, + { + "path": [ + "$.mdoc.namespace" + ], + "filter": { + "type": "string", + "const": "org.iso.18013.5.1" + } + }, + { + "path": [ + "$.mdoc.family_name" + ], + "intent_to_retain": "false" + }, + { + "path": [ + "$.mdoc.portrait" + ], + "intent_to_retain": "false" + }, + { + "path": [ + "$.mdoc.driving_privileges" + ], + "intent_to_retain": "false" + } + ] + } + } + } + ] + } + ], + + "default_max_age": 1111, + + // JARM related + "authorization_signed_response_alg": [[ + "ES256" + ], + "authorization_encrypted_response_alg": [ + "RSA-OAEP", + "RSA-OAEP-256" + ], + "authorization_encrypted_response_enc": [ + "A128CBC-HS256", + "A192CBC-HS384", + "A256CBC-HS512", + "A128GCM", + "A192GCM", + "A256GCM" + ], + + // SIOPv2 related + "subject_type": "pairwise", + "require_auth_time": true, + "id_token_signed_response_alg": [ + "ES256" + ], + "id_token_encrypted_response_alg": [ + "RSA-OAEP", + "RSA-OAEP-256" + ], + "id_token_encrypted_response_enc": [ + "A128CBC-HS256", + "A192CBC-HS384", + "A256CBC-HS512", + "A128GCM", + "A192GCM", + "A256GCM" + ], + }, + "federation_entity": { + "organization_name": "OpenID Wallet Relying Party example", + "homepage_uri": "https://relying-party.example.org/home", + "policy_uri": "https://relying-party.example.org/policy", + "logo_uri": "https://relying-party.example.org/static/logo.svg", + "contacts": [ + "tech@relying-party.example.org" + ] + } + }, + "authority_hints": [ + "https://registry.eudi-wallet.example.it" + ] + } + } + + +The Entity Configuration is a JWS, where its header parameters are defined below: + +.. list-table:: + :widths: 25 50 + :header-rows: 1 + + * - **Name** + - **Description** + * - **alg** + - Algorithm used to sign the JWT + * - **typ** + - Media Type of the JWT + * - **kid** + - Key ID used identifying the key used to sign the JWS + + +.. note: + The Relying Party specific metadata parameter are experimental + and still under discussion `here `_. + diff --git a/refs/pull/212/merge/en/_sources/revocation-lists.rst.txt b/refs/pull/212/merge/en/_sources/revocation-lists.rst.txt new file mode 100644 index 000000000..49cc7b174 --- /dev/null +++ b/refs/pull/212/merge/en/_sources/revocation-lists.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _revocation-lists.rst: + +revocation-lists.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/refs/pull/212/merge/en/_sources/ssi-introduction.rst.txt b/refs/pull/212/merge/en/_sources/ssi-introduction.rst.txt new file mode 100644 index 000000000..263d0cb66 --- /dev/null +++ b/refs/pull/212/merge/en/_sources/ssi-introduction.rst.txt @@ -0,0 +1,41 @@ +.. include:: ../common/common_definitions.rst + +.. _ssi-introduction.rst: + +Self Sovereign Identity ++++++++++++++++++++++++ + +Introduction to SSI +------------------- + +**Definition** + +Self-Sovereign Identity (SSI) refers to a new paradigm in Identity and Access Management (IAM) that improves the privacy and grants complete control and ownership over the personal data by their owner, the citizens. +Users possess their digital documents and determine to which actors they present these documents, with the ability to revoke the use of said documents, all while maintaining a history of their activities. + +The main difference between this new approach and the traditional IAM infrastructure is that during the presentation phase there are no intermediates between the Wallet (Holder of the credentials) and the Relying Party, while in the SAML2 or OIDC based infrastructure an Identity Provider is always involved, knowing which services a citizen is accessing to. + +SSI is also significant in the field of data exchange and data governance. This is relevant at both national and European levels, including the new eIDAS Regulation. In fact, it envisions a login option designed for European Users - be they citizens, public administrations, or companies - who want to access another Member State's services using their national authentication systems. + +The main roles in an SSI ecosystem are are listed as follow: + + - Issuers: parties who can issue digital credentials about a person; + - verifiers: parties who request Holders' digital credentials for authentication and authorization purposes; + - Holders: individuals who own a Wallet and have control over the digital credentials they can request, acquire, store, and present to verifiers; + - Verifiable Data Registries: Authorities that publish certificates, attestations, metadata, and schemes needed for allowing the trust establishment between the parties. + +In the SSI model, the data source (e.g., an educational institution) provides digital credentials to the User, who can store them in their digital Wallet. +A secure Self-Sovereign Identity Wallet is crucial, as it allows people to carry their credentials on their personal digital devices. The Wallet typically comes in the form of an application on the User's mobile phone. Portability is, therefore, one of the principles of SSI. + +Other key elements that characterize an SSI system include: + + - **Privacy and control**: SSI enables individuals to maintain control over their personal data. They can choose what information to release, to whom, and for what purpose; + - **Security**: SSI leverages advanced cryptographic techniques to ensure the integrity and security of identity information. It avoids the risk of identity theft, fraud, and unauthorized access since the data remains under the individual's control; + - **Interoperability**: SSI promotes interoperability by enabling different systems and organizations to recognize and verify identities without relying on a central authority. This allows for seamless and trusted interactions between individuals, organizations, and even across borders; + - **Efficiency and cost reduction**: individuals can manage their own identities with SSI, eliminating the need for multiple identity credentials and repetitive identity verification processes. This can streamline administrative procedures, reduce costs, and enhance the user experience. + +**Example** + +When a User wants to purchase a good or access to a service, the service provider asks the User for authentication or for a specific proof. Instead of presenting physical identification documents or disclosing their full data, the individual can use their SSI system if supported by the service provider. +An example of SSI in action could be a scenario where an individual needs to prove their age to access a restricted service, such as purchasing age-restricted items. They would release only the necessary information, such as a digitally signed proof of being above the legal age, without revealing any other personal details. The verifier can then cryptographically validate the proof. + diff --git a/refs/pull/212/merge/en/_sources/standards.rst.txt b/refs/pull/212/merge/en/_sources/standards.rst.txt new file mode 100644 index 000000000..2a2c017f8 --- /dev/null +++ b/refs/pull/212/merge/en/_sources/standards.rst.txt @@ -0,0 +1 @@ +.. include:: ../common/standards.rst diff --git a/refs/pull/212/merge/en/_sources/trust.rst.txt b/refs/pull/212/merge/en/_sources/trust.rst.txt new file mode 100644 index 000000000..87cd8e5a7 --- /dev/null +++ b/refs/pull/212/merge/en/_sources/trust.rst.txt @@ -0,0 +1,632 @@ +.. include:: ../common/common_definitions.rst + +.. _trust.rst: + +The Infrastructure of Trust ++++++++++++++++++++++++++++ + +The EUDI Wallet Architecture Reference Framework (`EIDAS-ARF`_) describes the Trust Model as a *"collection of rules that ensure the legitimacy of the components and the entities involved in the EUDI Wallet ecosystem"*. + +This section outlines the implementation of the Trust Model in an infrastructure that complies with OpenID Federation 1.0 `OIDC-FED`_. This infrastructure involves a RESTful API for distributing metadata, metadata policies, trust marks, public keys, X.509 certificates, and the revocation status of the participants, also called Federation Entities. + +The Infrastructure of trust facilitates the application of a trust assessment mechanism among the parties defined in the `EIDAS-ARF`_. + +.. figure:: ../../images/trust-roles.svg + :alt: federation portrait + :width: 100% + + The roles within the Federation, where the Trust Anchor oversees its subordinates, + which include one or more Intermediates and Leaves. In this + representation, both the Trust Anchor and the Intermediates MAY assume the role of Accreditation Body. + + +Federation Roles +------------------ + +All the participants are Federation Entities that MUST be accredited by an Accreditation Body, +except for Wallet Instances which are End-User's personal devices certified by their Wallet Provider. + +.. note:: + The Wallet Instance, as a personal device, is certified as reliable through a verifiable attestation issued and signed by a trusted third party. + + This is called *Wallet Attestation* and is documented in `the dedicated section `_. + + +Below the table with the summary of the Federation Entity roles, mapped on the corresponding EUDI Wallet roles, as defined in the `EIDAS-ARF`_. + ++-----------------------------------------+----------------+-----------------------------------+ +| EUDI Role | Federation Role| Notes | ++=========================================+================+===================================+ +| Public Key Infrastructure (PKI) | Trust Anchor | The Federation has PKI | +| | | capabilities. The | +| | Intermediates | Entity that configures | +| | | the entire infrastructure | +| | | is the Trust Anchor. | +| | | | ++-----------------------------------------+----------------+-----------------------------------+ +| Qualified Trust Service Provider (QTSP)| Leaf | | ++-----------------------------------------+----------------+-----------------------------------+ +| Person Identification Data Provider | Leaf | | ++-----------------------------------------+----------------+-----------------------------------+ +| Qualified Electronic Attestations | Leaf | | +| of Attributes Provider | | | ++-----------------------------------------+----------------+-----------------------------------+ +| Electronic Attestations of | Leaf | | +| Attributes Provider | | | ++-----------------------------------------+----------------+-----------------------------------+ +| Relying Party | Leaf | | ++-----------------------------------------+----------------+-----------------------------------+ +| Trust Service Provider (TSP) | Leaf | | ++-----------------------------------------+----------------+-----------------------------------+ +| Trusted List | Trust Anchor | The listing endpoint, the | +| | | trust mark status endpoint | +| | Intermediates | and the fetch endpoint must | +| | | be exposed by both Trust Anchors | +| | | and Intermediates, making | +| | | the Trusted List distributed | +| | | over multiple Federation Entities,| +| | | where each of these is responsible| +| | | for their accredited subordinates.| ++-----------------------------------------+----------------+-----------------------------------+ +| Wallet Provider | Leaf | | ++-----------------------------------------+----------------+-----------------------------------+ + + +General Properties +------------------ + +OpenID Federation facilitates the building of an infrastructure that is: + +- **Secure and Tamper-proof**, Entities' attestations of metadata and keys are cryptographically signed in the Trust Chain, comprised of attestations issued by multiple parties. These attestations, called statements, cannot be forged or tampered by an adversary; +- **Privacy-preserving**, the infrastructure is public and exposes public data such as public keys and metadata of the participants. It does not require authentication of the consumers and therefore does not track who is assessing trust against whom; +- **Guarantor of the non-repudiation of long-lived attestations**, historical keys endpoints and historical Trust Chains are saved for years according to data retention policies. This enables the certification of the validity of historical compliance, even in cases of revocation, expiration, or rotation of the keys used for signature verification; +- **Dynamic and flexible**, any participants have the freedom to modify parts of their metadata autonomously, as these are published within their domains and verified through the Trust Chain. Simultaneously, the Trust Anchor or its Intermediate may publish a metadata policy to dynamically modify the metadata of all participants - such as disabling a vulnerable signature algorithm - and obtain certainty of propagation within a configured period of time within the federation; +- **Developer friendly**, JWT and JSON formats have been adopted on the web for years. They are cost-effective in terms of storage and processing and have a wide range of solutions available, such as libraries and software development kits, which enable rapid implementation of the solution; +- **Scalable**, the Trust Model can accommodate more than a single organization by using Intermediates and multiple Trust Anchors where needed. + +Trust Model Requirements +------------------------ + +In the table below is provided the map of the components that the ARF defines within the Trust Model, in the same table is provided their coverage in `OIDC-FED`_. + ++----------------------------------------------------+--------------+----------------+ +| Component | Satisfied | how | ++====================================================+==============+================+ +| Issuers identification | |check-icon| | Trust Chain | ++----------------------------------------------------+--------------+----------------+ +| Issuers registration | |check-icon| | Trust Anchor | +| | | | +| | | Intermediates | +| | | accreditation | +| | | system | +| | | | ++----------------------------------------------------+--------------+----------------+ +| Recognised data models and schemas | |check-icon| | Entity | +| | | Configuration | +| | | | +| | | Entity | +| | | Statements | ++----------------------------------------------------+--------------+----------------+ +| Relying Parties' registration and authentication | |check-icon| | | +| | | Trust Chains | +| | | | +| | | Federation | +| | | Entity | +| | | Discovery | ++----------------------------------------------------+--------------+----------------+ +| Trust mechanisms in a cross-domain scenario | |check-icon| | | +| | | Trust Chains | +| | | | +| | | Federation | +| | | Entity | +| | | Discovery | ++----------------------------------------------------+--------------+----------------+ + + +Federation API endpoints +------------------------ + +OpenID Federation 1.0 uses RESTful Web Services secured over +HTTPs. OpenID Federation 1.0 defines which are the web endpoints that the participants MUST make +publicly available. The table below summarises the endpoints and their scopes. + +All the endpoints listed below are defined in the `OIDC-FED`_ specs. + ++---------------------------+----------------------------------------------+--------------------------------+-----------------+ +| endpoint name | http request | scope | required for | ++===========================+==============================================+================================+=================+ +| | | | Trust Anchor | +| | | | | +| federation metadata | **GET** .well-known/openid-federation |Metadata that an Entity | Intermediate | +| | |publishes about itself, | | +| | |verifiable with a trusted third | Wallet Provider| +| | |party (Superior Entity). It's | | +| | |called Entity Configuration. | Relying Party | +| | | | | +| | | | Credential | +| | | | Issuer | ++---------------------------+----------------------------------------------+--------------------------------+-----------------+ +| subordinate list endpoint | **GET** /list |Lists the Subordinates. | Trust Anchor | +| | | | | +| | | | Intermediate | ++---------------------------+----------------------------------------------+--------------------------------+-----------------+ +| fetch endpoint | **GET** /fetch?sub=https://rp.example.org | | Trust Anchor | +| | |Returns a signed document (JWS) | | +| | |about a specific subject, its | Intermediate | +| | |Subordinate. It's called Entity | | +| | |Statement. | | ++---------------------------+----------------------------------------------+--------------------------------+-----------------+ +| trust mark status | **POST** /status?sub=...&trust_mark_id=... | | Trust Anchor | +| | |Returns the status of the | | +| | |issuance (validity) of a Trust | Intermediate | +| | |Mark related to a specific | | +| | |subject. | | ++---------------------------+----------------------------------------------+--------------------------------+-----------------+ +| historical keys | **GET** | | Trust Anchor | +| | |Lists the expired and revoked | | +| | |keys, with the motivation of the| Intermediate | +| | .well-known/openid-federation-historical-jwks|revocation. | | +| | | | | ++---------------------------+----------------------------------------------+--------------------------------+-----------------+ + +All the responses of the federation endpoints are in the form of JWS, with the exception of the **Subordinate Listing endpoint** and the **Trust Mark Status endpoint** that are served as plain JSON by default. + + +Configuration of the Federation +------------------------------- + +The configuration of the federation is published by the Trust Anchor within its Entity Configuration, it is available at the well-known web path corresponding to **.well-known/openid-federation**. + +All the participants in the federation MUST obtain the federation configuration before entering the operational phase, and they +MUST keep it up-to-date. The federation configuration is the Trust Anchor's Entity Configuration, it contains the +public keys for signature operations and the maximum number of Intermediates allowed between a Leaf and the Trust Anchor (**max_path_length**). + +Below is a non-normative example of a Trust Anchor Entity Configuration, where each parameter is documented in the `OpenID Federation `_ specification: + +.. code-block:: text + + { + "alg": "RS256", + "kid": "FifYx03bnosD8m6gYQIfNHNP9cM_Sam9Tc5nLloIIrc", + "typ": "entity-statement+jwt" + } + . + { + "exp": 1649375259, + "iat": 1649373279, + "iss": "https://registry.eidas.trust-anchor.example.eu", + "sub": "https://registry.eidas.trust-anchor.example.eu", + "jwks": { + "keys": [ + { + "kty": "RSA", + "n": "3i5vV-_ ...", + "e": "AQAB", + "kid": "FifYx03bnosD8m6gYQIfNHNP9cM_Sam9Tc5nLloIIrc", + "x5c": [ ] + }, + { + "kty": "EC", + "kid": "X2ZOMHNGSDc4ZlBrcXhMT3MzRmRZOG9Jd3o2QjZDam51cUhhUFRuOWd0WQ", + "crv": "P-256", + "x": "1kNR9Ar3MzMokYTY8BRvRIue85NIXrYX4XD3K4JW7vI", + "y": "slT14644zbYXYF-xmw7aPdlbMuw3T1URwI4nafMtKrY", + "x5c": [ ] + } + ] + }, + "metadata": { + "federation_entity": { + "organization_name": "example TA", + "contacts":[ + "tech@eidas.trust-anchor.example.eu" + ], + "homepage_uri": "https://registry.eidas.trust-anchor.example.eu", + "logo_uri":"https://registry.eidas.trust-anchor.example.eu/static/svg/logo.svg", + "federation_fetch_endpoint": "https://registry.eidas.trust-anchor.example.eu/fetch", + "federation_resolve_endpoint": "https://registry.eidas.trust-anchor.example.eu/resolve", + "federation_list_endpoint": "https://registry.eidas.trust-anchor.example.eu/list", + "federation_trust_mark_status_endpoint": "https://registry.eidas.trust-anchor.example.eu/trust_mark_status" + } + }, + "trust_mark_issuers": { + "https://registry.eidas.trust-anchor.example.eu/openid_relying_party/public": [ + "https://registry.spid.eidas.trust-anchor.example.eu", + "https://public.intermediary.spid.org" + ], + "https://registry.eidas.trust-anchor.example.eu/openid_relying_party/private": [ + "https://registry.spid.eidas.trust-anchor.example.eu", + "https://private.other.intermediary.org" + ] + }, + "constraints": { + "max_path_length": 1 + } + } + + +Entity Configuration +-------------------- + +The Entity Configuration is the verifiable document that each Federation Entity MUST publish on its own behalf, in the **.well-known/openid-federation** endpoint. + +The Entity Configuration HTTP Response MUST set the media type to `application/entity-statement+jwt`. + +The Entity Configuration MUST be cryptographically signed. The public part of this key MUST be provided in the +Entity Configuration and within the Entity Statement issued by a immediate superior and related to its subordinate Federation Entity. + +The Entity Configuration MAY also contain one or more Trust Marks. + +.. note:: + **Entity Configuration Signature** + + All the signature-check operations regarding the Entity Configurations, Entity Statements and Trust Marks, are carried out with the Federation public keys. For the supported algorithms refer to Section `Cryptografic Algorithm`. + +Entity Configurations Common Parameters +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The Entity Configurations of all the participants in the federation MUST have in common the parameters listed below. + + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - **iss** + - String. Identifier of the issuing Entity. + * - **sub** + - String. Identifier of the Entity to which it is referred. It MUST be equal to ``iss``. + * - **iat** + - UNIX Timestamp with the time of generation of the JWT, coded as NumericDate as indicated at :rfc:`7519`. + * - **exp** + - UNIX Timestamp with the expiry time of the JWT, coded as NumericDate as indicated at :rfc:`7519`. + * - **jwks** + - A JSON Web Key Set (JWKS) :rfc:`7517` that represents the public part of the signing keys of the Entity at issue. Each JWK in the JWK set MUST have a key ID (claim kid) and MAY have a `x5c` parameter, as defined in :rfc:`7517`. It contains the Federation Entity Keys required for the operations of trust evaluation. + * - **metadata** + - JSON Object. Each key of the JSON Object represents a metadata type identifier + containing JSON Object representing the metadata, according to the metadata + schema of that type. An Entity Configuration MAY contain more metadata statements, but only one for each type of + metadata (<**entity_type**>). the metadata types are defined in the section `Metadata Types `_. + + +Entity Configuration Trust Anchor +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The Trust Anchor Entity Configuration, in addition of the common parameters listed above, MAY contain the following parameters: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Required** + * - **constraints** + - JSON Object that describes the trust evaluation mechanisms bounds. It MUST contain the attribute **max_path_length** that + defines the maximum number of Intermediates between a Leaf and the Trust Anchor. + - |check-icon| + * - **trust_mark_issuers** + - JSON Array that defines which Federation authorities are considered trustworthy + for issuing specific Trust Marks, assigned with their unique identifiers. + - |uncheck-icon| + * - **trust_mark_owners** + - JSON Array that lists which entities are considered to be the owners of + specific Trust Marks. + - |uncheck-icon| + + +Entity Configuration Leaves and Intermediates +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In addition to the previously defined claims, the Entity Configuration of the Leaf and of the Intermediate Entities, MUST contain the parameters listed below: + + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Required** + * - **authority_hints** + - Array of URLs (String). It contains a list of URLs of the immediate superior entities, such as the Trust Anchor or + an Intermediate, that issues an Entity Statement related to this subject. + - |check-icon| + * - **trust_marks** + - A JSON Array containing the Trust Marks. + - |uncheck-icon| + +Metadata Types +^^^^^^^^^^^^^^^^ + +In this section are defined the main metadata types mapped to the roles of the ecosystem, +giving the references of the metadata protocol for each of these. + + +.. note:: + + The entries that don't have any reference to a known draft or standard are intended to be defined in this technical reference. + ++------------------+-----------------------------+--------------+ +| Entity | metadata type | references | ++==================+=============================+==============+ +| Trust Anchor | ``federation_entity`` | `OIDC-FED`_ | ++------------------+-----------------------------+--------------+ +| Intermediate | ``federation_entity`` | `OIDC-FED`_ | ++------------------+-----------------------------+--------------+ +| | | | +| Wallet Provider | ``federation_entity`` | -- | +| | | | +| | ``wallet_provider`` | | +| | | | +| | | | ++------------------+-----------------------------+--------------+ +| | | | +| Credential Issuer| ``federation_entity`` | | +| | | | +| | ``openid_credential_issuer``| `OPENID4VCI`_| ++------------------+-----------------------------+--------------+ +| | | | +| Relying Party | ``federation_entity`` | | +| | | | +| | ``wallet_relying_party`` | `OIDC-FED`_ | +| | | | +| | | `OpenID4VP`_ | ++------------------+-----------------------------+--------------+ + +.. note:: + Wallet Provider metadata is defined in the section below. + + `Wallet Solution section `_. + + +Entity Statements +----------------- + +Trust Anchors and Intermediates publish Entity Statements related to their immediate Subordinates. +The Entity Statement MAY contain a metadata policy and the Trust Marks related to a Subordinate. + +The metadata policy, when applied, makes one or more changes to the final metadata of the Leaf. The final metadata of a Leaf is derived from the Trust Chain that contains all the statements, starting from the Entity Configuration up to the Entity Statement issued by the Trust Anchor. + +Trust Anchors and Intermediates MUST expose the Federation Fetch endpoint, where the Entity Statements are requested to validate the Leaf's Entity Configuration signature. + +.. note:: + The Federation Fetch endpoint MAY also publish X.509 certificates for each of the public keys of the Subordinate. Making the distribution of the issued X.509 certificates via a RESTful service. + +Below there is a non-normative example of an Entity Statement issued by an Accreditation Body (such as the Trust Anchor or its Intermediate) in relation to one of its Subordinates. + +.. code-block:: text + + { + "alg": "RS256", + "kid": "em3cmnZgHIYFsQ090N6B3Op7LAAqj8rghMhxGmJstqg", + "typ": "entity-statement+jwt" + } + . + { + "exp": 1649623546, + "iat": 1649450746, + "iss": "https://intermediate.eidas.example.org", + "sub": "https://rp.example.it", + "jwks": { + "keys": [ + { + "kty": "EC", + "kid": "2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs", + "crv": "P-256", + "x": "1kNR9Ar3MzMokYTY8BRvRIue85NIXrYX4XD3K4JW7vI", + "y": "slT14644zbYXYF-xmw7aPdlbMuw3T1URwI4nafMtKrY", + "x5c": [ ] + } + ] + }, + "metadata_policy": { + "wallet_relying_party": { + "scope": { + "subset_of": [ + "eu.europa.ec.eudiw.pid.1", + "given_name", + "family_name", + "email" + ] + }, + "vp_formats": { + "vc+sd-jwt": { + "sd-jwt_alg_values": [ + "ES256", + "ES384" + ], + "kb-jwt_alg_values": [ + "ES256", + "ES384" + ] + } + } + } + } + } + + +.. note:: + + **Entity Statement Signature** + + The same considerations and requirements made for the Entity Configuration + and in relation to the signature mechanisms MUST be applied for the Entity Statements. + + +Entity Statement +^^^^^^^^^^^^^^^^^^ + +The Entity Statement issued by Trust Anchors and Intermediates contains the following attributes: + + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Required** + * - **iss** + - See `OIDC-FED`_ Section 3.1 for further details. + - |check-icon| + * - **sub** + - See `OIDC-FED`_ Section 3.1 for further details. + - |check-icon| + * - **iat** + - See `OIDC-FED`_ Section 3.1 for further details. + - |check-icon| + * - **exp** + - See `OIDC-FED`_ Section 3.1 for further details. + - |check-icon| + * - **jwks** + - Federation JWKS of the *sub* entity. See `OIDC-FED`_ Section 3.1 for further details. + - |check-icon| + * - **metadata_policy** + - JSON Object that describes the Metadata policy. Each key of the JSON Object represents an identifier of the metadata type and each value MUST be a JSON Object that represents the metadata policy according to that metadata type. Please refer to the `OIDC-FED`_ specifications, Section-5.1, for the implementation details. + - |uncheck-icon| + * - **trust_marks** + - JSON Array containing the Trust Marks issued by itself for the subordinate subject. + - |uncheck-icon| + * - **constraints** + - It MAY contain the **allowed_leaf_entity_types**, that restricts what types of metadata the subject is allowed to publish. + - |check-icon| + + +Trust Evaluation Mechanism +-------------------------- + +The Trust Anchor publishes the list of its Subordinates (Federation Subordinate Listing endpoint) and the attestations of their metadata and public keys (Entity Statements). + +Each participant, including Trust Anchor, Intermediate, Credential Issuer, Wallet Provider, and Relying Party, publishes its own metadata and public keys (Entity Configuration endpoint) in the well-known web resource **.well-known/openid-federation**. + +Each of these can be verified using the Entity Statement issued by a superior, such as the Trust Anchor or an Intermediate. + +Each Entity Statement is verifiable over time and MUST have an expiration date. The revocation of each statement is verifiable in real time and online (only for remote flows) through the federation endpoints. + +.. note:: + The revocation of an Entity is made with the unavailability of the Entity Statement related to it. If the Trust Anchor or its Intermediate doesn't publish a valid Entity Statement, or if it publishes an expired/invalid Entity Statement, the subject of the Entity Statement MUST be intended as not valid or revoked. + +The concatenation of the statements, through the combination of these signing mechanisms and the binding of claims and public keys, forms the Trust Chain. + +The Trust Chains can also be verified offline, using one of the Trust Anchor's public keys. + +.. note:: + Since the Wallet Instance is not a Federation Entity, the Trust Evaluation Mechanism related to it **requires the presentation of the Wallet Attestation during the credential issuance and presentation phases**. + + The Wallet Attestation conveys all the required information pertaining to the instance, such as its public key and any other technical or administrative information, without any User's personal data. + + +Relying Party Attestation +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The Relying Party is accredited by a Trust Anchor or its Intermediate and obtains a Trust Mark to be included in its Entity Configuration. In its Entity Configuration the Relying Party publishes its specific metadata, including the supported signature and encryption algorithms and any other necessary information for the interoperability requirements. + +Any requests for User attributes, such as PID or (Q)EAA, from the Relying Party to Wallet Instances are signed and SHOULD contain the verifiable Trust Chain regarding the Relying Party. + +The Wallet Instance verifies that the Trust Chain related to the Relying Party is still active, proving that the Relying Party is still part of the Federation and not revoked. + +The Trust Chain SHOULD be contained within the signed request in the form of a JWS header parameter. + +In offline flows, Trust Chain verification enables the assessment of the reliability of Trust Marks and Attestations contained within. + + +Wallet Attestation +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The Wallet Provider issues the Wallet Attestation, certifying the operational status of its Wallet Instances and including one of their public keys. + +The Wallet Attestation contains the Trust Chain that attests the reliability for its issuer (Wallet Provider) at the time of issuance. + +The Wallet Instance provides its Wallet Attestation within the signed request during the PID issuance phase, containing the Trust Chain related to the Wallet Provider. + + +Trust Chain +^^^^^^^^^^^^^^^ + +The Trust Chain is a sequence of verified statements that validates a participant's compliance with the Federation. It has an expiration date time, beyond which it MUST be renewed to obtain the fresh and updated metadata. The expiration date of the Trust Chain is determined by the earliest expiration timestamp among all the expiration timestamp contained in the statements. No Entity can force the expiration date of the Trust Chain to be higher than the one configured by the Trust Anchor. + +Below is an abstract representation of a Trust Chain. + +.. code-block:: python + + [ + "EntityConfiguration-as-SignedJWT-selfissued-byLeaf", + "EntityStatement-as-SignedJWT-issued-byTrustAnchor" + ] + +Below is a non-normative example of a Trust Chain in its original format (JSON Array containing JWS as strings) with an Intermediate involved. + +.. code-block:: python + + [ + "eyJhbGciOiJFUzI1NiIsImtpZCI6Ik5GTTFXVVZpVWxZelVXcExhbWxmY0VwUFJWWTJWWFpJUmpCblFYWm1SSGhLWVVWWVVsZFRRbkEyTkEiLCJ0eXAiOiJhcHBsaWNhdGlvbi9lbnRpdHktc3RhdGVtZW50K2p3dCJ9.eyJleHAiOjE2NDk1OTA2MDIsImlhdCI6MTY0OTQxNzg2MiwiaXNzIjoiaHR0cHM6Ly9ycC5leGFtcGxlLm9yZyIsInN1YiI6Imh0dHBzOi8vcnAuZXhhbXBsZS5vcmciLCJqd2tzIjp7ImtleXMiOlt7Imt0eSI6IkVDIiwia2lkIjoiTkZNMVdVVmlVbFl6VVdwTGFtbGZjRXBQUlZZMlZYWklSakJuUVhabVJIaEtZVVZZVWxkVFFuQTJOQSIsImNydiI6IlAtMjU2IiwieCI6InVzbEMzd2QtcFgzd3o0YlJZbnd5M2x6cGJHWkZoTjk2aEwyQUhBM01RNlkiLCJ5IjoiVkxDQlhGV2xkTlNOSXo4a0gyOXZMUjROMThCa3dHT1gyNnpRb3J1UTFNNCJ9XX0sIm1ldGFkYXRhIjp7Im9wZW5pZF9yZWx5aW5nX3BhcnR5Ijp7ImFwcGxpY2F0aW9uX3R5cGUiOiJ3ZWIiLCJjbGllbnRfaWQiOiJodHRwczovL3JwLmV4YW1wbGUub3JnLyIsImNsaWVudF9yZWdpc3RyYXRpb25fdHlwZXMiOlsiYXV0b21hdGljIl0sImp3a3MiOnsia2V5cyI6W3sia3R5IjoiRUMiLCJraWQiOiJORk0xV1VWaVVsWXpVV3BMYW1sZmNFcFBSVlkyVlhaSVJqQm5RWFptUkhoS1lVVllVbGRUUW5BMk5BIiwiY3J2IjoiUC0yNTYiLCJ4IjoidXNsQzN3ZC1wWDN3ejRiUllud3kzbHpwYkdaRmhOOTZoTDJBSEEzTVE2WSIsInkiOiJWTENCWEZXbGROU05JejhrSDI5dkxSNE4xOEJrd0dPWDI2elFvcnVRMU00In1dfSwiY2xpZW50X25hbWUiOiJOYW1lIG9mIGFuIGV4YW1wbGUgb3JnYW5pemF0aW9uIiwiY29udGFjdHMiOlsib3BzQHJwLmV4YW1wbGUuaXQiXSwiZ3JhbnRfdHlwZXMiOlsicmVmcmVzaF90b2tlbiIsImF1dGhvcml6YXRpb25fY29kZSJdLCJyZWRpcmVjdF91cmlzIjpbImh0dHBzOi8vcnAuZXhhbXBsZS5vcmcvb2lkYy9ycC9jYWxsYmFjay8iXSwicmVzcG9uc2VfdHlwZXMiOlsiY29kZSJdLCJzY29wZSI6ImV1LmV1cm9wYS5lYy5ldWRpdy5waWQuMSBldS5ldXJvcGEuZWMuZXVkaXcucGlkLml0LjEgZW1haWwiLCJzdWJqZWN0X3R5cGUiOiJwYWlyd2lzZSJ9LCJmZWRlcmF0aW9uX2VudGl0eSI6eyJmZWRlcmF0aW9uX3Jlc29sdmVfZW5kcG9pbnQiOiJodHRwczovL3JwLmV4YW1wbGUub3JnL3Jlc29sdmUvIiwib3JnYW5pemF0aW9uX25hbWUiOiJFeGFtcGxlIFJQIiwiaG9tZXBhZ2VfdXJpIjoiaHR0cHM6Ly9ycC5leGFtcGxlLml0IiwicG9saWN5X3VyaSI6Imh0dHBzOi8vcnAuZXhhbXBsZS5pdC9wb2xpY3kiLCJsb2dvX3VyaSI6Imh0dHBzOi8vcnAuZXhhbXBsZS5pdC9zdGF0aWMvbG9nby5zdmciLCJjb250YWN0cyI6WyJ0ZWNoQGV4YW1wbGUuaXQiXX19LCJ0cnVzdF9tYXJrcyI6W3siaWQiOiJodHRwczovL3JlZ2lzdHJ5LmVpZGFzLnRydXN0LWFuY2hvci5leGFtcGxlLmV1L29wZW5pZF9yZWx5aW5nX3BhcnR5L3B1YmxpYy8iLCJ0cnVzdF9tYXJrIjoiZXlKaCBcdTIwMjYifV0sImF1dGhvcml0eV9oaW50cyI6WyJodHRwczovL2ludGVybWVkaWF0ZS5laWRhcy5leGFtcGxlLm9yZyJdfQ.Un315HdckvhYA-iRregZAmL7pnfjQH2APz82blQO5S0sl1JR0TEFp5E1T913g8GnuwgGtMQUqHPZwV6BvTLA8g", + "eyJhbGciOiJFUzI1NiIsImtpZCI6IlNURkRXV2hKY0dWWFgzQjNSVmRaYWtsQ0xUTnVNa000WTNGNlFUTk9kRXRyZFhGWVlYWjJjWGN0UVEiLCJ0eXAiOiJhcHBsaWNhdGlvbi9lbnRpdHktc3RhdGVtZW50K2p3dCJ9.eyJleHAiOjE2NDk2MjM1NDYsImlhdCI6MTY0OTQ1MDc0NiwiaXNzIjoiaHR0cHM6Ly9pbnRlcm1lZGlhdGUuZWlkYXMuZXhhbXBsZS5vcmciLCJzdWIiOiJodHRwczovL3JwLmV4YW1wbGUub3JnIiwiandrcyI6eyJrZXlzIjpbeyJrdHkiOiJFQyIsImtpZCI6Ik5GTTFXVVZpVWxZelVXcExhbWxmY0VwUFJWWTJWWFpJUmpCblFYWm1SSGhLWVVWWVVsZFRRbkEyTkEiLCJjcnYiOiJQLTI1NiIsIngiOiJ1c2xDM3dkLXBYM3d6NGJSWW53eTNsenBiR1pGaE45NmhMMkFIQTNNUTZZIiwieSI6IlZMQ0JYRldsZE5TTkl6OGtIMjl2TFI0TjE4Qmt3R09YMjZ6UW9ydVExTTQifV19LCJtZXRhZGF0YV9wb2xpY3kiOnsib3BlbmlkX3JlbHlpbmdfcGFydHkiOnsic2NvcGUiOnsic3Vic2V0X29mIjpbImV1LmV1cm9wYS5lYy5ldWRpdy5waWQuMSwgIGV1LmV1cm9wYS5lYy5ldWRpdy5waWQuaXQuMSJdfSwicmVxdWVzdF9hdXRoZW50aWNhdGlvbl9tZXRob2RzX3N1cHBvcnRlZCI6eyJvbmVfb2YiOlsicmVxdWVzdF9vYmplY3QiXX0sInJlcXVlc3RfYXV0aGVudGljYXRpb25fc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZCI6eyJzdWJzZXRfb2YiOlsiUlMyNTYiLCJSUzUxMiIsIkVTMjU2IiwiRVM1MTIiLCJQUzI1NiIsIlBTNTEyIl19fX0sInRydXN0X21hcmtzIjpbeyJpZCI6Imh0dHBzOi8vdHJ1c3QtYW5jaG9yLmV4YW1wbGUuZXUvb3BlbmlkX3JlbHlpbmdfcGFydHkvcHVibGljLyIsInRydXN0X21hcmsiOiJleUpoYiBcdTIwMjYifV19._qt5-T6DahP3TuWa_27klE8I9Z_sPK2FtQlKY6pGMPchbSI2aHXY3aAXDUrObPo4CHtqgg3J2XcrghDFUCFGEQ", + "eyJhbGciOiJFUzI1NiIsImtpZCI6ImVXa3pUbWt0WW5kblZHMWxhMjU1ZDJkQ2RVZERSazQwUWt0WVlVMWFhRFZYT1RobFpHdFdXSGQ1WnciLCJ0eXAiOiJhcHBsaWNhdGlvbi9lbnRpdHktc3RhdGVtZW50K2p3dCJ9.eyJleHAiOjE2NDk2MjM1NDYsImlhdCI6MTY0OTQ1MDc0NiwiaXNzIjoiaHR0cHM6Ly90cnVzdC1hbmNob3IuZXhhbXBsZS5ldSIsInN1YiI6Imh0dHBzOi8vaW50ZXJtZWRpYXRlLmVpZGFzLmV4YW1wbGUub3JnIiwiandrcyI6eyJrZXlzIjpbeyJrdHkiOiJFQyIsImtpZCI6IlNURkRXV2hKY0dWWFgzQjNSVmRaYWtsQ0xUTnVNa000WTNGNlFUTk9kRXRyZFhGWVlYWjJjWGN0UVEiLCJjcnYiOiJQLTI1NiIsIngiOiJyQl9BOGdCUnh5NjhVTkxZRkZLR0ZMR2VmWU5XYmgtSzh1OS1GYlQyZkZJIiwieSI6IlNuWVk2Y3NjZnkxcjBISFhLTGJuVFZsamFndzhOZzNRUEs2WFVoc2UzdkUifV19LCJ0cnVzdF9tYXJrcyI6W3siaWQiOiJodHRwczovL3RydXN0LWFuY2hvci5leGFtcGxlLmV1L2ZlZGVyYXRpb25fZW50aXR5L3RoYXQtcHJvZmlsZSIsInRydXN0X21hcmsiOiJleUpoYiBcdTIwMjYifV19.r3uoi-U0tx0gDFlnDdITbcwZNUpy7M2tnh08jlD-Ej9vMzWMCXOCCuwIn0ZT0jS4M_sHneiG6tLxRqj-htI70g" + ] + + +.. note:: + + The entire Trust Chain is verifiable by only possessing the Trust Anchor's public keys. + + +Offline Trust Attestation Mechanisms +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The offline flows do not allow for real-time evaluation of an Entity's status, such as its revocation. At the same time, using short-lived Trust Chains enables the attainment of trust attestations compatible with the required revocation administrative protocols (e.g., a revocation must be propagated in less than 24 hours, thus the Trust Chain must not be valid for more than that period). + + +Offline EUDI Wallet Trust Attestation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Given that the Wallet Instance cannot publish its metadata online at the *.well-known/openid-federation* endpoint, +it MUST obtain a Wallet Attestation issued by its Wallet Provider. The Wallet Attestation MUST contain all the relevant information regarding the security capabilities of the Wallet Instance and its protocol related configuration. It SHOULD contain the Trust Chain related to its issuer (Wallet Provider). + + +Offline Relying Party Metadata +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Since the Federation Entity Discovery is only applicable in online scenarios, it is possible to include the Trust Chain in the presentation requests that the Relying Party may issue for a Wallet Instance. + +The Relying Party MUST sign the presentation request, the request SHOULD include the `trust_chain` claim in its JWS header parameters, containing the Federation Trust Chain related to itself. + +The Wallet Instance that verifies the request issued by the Relying Party MUST use the Trust Anchor's public keys to validate the entire Trust Chain related to the Relying Party before attesting its reliability. + +Furthermore, the Wallet Instance applies the metadata policy, if any. + + +Non-repudiability of the Long Lived Attestations +-------------------------------------------------- + +The Trust Anchor and its Intermediate MUST expose the Federation Historical Keys endpoint, where are published all the public part of the Federation Entity Keys that are no longer used, whether expired or revoked. + +The details of this endpoint are defined in the `OIDC-FED`_ Section 7.6. + +Each JWS containing a Trust Chain in the form of a JWS header parameter can be verified over time, since the entire Trust Chain is verifiable using the Trust Anchor's public key. + +Even if the Trust Anchor has changed its cryptographic keys for digital signature, the Federation Historical Keys endpoint always makes the keys no longer used available for historical signature verifications. + + +Privacy Remarks +--------------- + +- Wallet Instances MUST NOT publish their metadata through an online service. +- The trust infrastructure MUST be public, with all endpoints publicly accessible without any client credentials that may disclose who is requesting access. +- When a Wallet Instance requests the Entity Statements to build the Trust Chain for a specific Relying Party or validates a Trust Mark online, issued for a specific Relying Party, the Trust Anchor or its Intermediate do not know that a particular Wallet Instance is inquiring about a specific Relying Party; instead, they only serve the statements related to that Relying Party as a public resource. +- The Wallet Instance metadata MUST not contain information that may disclose technical information about the hardware used. +- Leaf entity, Intermediate, and Trust Anchor metadata may include the necessary amount of data as part of administrative, technical, and security contact information. It is generally not recommended to use personal contact details in such cases. From a legal perspective, the publication of such information is needed for operational support concerning technical and security matters and the GDPR regulation. + + +Considerations about Decentralization +------------------------------------- + +- There may be more than a single Trust Anchor. +- In some cases, a trust verifier may trust an Intermediate, especially when the Intermediate acts as a Trust Anchor within a specific perimeter, such as cases where the Leafs are both in the same perimeter like a Member State jurisdiction (eg: an Italian Relying Party with an Italian Wallet Instance may consider the Italian Intermediate as a Trust Anchor for the scopes of their interactions). +- Trust attestations (Trust Chain) should be included in the JWS issued by Credential Issuers, and the Presentation Requests of RPs should contain the Trust Chain related to them (issuers of the presentation requests). +- Since the credential presentation must be signed, storing the signed presentation requests and responses, which include the Trust Chain, the Wallet Instance may have the snapshot of the federation configuration (Trust Anchor Entity Configuration in the Trust Chain) and the verifiable reliability of the Relying Party it has interacted with. +- Each signed attestation is long-lived since it can be cryptographically validated even when the federation configuration changes or the keys of its issuers are renewed. +- Each participant should be able to update its Entity Configuration without notifying the changes to any third party. The metadata policy contained within a Trust Chain must be applied to overload any information related to protocol specific metadata. diff --git a/refs/pull/212/merge/en/_sources/wallet-attestation.rst.txt b/refs/pull/212/merge/en/_sources/wallet-attestation.rst.txt new file mode 100644 index 000000000..abfde0b54 --- /dev/null +++ b/refs/pull/212/merge/en/_sources/wallet-attestation.rst.txt @@ -0,0 +1,351 @@ +.. include:: ../common/common_definitions.rst + +.. _wallet-attestation.rst: + +Wallet Attestation +++++++++++++++++++ + +The Wallet Attestation containing details about the Wallet Instance and the device's security level where the Wallet Instance is installed. It generally attests the **authenticity**, **integrity**, **security**, **privacy**, and **trust** of a specific Wallet Instance. The Wallet Attestation MUST contain a Wallet Instance public key. + +General Properties +------------------ + +The Wallet Attestation: + +- MUST be issued and MUST be signed by Wallet Provider; +- MUST give all the relevant information to attests the **integrity** and **security** of the device where the Wallet Instance is installed. + +It is necessary for each Wallet Instance to obtain a Wallet Attestation before entering the Operational state. + +Requirements +------------ + +The following requirements for the Wallet Attestation are met: + +1. The Wallet Attestation MUST use the signed JSON Web Token (JWT) format. +2. The Wallet Provider MUST offer a RESTful set of services for issuing the Wallet Attestations. +3. The Wallet Attestation MUST be securely bound to the Wallet Instance public key (**Holder Key Binding**). +4. The Wallet Attestation MUST be issued and signed by an accredited and reliable Wallet Provider, thereby providing integrity and authenticity to the attestation. +5. The Wallet Attestation MUST ensure the integrity and authenticity of the Wallet Instance, verifying that it was accurately created and provided by the Wallet Provider. +6. Each Wallet Instance SHOULD be able to request multiple attestations with different public keys associated to them. This requirement provides a privacy-preserving measure, as the public key MAY be used as a tracking tool during the presentation phase (see also the point number 10, listed below). +7. The Wallet Attestation SHOULD be usable multiple times during its validity period, allowing for repeated authentication and authorization without the need to request new attestations with each interaction. +8. The Wallet Attestation SHOULD have an expiration date time, after which it will no longer be considered valid. +9. When the private key associated with the Wallet Instance is lost or deleted, the attestation MUST become invalid to prevent unauthorized use of the Wallet Instance. + + +High-level Design +----------------- + +Static Component View +~~~~~~~~~~~~~~~~~~~~~ + +.. figure:: ../../images/static_view_wallet_instance_attestation.svg + :name: Wallet Solution Schema + :alt: The image illustrates the containment of Wallet Provider and Wallet Instances within the Wallet Solution, managed by the Wallet Provider. + :target: https://www.plantuml.com/plantuml/uml/XP4nJuSm44VtVehBdxbnPp2iRYx6qTHIjR7SaVQ0-EqzaICDgN4ZBxpqzTUXiCkyJCaupvJXzbH2le4hiCW7A7rsAGM6ETCQn-E7RMSloi0OJzDC691FeL1QE1BMWZBeraW2Mbv4wK8VQayPT5yX9TgCQPclpdy676lnGF0ZN93DyVs3xVsrhOU70hCi0_JshwHXFJp-Rg4dIuECo96moD7xeBQbUKBEbE0EPEwuEWx6N2zj_uXqU8wbhVMhD3tjbAX1BYIl_mq0 + +Dynamic Component View +~~~~~~~~~~~~~~~~~~~~~~ + +This section describes the Wallet Attestation format and how the Wallet Provider issues it. + +.. figure:: ../../images/dynamic_view_sequence_wallet_instance_attestation.svg + :name: Sequence Diagram for Wallet Attestation Request + :alt: The figure illustrates the sequence diagram for issuing a Wallet Attestation, with the steps explained below. + :target: https://www.plantuml.com/plantuml/ZP91RzH038NlyojCJwr4n7qFgrOSAf2G409wwSL9h60ryGmUpqRRNuyt6qBJe5MlzlFtx3TpcmtLoj27Tqcn6n2CuZEO5WfOB4ePQj8GagkuuOHYSFKZaru1PYZh-WFsFHby4eTAGvDavFzglceyS3jZndgjkKi9q8mSOnm5tEx0Cy_h8HIezaxUkHKROy_F1A_C7oKgAFqkJlcGb38vkL5gIKuJEOnSxSTw1_S-z6ef6CYmHSCmrfMhtEZBN84cYY4BI_U21dPCbD_34nqdJrOQlECLaZP55flzdFJJrtKIRKnDIpQN_RtjdeJKXHCr8MkUcsYsWs_dqq2Y7nky1DLvRguiVX-Lq3RnmDs_V1VMvuVl0HlZmsbWh5SHuGlzzHjWDwVizZwrlNWPwqWA2mdb3DVJsZUdIwh9rML6dR8TeVb5pHCevTAROy_jXPgv4xIYjBIMv53QgNtf-kMDBuishtT1tD8wHUUNBPwNlzi-YXAsHx08iJPa0Q5nzLjlITeoz7y0 + +- **Message 1**: The User starts the Wallet Instance mobile app and gets authenticated to it. +- **Message 2**: The Wallet Instance verifies the Wallet Provider's trustworthiness by evaluating its Trust Chain. +- **Message 3-4**: The Wallet Instance retrieves the Wallet Provider metadata, including the list of supported algorithms, public keys, and endpoints. +- **Message 5**: The Wallet Instance generates a new key pair. +- **Message 6-7**: The Wallet Instance requests a ``nonce`` from the App Attestation Service. +- **Message 8**: The Wallet Instance creates a Wallet Attestation Request in JWS format, signed with the private key associated with the public key for which it request the attestation. +- **Message 9-13**: The Wallet Instance provides the Wallet Attestation Request to the Wallet Provider, which validates it and returns a signed attestation to the Wallet Instance. +- **Message 13-14**: The Wallet Instance receives the Wallet Attestation signed by the Wallet Provider and performs security and integrity verifications. +- **Message 15**: The Wallet Attestation is now ready for use. + +Detailed Design +--------------- + +The detailed design is explained below. + +Wallet Attestation Request +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +To obtain a Wallet Attestation from the Wallet +Provider it is necessary to send a Wallet Attestation +Request from the Wallet Instance containing the associated public key +, the ``nonce`` value provided by the App Attestation Service and a ``jti`` value. + +The Wallet Instance MUST do an HTTP request to the Wallet Provider's `token endpoint`_, +using the method `POST `__. + +The **token** endpoint (as defined in `RFC 7523 section 4`_) requires the following parameters +encoded in ``application/x-www-form-urlencoded`` format: + +* ``grant_type`` set to ``urn:ietf:params:oauth:grant-type:jwt-bearer``; +* ``assertion`` containing the signed JWT defined in the Section `Wallet Attestation Request`_. + +Below a non-normative example of the HTTP request. + +.. code-block:: http + + POST /token HTTP/1.1 + Host: wallet-provider.example.org + Content-Type: application/x-www-form-urlencoded + + grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer + &assertion=eyJhbGciOiJFUzI1NiIsImtpZCI6ImtoakZWTE9nRjNHeGRxd2xVTl9LWl83NTVUT1ZEbmJIaDg2TW1KcHh2a1UifQ.eyJpc3MiOiAidmJlWEprc000NXhwaHRBTm5DaUc2bUN5dVU0amZHTnpvcEd1S3ZvZ2c5YyIsICJhdWQiOiAiaHR0cHM6Ly93YWxsZXQtcHJvdmlkZXIuZXhhbXBsZS5vcmciLCAianRpIjogImY1NjUyMDcyLWFiZWYtNDU5OS1iODYzLTlhNjkwNjA3MzJjYyIsICJub25jZSI6ICIuLi4uLiIsICJjbmYiOiB7Imp3ayI6IHsiY3J2IjogIlAtMjU2IiwgImt0eSI6ICJFQyIsICJ4IjogIjRITnB0SS14cjJwanlSSktHTW56NFdtZG5RRF91SlNxNFI5NU5qOThiNDQiLCAieSI6ICJMSVpuU0IzOXZGSmhZZ1MzazdqWEU0cjMtQ29HRlF3WnRQQklScXBObHJnIiwgImtpZCI6ICJ2YmVYSmtzTTQ1eHBodEFObkNpRzZtQ3l1VTRqZkdOem9wR3VLdm9nZzljIn19LCAiaWF0IjogMTY5MTQ4ODk2MiwgImV4cCI6IDE2OTE0OTYxNjJ9.Dg_yFaiv6lVftR3FFx0v5JW250mBgXLVP1j0ezZcHRyitqSY7xGmx4y-MGur93FAS85vf_Da-L-REVEltwU2Jw + +The response is the `Wallet Attestation`_ in JWT format: + +.. code-block:: http + + HTTP/1.1 201 OK + Content-Type: application/jwt + + eyJhbGciOiJFUzI1NiIsInR5cCI6IndhbGxldC1hdHRlc3RhdGlvbitqd3QiLCJraWQiOiI1dDVZWXBCaE4tRWdJRUVJNWlVenI2cjBNUjAyTG5WUTBPbWVrbU5LY2pZIiwidHJ1c3RfY2hhaW4iOlsiZXlKaGJHY2lPaUpGVXouLi42UzBBIiwiZXlKaGJHY2lPaUpGVXouLi5qSkxBIiwiZXlKaGJHY2lPaUpGVXouLi5IOWd3Il19.eyJpc3MiOiJodHRwczovL3dhbGxldC1wcm92aWRlci5leGFtcGxlLm9yZyIsInN1YiI6InZiZVhKa3NNNDV4cGh0QU5uQ2lHNm1DeXVVNGpmR056b3BHdUt2b2dnOWMiLCJ0eXBlIjoiV2FsbGV0SW5zdGFuY2VBdHRlc3RhdGlvbiIsInBvbGljeV91cmkiOiJodHRwczovL3dhbGxldC1wcm92aWRlci5leGFtcGxlLm9yZy9wcml2YWN5X3BvbGljeSIsInRvc191cmkiOiJodHRwczovL3dhbGxldC1wcm92aWRlci5leGFtcGxlLm9yZy9pbmZvX3BvbGljeSIsImxvZ29fdXJpIjoiaHR0cHM6Ly93YWxsZXQtcHJvdmlkZXIuZXhhbXBsZS5vcmcvbG9nby5zdmciLCJhdHRlc3RlZF9zZWN1cml0eV9jb250ZXh0IjoiaHR0cHM6Ly93YWxsZXQtcHJvdmlkZXIuZXhhbXBsZS5vcmcvTG9BL2Jhc2ljIiwiY25mIjp7Imp3ayI6eyJjcnYiOiJQLTI1NiIsImt0eSI6IkVDIiwieCI6IjRITnB0SS14cjJwanlSSktHTW56NFdtZG5RRF91SlNxNFI5NU5qOThiNDQiLCJ5IjoiTElablNCMzl2RkpoWWdTM2s3alhFNHIzLUNvR0ZRd1p0UEJJUnFwTmxyZyIsImtpZCI6InZiZVhKa3NNNDV4cGh0QU5uQ2lHNm1DeXVVNGpmR056b3BHdUt2b2dnOWMifX0sImF1dGhvcml6YXRpb25fZW5kcG9pbnQiOiJldWRpdzoiLCJyZXNwb25zZV90eXBlc19zdXBwb3J0ZWQiOlsidnBfdG9rZW4iXSwidnBfZm9ybWF0c19zdXBwb3J0ZWQiOnsiand0X3ZwX2pzb24iOnsiYWxnX3ZhbHVlc19zdXBwb3J0ZWQiOlsiRVMyNTYiXX0sImp3dF92Y19qc29uIjp7ImFsZ192YWx1ZXNfc3VwcG9ydGVkIjpbIkVTMjU2Il19fSwicmVxdWVzdF9vYmplY3Rfc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZCI6WyJFUzI1NiJdLCJwcmVzZW50YXRpb25fZGVmaW5pdGlvbl91cmlfc3VwcG9ydGVkIjpmYWxzZSwiaWF0IjoxNjg3MjgxMTk1LCJleHAiOjE2ODcyODgzOTV9.tNvCyFPCL5tUi2NakKwdaG9xbrtWWl4djSRYRfHrF8NdmffdT044U55pRn35J2cl0LZxbesEDrfSAz2pllw2Ug + + +Below are described the JWT headers and the payload claims +of the `assertion` used in the request. + + +Assertion Header +^^^^^^^^^^^^^^^^ ++-----------------------------------+-----------------------------------+ +| **key** | **value** | ++-----------------------------------+-----------------------------------+ +| alg | Algorithm to verify the token | +| | signature (es. ES256). | ++-----------------------------------+-----------------------------------+ +| kid | Key id of the public key | +| | created by the Wallet Instance. | ++-----------------------------------+-----------------------------------+ +| typ | Media type, set to | +| | ``wiar+jwt``. | ++-----------------------------------+-----------------------------------+ + +Assertion Payload +^^^^^^^^^^^^^^^^^ + ++--------+-------------------------------------------------------------+ +| **key**| **value** | ++--------+-------------------------------------------------------------+ +|| iss || Thumbprint value | +|| || of the JWK of the Wallet Instance | +|| || for which the attestation is | +|| || being requested. | ++--------+-------------------------------------------------------------+ +|| aud || The public url of the Wallet | +|| || Provider. | ++--------+-------------------------------------------------------------+ +|| jti || Unique identifier of the request, according to | +|| || `RFC7519 `_.| +|| || | ++--------+-------------------------------------------------------------+ +|| nonce || The nonce value obtained from the | +|| || App Attestation Service. | ++--------+-------------------------------------------------------------+ +|| cnf || JSON object, according to | +|| || `RFC7800 `_ | +|| || containing the public part of an asymmetric key pair owned | +|| || by the Wallet Instance. | ++--------+-------------------------------------------------------------+ +|| iat || Unix timestamp of attestation request | +|| || issuance time. | ++--------+-------------------------------------------------------------+ +|| exp || Unix timestamp regarding the | +|| || expiration date time. | ++--------+-------------------------------------------------------------+ + + +Below a non-normative example of the Wallet Attestation +request where the decoded JWS headers and payload are separated by a comma: + +.. code-block:: javascript + + { + "alg": "ES256", + "kid": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c", + "typ": "wiar+jwt" + } + . + { + "iss": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c", + "aud": "https://wallet-provider.example.org", + "jti": "6ec69324-60a8-4e5b-a697-a766d85790ea", + "nonce" : ".....", + "cnf": { + "jwk": { + "crv": "P-256", + "kty": "EC", + "x": "4HNptI-xr2pjyRJKGMnz4WmdnQD_uJSq4R95Nj98b44", + "y": "LIZnSB39vFJhYgS3k7jXE4r3-CoGFQwZtPBIRqpNlrg", + "kid": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c" + } + }, + "iat": 1686645115, + "exp": 1686652315 + } + +Whose corresponding JWS is verifiable using the public part of an asymmetric +key pair owned by the Wallet Instance that has a key id which is the same +as the `kid` made available in the JWS header. + + +Wallet Attestation +~~~~~~~~~~~~~~~~~~ + +The Wallet Attestation MUST be provisioned in JWT format, with +headers and payload claims are listed below. + +Header +^^^^^^ + ++-----------------------------------+-----------------------------------+ +| **key** | **value** | ++-----------------------------------+-----------------------------------+ +| alg | Algorithm to verify the token | +| | signature (es. ES256). | ++-----------------------------------+-----------------------------------+ +| kid | The key id of the key used by the | +| | Wallet Provider to sign the | +| | attestation. | ++-----------------------------------+-----------------------------------+ +| typ | Media type, set to | +| | `wallet-attestation+jwt`, | +| | according to | +| | [`OPENID4VC-HAIP`_] | ++-----------------------------------+-----------------------------------+ +| x5c | Array containing the X.509 | +| | chain | +| | of certificates used to attest | +| | the public key of the Wallet | +| | Provider. | ++-----------------------------------+-----------------------------------+ +| trust_chain | Array containing the Federation | +| | Trust Chain relating to the | +| | Wallet Provider. | ++-----------------------------------+-----------------------------------+ + +.. note:: + + One of the claims `trust_chain` and `x5c` MUST be provisioned. + If they are both provided, the related public key + MUST be the same in both `trust_chain` and `x5c`. + +Payload +^^^^^^^ + ++---------------------------+------------------------------------------------+ +| **key** | **value** | ++---------------------------+------------------------------------------------+ +|| iss || The public url of the Wallet Provider | ++---------------------------+------------------------------------------------+ +|| sub || Thumbprint value | +|| || of the JWK of the Wallet Instance | +|| || for which the attestation is | +|| || being issued. | ++---------------------------+------------------------------------------------+ +|| iat || Unix timestamp of attestation | +|| || issuance time. | ++---------------------------+------------------------------------------------+ +|| exp || Unix timestamp regarding the | +|| || expiration date time. | +|| || A good practice to avoid security | +|| || problems is to have a limited | +|| || duration of the attestation. | ++---------------------------+------------------------------------------------+ +|| aal || JSON String asserting the authentication level| +|| || of the Wallet and the key as asserted in | +|| || the cnf claim. | ++---------------------------+------------------------------------------------+ +|| cnf || This parameter contains the ``jwk`` | +|| || parameter | +|| || with the public key of the Wallet Instance | +|| || necessary for the Holder Key Binding. | ++---------------------------+------------------------------------------------+ +|| authorization_endpoint || URL of the SIOPv2 | +|| || Authorization Endpoint. | ++---------------------------+------------------------------------------------+ +|| response_types_supported || JSON array containing a list of | +|| || the OAuth 2.0 ``response_type`` values. | ++---------------------------+------------------------------------------------+ +|| response_modes_supported || JSON array containing a list of the OAuth 2.0 | +|| || "response_mode" values that this | +|| || authorization server supports. | +|| || `RFC 8414 section 2`_ | ++---------------------------+------------------------------------------------+ +|| vp_formats_supported || JSON object with name/value pairs, | +|| || identifying a Credential format supported | +|| || by the Wallet. | ++---------------------------+------------------------------------------------+ +|| request_object_signing || JSON array containing a list of the | +|| _alg_values_supported || JWS signing algorithms (alg values) | +|| || supported. | ++---------------------------+------------------------------------------------+ +|| presentation_definition || Boolean value specifying whether the | +|| _uri_supported || Wallet Instance supports the transfer of | +|| || ``presentation_definition`` by | +|| || reference. MUST set to `false`. | ++---------------------------+------------------------------------------------+ + +Below is an example of Wallet Attestation: + +.. code-block:: javascript + + { + "alg": "ES256", + "kid": "5t5YYpBhN-EgIEEI5iUzr6r0MR02LnVQ0OmekmNKcjY", + "trust_chain": [ + "eyJhbGciOiJFUz...6S0A", + "eyJhbGciOiJFUz...jJLA", + "eyJhbGciOiJFUz...H9gw", + ], + "typ": "wallet-attestation+jwt", + } + . + { + "iss": "https://wallet-provider.example.org", + "sub": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c", + "aal": "https://trust-list.eu/aal/high", + "cnf": + { + "jwk": + { + "crv": "P-256", + "kty": "EC", + "x": "4HNptI-xr2pjyRJKGMnz4WmdnQD_uJSq4R95Nj98b44", + "y": "LIZnSB39vFJhYgS3k7jXE4r3-CoGFQwZtPBIRqpNlrg", + "kid": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c" + } + }, + "authorization_endpoint": "eudiw:", + "response_types_supported": [ + "vp_token" + ], + "response_modes_supported": [ + "form_post.jwt" + ], + "vp_formats_supported": { + "vc+sd-jwt": { + "sd-jwt_alg_values": [ + "ES256", + "ES384" + ] + } + }, + "request_object_signing_alg_values_supported": [ + "ES256" + ], + "presentation_definition_uri_supported": false, + "iat": 1687281195, + "exp": 1687288395 + } + + +.. _token endpoint: wallet-solution.html#wallet-attestation +.. _Wallet Attestation Request: wallet-attestation.html#format-of-the-wallet-attestation-request +.. _Wallet Attestation: wallet-attestation.html#format-of-the-wallet-attestation +.. _RFC 7523 section 4: https://www.rfc-editor.org/rfc/rfc7523.html#section-4 +.. _RFC 8414 section 2: https://www.rfc-editor.org/rfc/rfc8414.html#section-2 diff --git a/refs/pull/212/merge/en/_sources/wallet-solution.rst.txt b/refs/pull/212/merge/en/_sources/wallet-solution.rst.txt new file mode 100644 index 000000000..4a2036b1f --- /dev/null +++ b/refs/pull/212/merge/en/_sources/wallet-solution.rst.txt @@ -0,0 +1,275 @@ +.. include:: ../common/common_definitions.rst + +.. _wallet-solution.rst: + +Wallet Solution +------------------- + +The Wallet Solution is a comprehensive product offered by the Wallet Provider to cater to the needs of Users in managing their digital assets securely. Designed to provide a seamless User experience, this solution enables Users to leverage the capabilities of the Wallet effectively. + +The Wallet Solution is issued by the Wallet Provider in the form of a mobile app, it also consists of services and web interfaces for the exchange of data between the Wallet Provider and its Wallet Instances for the requirements of the trust model and in total respect of the user's privacy, in accordance with national and EU legislation. + +The mobile app serves as the primary interface for Users, allowing them to access and interact with their digital assets conveniently. These digital assets, known as Attestations, include Personal Identification Data (PID[1]), a set of data that can uniquely identify a natural or a legal person, along with other Qualified and non-qualified Electronic Attestations of Attributes, also known as QEAAs and EAAs respectively, or (Q)EAAs for short[1]. Once a User installs the mobile app on their device, it is referred to such an installation as a Wallet Instance for the User. + +By supporting the mobile app, the Wallet Provider plays a vital role in ensuring the security and reliability of the entire Wallet Solution, since it is responsible for issuing the Wallet Attestation, that is a cryptographic proof that allow the evaluation of the authenticity and the integrity of the Wallet Instance. + + +Requirements +^^^^^^^^^^^^^^^^^^^^ + + - **Trustworthiness within the Wallet ecosystem**: the Wallet Instance MUST establish trust and reliability within the Wallet ecosystem. + - **Compliance with Provider specifications for obtaining PID and (Q)EAA**: the Wallet Instance MUST adhere to the specifications set by Providers for obtaining Personal Identification (PID) and (Q)EAAs. + - **Support for Android and iOS operating systems**: the Wallet Instance MUST be compatible and functional at least on both Android and iOS operating systems, as well as available on the Play Store and App Store respectively. + - **Verification of device ownership by the User**: the Wallet Instance MUST provide a mechanism to verify the User's actual possession and full control of their personal device. + +Wallet Instance +^^^^^^^^^^^^^^^ +The Wallet Instance serves as a unique and secure device for authenticating the User within the Wallet ecosystem. It establishes a strong and reliable identity for the User, enabling them to engage in various digital transactions in a secure and privacy-preserving manner. + +The Wallet Instance establishes the trust within the Wallet ecosystem by consistently presenting a Wallet Attestation during interactions with other ecosystem actors such as PID Providers, (Q)EAA Providers, and Relying Parties. These verifiable attestations, provided by the Wallet Provider, reference the public part of the asymmetric cryptographic key owned by the Wallet Instance. Their purpose is to authenticate the Wallet Instance itself, ensuring its realiability when engaging with other ecosystem actors. + +To guarantee the utmost security, these cryptographic keys are securely stored within the device's Trusted Execution Environment (TEE)[3]. This ensures that only the User is allowed to access them, thus preventing unauthorized usage or tampering. For more detailed information, please refer to the `Wallet Attestation section`_ and the `Trust Model section`_ of this document. + +Wallet Instance Lifecycle +^^^^^^^^^^^^^^^^^^^^^^^^^ +The Wallet Instance has three distinct states: Operational, Valid, and Deactivated. Each state represents a specific functional status and determines the actions that can be performed[2]. + +Initialization Process +~~~~~~~~~~~~~~~~~~~~~~ +To activate the Wallet Instance, the Users MUST install the mobile wallet application on their device and open it. Furthermore, Users will be asked to set their preferred method of unlocking their device; this can be accomplished by entering a personal identification number (PIN) or by utilizing biometric authentication, such as fingerprint or facial recognition, according to their personal preferences and device's capabilities. + +After completing these steps, the Wallet Instance sets the Operational state. + +Transition to Valid state +~~~~~~~~~~~~~~~~~~~~~~~~~ +To transition from the Operational state to the Valid state, the Wallet Instance MUST obtain a valid Personal Identification (PID). Once a valid PID is acquired, the Wallet Instance becomes Valid. + +In order to securely and unambiguously identify Users, the Wallet Instance adopts a Level of Assurance (LoA) 3 authentication, which guarantees a high level of confidence in the User's identity. The authentication method is chosen by the PID Provider from among the notified eID solutions at the national level. + +Once the Wallet Instance is in the Operational state, Users can: + + - Obtain, view, and manage (Q)EAAs from trusted (Q)EAA Providers[1]; + - Authenticate to Relying Parties[1]; + - Authorize the presentation of their digital credentials with Relying Parties. + +Please refer to the relative sections for further information about PID and (Q)EAAs issuance and presentation. + +Return to Operational state +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +A Valid Wallet Instance may revert to the Operational state under specific circumstances. These circumstances include the expiration or the revocation of the associated PID by its PID Provider. + + +Deactivation +~~~~~~~~~~~~ +Users have the ability to deactivate the Wallet Instance voluntarily. This action removes the operational capabilities of the Wallet Instance and sets it to the Deactivated state. Deactivation provides Users with control over access and usage according to their preferences. + + +Wallet Provider Endpoints +^^^^^^^^^^^^^^^^^^^^^^^^^ + +The Wallet Provider that issues the Wallet Attestations MUST +made available its APIs in the form of RESTful services, as listed below. + +Wallet Provider Metadata +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +An HTTP GET request to the **/.well-known/openid-federation** endpoint allows the retrieval of the Wallet +Provider Entity Configuration. + +The Wallet Provider Entity Configuration is a JWS containing the public keys and supported algorithms of the Wallet Provider metadata definition. It is structured in accordance with the `OpenID Connect Federation `_ and the Trust Model section outlined in this specification. + +The returning Entity Configuration of the Wallet Provider MUST contain the +attributes listed below: + +Header +^^^^^^ ++---------+-----------------------------------------------------------------+ +| **Key** | **Value** | ++---------+-----------------------------------------------------------------+ +| alg | Algorithm used to verify the token signature (e.g., ES256). | ++---------+-----------------------------------------------------------------+ +| kid | Thumbprint of the public key used for signing. | ++---------+-----------------------------------------------------------------+ +| typ | Media type, set to ``entity-statement+jwt``. | ++---------+-----------------------------------------------------------------+ + +Payload +^^^^^^^ ++-----------------------------------+-----------------------------------+ +| **Key** | **Value** | ++-----------------------------------+-----------------------------------+ +| iss | Public URL of the Wallet | +| | Provider. | ++-----------------------------------+-----------------------------------+ +| sub | Public URL of the Wallet | +| | Provider. | ++-----------------------------------+-----------------------------------+ +| iat | Issuance datetime in | +| | Unix Timestamp format. | ++-----------------------------------+-----------------------------------+ +| exp | Expiration datetime | +| | in Unix Timestamp format. | ++-----------------------------------+-----------------------------------+ +| authority_hints | Array of URLs (String) containing | +| | the list of URLs of the | +| | immediate superior Entities, such | +| | as the Trust Anchor or an | +| | Intermediate, that MAY issue an | +| | Entity Statement related to this | +| | subject. | ++-----------------------------------+-----------------------------------+ +| jwks | A JSON Web Key Set (JWKS) `RFC | +| | 7517 `_ | +| | that represents the public part | +| | of the signing keys of the Entity | +| | at issue. Each JWK in the JWK set | +| | MUST have a key ID (claim kid). | ++-----------------------------------+-----------------------------------+ +| metadata | Contains the | +| | metadata | +| | ``wallet_provider`` | +| | and the | +| | ``federation_entity`` metadata. | ++-----------------------------------+-----------------------------------+ + +`wallet_provider` metadata +~~~~~~~~~~~~~~~~~~~~~~~~~~ + ++---------------------------------------------+---------------------------------------------------------------------+ +| **Key** | **Value** | ++---------------------------------------------+---------------------------------------------------------------------+ +| jwks | A JSON Web Key Set (JWKS) | +| | that represents the Wallet | +| | Provider's public keys. | ++---------------------------------------------+---------------------------------------------------------------------+ +| token_endpoint | Endpoint for obtaining the Wallet | +| | Instance Attestation. | ++---------------------------------------------+---------------------------------------------------------------------+ +| aal_values_supported | List of supported values for the | +| | certifiable security context. These | +| | values specify the security level | +| | of the app, according to the levels: low, medium, or high. | +| | Authenticator Assurance Level values supported. | ++---------------------------------------------+---------------------------------------------------------------------+ +| grant_types_supported | The types of grants supported by | +| | the token endpoint. It MUST be set to | +| | ``urn:ietf:params:oauth:client-assertion-type: | +| | jwt-client-attestation``. | ++---------------------------------------------+---------------------------------------------------------------------+ +| token_endpoint_auth_methods_suppor | Supported authentication methods for | +| ted | the token endpoint. | ++---------------------------------------------+---------------------------------------------------------------------+ +| token_endpoint_auth_signing_alg_va | Supported signature | +| lues_supported | algorithms for the token endpoint. | ++---------------------------------------------+---------------------------------------------------------------------+ + +.. note:: + The `aal_values_supported` parameter is experimental and under review. + +Payload `federation_entity` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ++-------------------+----------------------------------------------+ +| **Key** | **Value** | ++-------------------+----------------------------------------------+ +| organization_name | Organization name. | ++-------------------+----------------------------------------------+ +| homepage_uri | Organization's website URL. | ++-------------------+----------------------------------------------+ +| tos_uri | URL to the terms of service. | ++-------------------+----------------------------------------------+ +| policy_uri | URL to the privacy policy. | ++-------------------+----------------------------------------------+ +| logo_uri | URL of the organization's logo in SVG format.| ++-------------------+----------------------------------------------+ + +Below a non-normative example of the Entity Configuration. + +.. code-block:: javascript + + { + "alg": "ES256", + "kid": "5t5YYpBhN-EgIEEI5iUzr6r0MR02LnVQ0OmekmNKcjY", + "typ": "entity-statement+jwt" + } + . + { + "iss": "https://wallet-provider.example.org", + "sub": "https://wallet-provider.example.org", + "jwks": { + "keys": [ + { + "crv": "P-256", + "kty": "EC", + "x": "qrJrj3Af_B57sbOIRrcBM7br7wOc8ynj7lHFPTeffUk", + "y": "1H0cWDyGgvU8w-kPKU_xycOCUNT2o0bwslIQtnPU6iM", + "kid": "5t5YYpBhN-EgIEEI5iUzr6r0MR02LnVQ0OmekmNKcjY" + } + ] + }, + "metadata": { + "wallet_provider": { + "jwks": { + "keys": [ + { + "crv": "P-256", + "kty": "EC", + "x": "qrJrj3Af_B57sbOIRrcBM7br7wOc8ynj7lHFPTeffUk", + "y": "1H0cWDyGgvU8w-kPKU_xycOCUNT2o0bwslIQtnPU6iM", + "kid": "5t5YYpBhN-EgIEEI5iUzr6r0MR02LnVQ0OmekmNKcjY" + } + ] + }, + "token_endpoint": "https://wallet-provider.example.org/token", + "aal_values_supported": [ + "https://wallet-provider.example.org/LoA/basic", + "https://wallet-provider.example.org/LoA/medium", + "https://wallet-provider.example.org/LoA/high" + ], + "grant_types_supported": [ + "urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation" + ], + "token_endpoint_auth_methods_supported": [ + "private_key_jwt" + ], + "token_endpoint_auth_signing_alg_values_supported": [ + "ES256", + "ES384", + "ES512" + ] + }, + "federation_entity": { + "organization_name": "IT Wallet Provider", + "homepage_uri": "https://wallet-provider.example.org", + "policy_uri": "https://wallet-provider.example.org/privacy_policy", + "tos_uri": "https://wallet-provider.example.org/info_policy", + "logo_uri": "https://wallet-provider.example.org/logo.svg" + } + }, + "authority_hints": [ + "https://registry.eudi-wallet.example.it" + ] + "iat": 1687171759, + "exp": 1709290159 + } + + +Wallet Attestation +~~~~~~~~~~~~~~~~~~ + +Please refer to the `Wallet Attestation section`_. + + +External references +^^^^^^^^^^^^^^^^^^^^ +.. [1] Definitions are inherited from the EUDI Wallet Architecture and Reference Framework, version 1.1.0 at the time of writing. Please refer to `this page `_ for extended definitions and details. + +.. [2] Wallet Instance states adhere to the EUDI Wallet Architecture and Reference Framework, as defined `here `_. + +.. [3] Depending on the device operating system, TEE is defined by `Trusty`_ or `Secure Enclave`_ for Android and iOS devices, respectively. + +.. _Trust Model section: trust.html +.. _Wallet Attestation section: wallet-attestation.html +.. _Trusty: https://source.android.com/docs/security/features/trusty +.. _Secure Enclave: https://support.apple.com/en-gb/guide/security/sec59b0b31ff/web + diff --git a/refs/pull/212/merge/en/_static/_sphinx_javascript_frameworks_compat.js b/refs/pull/212/merge/en/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 000000000..8549469dc --- /dev/null +++ b/refs/pull/212/merge/en/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,134 @@ +/* + * _sphinx_javascript_frameworks_compat.js + * ~~~~~~~~~~ + * + * Compatability shim for jQuery and underscores.js. + * + * WILL BE REMOVED IN Sphinx 6.0 + * xref RemovedInSphinx60Warning + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/refs/pull/212/merge/en/_static/basic.css b/refs/pull/212/merge/en/_static/basic.css new file mode 100644 index 000000000..9039e027c --- /dev/null +++ b/refs/pull/212/merge/en/_static/basic.css @@ -0,0 +1,932 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +div.admonition, div.topic, aside.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic, aside.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +div.topic > :last-child, +aside.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +div.topic::after, +aside.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +/* Docutils 0.17 and older (footnotes & citations) */ +dl.footnote > dt, +dl.citation > dt { + float: left; + margin-right: 0.5em; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +/* Docutils 0.18+ (footnotes & citations) */ +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +/* Footnotes & citations ends */ + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dt:after { + content: ":"; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/refs/pull/212/merge/en/_static/css/theme.css b/refs/pull/212/merge/en/_static/css/theme.css new file mode 100644 index 000000000..6c29bebea --- /dev/null +++ b/refs/pull/212/merge/en/_static/css/theme.css @@ -0,0 +1 @@ +@charset "UTF-8";@import url("https://fonts.googleapis.com/css?family=Lora:400,700");@import url("https://fonts.googleapis.com/css?family=Roboto+Mono:400,700");@import url("https://fonts.googleapis.com/css?family=Titillium+Web:300,400,600,700");.primary-bg{background-color:#06c}.primary-color{color:#06c}.primary-border-color,.primary-border-color.border{border-color:#06c!important}.white-bg{background-color:#fff}.white-color{color:#fff}.white-border-color-,.white-border-color-.border{border-color:#fff!important}.primary-bg-a1{background-color:#bfdfff}.primary-color-a1{color:#bfdfff}.primary-border-color-a1,.primary-border-color-a1.border{border-color:#bfdfff!important}.primary-bg-a2{background-color:#93c4f5}.primary-color-a2{color:#93c4f5}.primary-border-color-a2,.primary-border-color-a2.border{border-color:#93c4f5!important}.primary-bg-a3{background-color:#6aaaeb}.primary-color-a3{color:#6aaaeb}.primary-border-color-a3,.primary-border-color-a3.border{border-color:#6aaaeb!important}.primary-bg-a4{background-color:#4392e0}.primary-color-a4{color:#4392e0}.primary-border-color-a4,.primary-border-color-a4.border{border-color:#4392e0!important}.primary-bg-a5{background-color:#207bd6}.primary-color-a5{color:#207bd6}.primary-border-color-a5,.primary-border-color-a5.border{border-color:#207bd6!important}.primary-bg-a6{background-color:#06c}.primary-color-a6{color:#06c}.primary-border-color-a6,.primary-border-color-a6.border{border-color:#06c!important}.primary-bg-a7{background-color:#0059b3}.primary-color-a7{color:#0059b3}.primary-border-color-a7,.primary-border-color-a7.border{border-color:#0059b3!important}.primary-bg-a8{background-color:#004d99}.primary-color-a8{color:#004d99}.primary-border-color-a8,.primary-border-color-a8.border{border-color:#004d99!important}.primary-bg-a9{background-color:#004080}.primary-color-a9{color:#004080}.primary-border-color-a9,.primary-border-color-a9.border{border-color:#004080!important}.primary-bg-a10{background-color:#036}.primary-color-a10{color:#036}.primary-border-color-a10,.primary-border-color-a10.border{border-color:#036!important}.primary-bg-a11{background-color:#00264d}.primary-color-a11{color:#00264d}.primary-border-color-a11,.primary-border-color-a11.border{border-color:#00264d!important}.primary-bg-a12{background-color:#001a33}.primary-color-a12{color:#001a33}.primary-border-color-a12,.primary-border-color-a12.border{border-color:#001a33!important}.primary-bg-b1{background-color:#06c}.primary-color-b1{color:#06c}.primary-border-color-b1,.primary-border-color-b1.border{border-color:#06c!important}.primary-bg-b2{background-color:#1262b3}.primary-color-b2{color:#1262b3}.primary-border-color-b2,.primary-border-color-b2.border{border-color:#1262b3!important}.primary-bg-b3{background-color:#1f5c99}.primary-color-b3{color:#1f5c99}.primary-border-color-b3,.primary-border-color-b3.border{border-color:#1f5c99!important}.primary-bg-b4{background-color:#265380}.primary-color-b4{color:#265380}.primary-border-color-b4,.primary-border-color-b4.border{border-color:#265380!important}.primary-bg-b5{background-color:#294766}.primary-color-b5{color:#294766}.primary-border-color-b5,.primary-border-color-b5.border{border-color:#294766!important}.primary-bg-b6{background-color:#26394d}.primary-color-b6{color:#26394d}.primary-border-color-b6,.primary-border-color-b6.border{border-color:#26394d!important}.primary-bg-b7{background-color:#1f2933}.primary-color-b7{color:#1f2933}.primary-border-color-b7,.primary-border-color-b7.border{border-color:#1f2933!important}.primary-bg-b8{background-color:#12161a}.primary-color-b8{color:#12161a}.primary-border-color-b8,.primary-border-color-b8.border{border-color:#12161a!important}.primary-bg-c1{background-color:#dce9f5}.primary-color-c1{color:#dce9f5}.primary-border-color-c1,.primary-border-color-c1.border{border-color:#dce9f5!important}.primary-bg-c2{background-color:#c4dcf5}.primary-color-c2{color:#c4dcf5}.primary-border-color-c2,.primary-border-color-c2.border{border-color:#c4dcf5!important}.primary-bg-c3{background-color:#abd0f5}.primary-color-c3{color:#abd0f5}.primary-border-color-c3,.primary-border-color-c3.border{border-color:#abd0f5!important}.primary-bg-c4{background-color:#93c4f5}.primary-color-c4{color:#93c4f5}.primary-border-color-c4,.primary-border-color-c4.border{border-color:#93c4f5!important}.primary-bg-c5{background-color:#7ab8f5}.primary-color-c5{color:#7ab8f5}.primary-border-color-c5,.primary-border-color-c5.border{border-color:#7ab8f5!important}.primary-bg-c6{background-color:#62abf5}.primary-color-c6{color:#62abf5}.primary-border-color-c6,.primary-border-color-c6.border{border-color:#62abf5!important}.primary-bg-c7{background-color:#499ff5}.primary-color-c7{color:#499ff5}.primary-border-color-c7,.primary-border-color-c7.border{border-color:#499ff5!important}.primary-bg-c8{background-color:#3193f5}.primary-color-c8{color:#3193f5}.primary-border-color-c8,.primary-border-color-c8.border{border-color:#3193f5!important}.primary-bg-c9{background-color:#1887f5}.primary-color-c9{color:#1887f5}.primary-border-color-c9,.primary-border-color-c9.border{border-color:#1887f5!important}.primary-bg-c10{background-color:#007af5}.primary-color-c10{color:#007af5}.primary-border-color-c10,.primary-border-color-c10.border{border-color:#007af5!important}.primary-bg-c11{background-color:#0070e0}.primary-color-c11{color:#0070e0}.primary-border-color-c11,.primary-border-color-c11.border{border-color:#0070e0!important}.primary-bg-c12{background-color:#06c}.primary-color-c12{color:#06c}.primary-border-color-c12,.primary-border-color-c12.border{border-color:#06c!important}.analogue-1-bg-a1{background-color:#e7e6ff}.analogue-1-color-a1{color:#e7e6ff}.analogue-1-border-color-a1,.analogue-1-border-color-a1.border{border-color:#e7e6ff!important}.analogue-1-bg-a2{background-color:#bbb8f5}.analogue-1-color-a2{color:#bbb8f5}.analogue-1-border-color-a2,.analogue-1-border-color-a2.border{border-color:#bbb8f5!important}.analogue-1-bg-a3{background-color:#918deb}.analogue-1-color-a3{color:#918deb}.analogue-1-border-color-a3,.analogue-1-border-color-a3.border{border-color:#918deb!important}.analogue-1-bg-a4{background-color:#6b65e0}.analogue-1-color-a4{color:#6b65e0}.analogue-1-border-color-a4,.analogue-1-border-color-a4.border{border-color:#6b65e0!important}.analogue-1-bg-a5{background-color:#4840d6}.analogue-1-color-a5{color:#4840d6}.analogue-1-border-color-a5,.analogue-1-border-color-a5.border{border-color:#4840d6!important}.analogue-1-bg-a6{background-color:#271fcc}.analogue-1-color-a6{color:#271fcc}.analogue-1-border-color-a6,.analogue-1-border-color-a6.border{border-color:#271fcc!important}.analogue-1-bg-a7{background-color:#221bb3}.analogue-1-color-a7{color:#221bb3}.analogue-1-border-color-a7,.analogue-1-border-color-a7.border{border-color:#221bb3!important}.analogue-1-bg-a8{background-color:#1d1799}.analogue-1-color-a8{color:#1d1799}.analogue-1-border-color-a8,.analogue-1-border-color-a8.border{border-color:#1d1799!important}.analogue-1-bg-a9{background-color:#191380}.analogue-1-color-a9{color:#191380}.analogue-1-border-color-a9,.analogue-1-border-color-a9.border{border-color:#191380!important}.analogue-1-bg-a10{background-color:#140f66}.analogue-1-color-a10{color:#140f66}.analogue-1-border-color-a10,.analogue-1-border-color-a10.border{border-color:#140f66!important}.analogue-1-bg-a11{background-color:#0f0b4d}.analogue-1-color-a11{color:#0f0b4d}.analogue-1-border-color-a11,.analogue-1-border-color-a11.border{border-color:#0f0b4d!important}.analogue-1-bg-a12{background-color:#0a0833}.analogue-1-color-a12{color:#0a0833}.analogue-1-border-color-a12,.analogue-1-border-color-a12.border{border-color:#0a0833!important}.analogue-2-bg-a1{background-color:#ccfffd}.analogue-2-color-a1{color:#ccfffd}.analogue-2-border-color-a1,.analogue-2-border-color-a1.border{border-color:#ccfffd!important}.analogue-2-bg-a2{background-color:#9ff5f2}.analogue-2-color-a2{color:#9ff5f2}.analogue-2-border-color-a2,.analogue-2-border-color-a2.border{border-color:#9ff5f2!important}.analogue-2-bg-a3{background-color:#75ebe7}.analogue-2-color-a3{color:#75ebe7}.analogue-2-border-color-a3,.analogue-2-border-color-a3.border{border-color:#75ebe7!important}.analogue-2-bg-a4{background-color:#4fe0dc}.analogue-2-color-a4{color:#4fe0dc}.analogue-2-border-color-a4,.analogue-2-border-color-a4.border{border-color:#4fe0dc!important}.analogue-2-bg-a5{background-color:#2bd6d0}.analogue-2-color-a5{color:#2bd6d0}.analogue-2-border-color-a5,.analogue-2-border-color-a5.border{border-color:#2bd6d0!important}.analogue-2-bg-a6{background-color:#0accc6}.analogue-2-color-a6{color:#0accc6}.analogue-2-border-color-a6,.analogue-2-border-color-a6.border{border-color:#0accc6!important}.analogue-2-bg-a7{background-color:#09b3ad}.analogue-2-color-a7{color:#09b3ad}.analogue-2-border-color-a7,.analogue-2-border-color-a7.border{border-color:#09b3ad!important}.analogue-2-bg-a8{background-color:#089994}.analogue-2-color-a8{color:#089994}.analogue-2-border-color-a8,.analogue-2-border-color-a8.border{border-color:#089994!important}.analogue-2-bg-a9{background-color:#06807b}.analogue-2-color-a9{color:#06807b}.analogue-2-border-color-a9,.analogue-2-border-color-a9.border{border-color:#06807b!important}.analogue-2-bg-a10{background-color:#056663}.analogue-2-color-a10{color:#056663}.analogue-2-border-color-a10,.analogue-2-border-color-a10.border{border-color:#056663!important}.analogue-2-bg-a11{background-color:#044d4a}.analogue-2-color-a11{color:#044d4a}.analogue-2-border-color-a11,.analogue-2-border-color-a11.border{border-color:#044d4a!important}.analogue-2-bg-a12{background-color:#033331}.analogue-2-color-a12{color:#033331}.analogue-2-border-color-a12,.analogue-2-border-color-a12.border{border-color:#033331!important}.complementary-1-bg{background-color:#f73e5a}.complementary-1-color{color:#f90}.complementary-1-border-color-,.complementary-1-border-color-.border{border-color:#f73e5a!important}.complementary-1-bg-a1{background-color:#fffcfd}.complementary-1-color-a1{color:#fffcfd}.complementary-1-border-color-a1,.complementary-1-border-color-a1.border{border-color:#fffcfd!important}.complementary-1-bg-a2{background-color:#f5d0d6}.complementary-1-color-a2{color:#f5d0d6}.complementary-1-border-color-a2,.complementary-1-border-color-a2.border{border-color:#f5d0d6!important}.complementary-1-bg-a3{background-color:#eba4af}.complementary-1-color-a3{color:#eba4af}.complementary-1-border-color-a3,.complementary-1-border-color-a3.border{border-color:#eba4af!important}.complementary-1-bg-a4{background-color:#e07b8b}.complementary-1-color-a4{color:#e07b8b}.complementary-1-border-color-a4,.complementary-1-border-color-a4.border{border-color:#e07b8b!important}.complementary-1-bg-a5{background-color:#d65669}.complementary-1-color-a5{color:#d65669}.complementary-1-border-color-a5,.complementary-1-border-color-a5.border{border-color:#d65669!important}.complementary-1-bg-a6{background-color:#cc334a}.complementary-1-color-a6{color:#cc334a}.complementary-1-border-color-a6,.complementary-1-border-color-a6.border{border-color:#cc334a!important}.complementary-1-bg-a7{background-color:#b32d41}.complementary-1-color-a7{color:#b32d41}.complementary-1-border-color-a7,.complementary-1-border-color-a7.border{border-color:#b32d41!important}.complementary-1-bg-a8{background-color:#992637}.complementary-1-color-a8{color:#992637}.complementary-1-border-color-a8,.complementary-1-border-color-a8.border{border-color:#992637!important}.complementary-1-bg-a9{background-color:#80202e}.complementary-1-color-a9{color:#80202e}.complementary-1-border-color-a9,.complementary-1-border-color-a9.border{border-color:#80202e!important}.complementary-1-bg-a10{background-color:#661a25}.complementary-1-color-a10{color:#661a25}.complementary-1-border-color-a10,.complementary-1-border-color-a10.border{border-color:#661a25!important}.complementary-1-bg-a11{background-color:#4d131c}.complementary-1-color-a11{color:#4d131c}.complementary-1-border-color-a11,.complementary-1-border-color-a11.border{border-color:#4d131c!important}.complementary-1-bg-a12{background-color:#330d12}.complementary-1-color-a12{color:#330d12}.complementary-1-border-color-a12,.complementary-1-border-color-a12.border{border-color:#330d12!important}.complementary-2-bg{background-color:#f90}.complementary-2-color{color:#f90}.complementary-2-border-color-,.complementary-2-border-color-.border{border-color:#f90!important}.complementary-2-bg-a1{background-color:#ffe6bf}.complementary-2-color-a1{color:#ffe6bf}.complementary-2-border-color-a1,.complementary-2-border-color-a1.border{border-color:#ffe6bf!important}.complementary-2-bg-a2{background-color:#f5ce93}.complementary-2-color-a2{color:#f5ce93}.complementary-2-border-color-a2,.complementary-2-border-color-a2.border{border-color:#f5ce93!important}.complementary-2-bg-a3{background-color:#ebb76a}.complementary-2-color-a3{color:#ebb76a}.complementary-2-border-color-a3,.complementary-2-border-color-a3.border{border-color:#ebb76a!important}.complementary-2-bg-a4{background-color:#e0a243}.complementary-2-color-a4{color:#e0a243}.complementary-2-border-color-a4,.complementary-2-border-color-a4.border{border-color:#e0a243!important}.complementary-2-bg-a5{background-color:#d68d20}.complementary-2-color-a5{color:#d68d20}.complementary-2-border-color-a5,.complementary-2-border-color-a5.border{border-color:#d68d20!important}.complementary-2-bg-a6{background-color:#cc7a00}.complementary-2-color-a6{color:#cc7a00}.complementary-2-border-color-a6,.complementary-2-border-color-a6.border{border-color:#cc7a00!important}.complementary-2-bg-a7{background-color:#b36b00}.complementary-2-color-a7{color:#b36b00}.complementary-2-border-color-a7,.complementary-2-border-color-a7.border{border-color:#b36b00!important}.complementary-2-bg-a8{background-color:#995c00}.complementary-2-color-a8{color:#995c00}.complementary-2-border-color-a8,.complementary-2-border-color-a8.border{border-color:#995c00!important}.complementary-2-bg-a9{background-color:#804d00}.complementary-2-color-a9{color:#804d00}.complementary-2-border-color-a9,.complementary-2-border-color-a9.border{border-color:#804d00!important}.complementary-2-bg-a10{background-color:#663d00}.complementary-2-color-a10{color:#663d00}.complementary-2-border-color-a10,.complementary-2-border-color-a10.border{border-color:#663d00!important}.complementary-2-bg-a11{background-color:#4d2e00}.complementary-2-color-a11{color:#4d2e00}.complementary-2-border-color-a11,.complementary-2-border-color-a11.border{border-color:#4d2e00!important}.complementary-2-bg-a12{background-color:#331f00}.complementary-2-color-a12{color:#331f00}.complementary-2-border-color-a12,.complementary-2-border-color-a12.border{border-color:#331f00!important}.complementary-3-bg{background-color:#00cf86}.complementary-3-color{color:#00cf86}.complementary-3-border-color-,.complementary-3-border-color-.border{border-color:#00cf86!important}.complementary-3-bg-a1{background-color:#bfffe9}.complementary-3-color-a1{color:#bfffe9}.complementary-3-border-color-a1,.complementary-3-border-color-a1.border{border-color:#bfffe9!important}.complementary-3-bg-a2{background-color:#93f5d3}.complementary-3-color-a2{color:#93f5d3}.complementary-3-border-color-a2,.complementary-3-border-color-a2.border{border-color:#93f5d3!important}.complementary-3-bg-a3{background-color:#6aebbd}.complementary-3-color-a3{color:#6aebbd}.complementary-3-border-color-a3,.complementary-3-border-color-a3.border{border-color:#6aebbd!important}.complementary-3-bg-a4{background-color:#43e0a9}.complementary-3-color-a4{color:#43e0a9}.complementary-3-border-color-a4,.complementary-3-border-color-a4.border{border-color:#43e0a9!important}.complementary-3-bg-a5{background-color:#20d696}.complementary-3-color-a5{color:#20d696}.complementary-3-border-color-a5,.complementary-3-border-color-a5.border{border-color:#20d696!important}.complementary-3-bg-a6{background-color:#00cc85}.complementary-3-color-a6{color:#00cc85}.complementary-3-border-color-a6,.complementary-3-border-color-a6.border{border-color:#00cc85!important}.complementary-3-bg-a7{background-color:#00b374}.complementary-3-color-a7{color:#00b374}.complementary-3-border-color-a7,.complementary-3-border-color-a7.border{border-color:#00b374!important}.complementary-3-bg-a8{background-color:#009963}.complementary-3-color-a8{color:#009963}.complementary-3-border-color-a8,.complementary-3-border-color-a8.border{border-color:#009963!important}.complementary-3-bg-a9{background-color:#008053}.complementary-3-color-a9{color:#008053}.complementary-3-border-color-a9,.complementary-3-border-color-a9.border{border-color:#008053!important}.complementary-3-bg-a10{background-color:#006642}.complementary-3-color-a10{color:#006642}.complementary-3-border-color-a10,.complementary-3-border-color-a10.border{border-color:#006642!important}.complementary-3-bg-a11{background-color:#004d32}.complementary-3-color-a11{color:#004d32}.complementary-3-border-color-a11,.complementary-3-border-color-a11.border{border-color:#004d32!important}.complementary-3-bg-a12{background-color:#003321}.complementary-3-color-a12{color:#003321}.complementary-3-border-color-a12,.complementary-3-border-color-a12.border{border-color:#003321!important}.analogue-1-bg{background-color:#3126ff}.analogue-1-color{color:#3126ff}.analogue-1-border-color-,.analogue-1-border-color-.border{border-color:#3126ff!important}.analogue-1-bg-b1{background-color:#3126ff}.analogue-1-color-b1{color:#3126ff}.analogue-1-border-color-b1,.analogue-1-border-color-b1.border{border-color:#3126ff!important}.analogue-1-bg-b2{background-color:#4239e6}.analogue-1-color-b2{color:#4239e6}.analogue-1-border-color-b2,.analogue-1-border-color-b2.border{border-color:#4239e6!important}.analogue-1-bg-b3{background-color:#4e47cc}.analogue-1-color-b3{color:#4e47cc}.analogue-1-border-color-b3,.analogue-1-border-color-b3.border{border-color:#4e47cc!important}.analogue-1-bg-b4{background-color:#5550b3}.analogue-1-color-b4{color:#5550b3}.analogue-1-border-color-b4,.analogue-1-border-color-b4.border{border-color:#5550b3!important}.analogue-1-bg-b5{background-color:#585499}.analogue-1-color-b5{color:#585499}.analogue-1-border-color-b5,.analogue-1-border-color-b5.border{border-color:#585499!important}.analogue-1-bg-b6{background-color:#555380}.analogue-1-color-b6{color:#555380}.analogue-1-border-color-b6,.analogue-1-border-color-b6.border{border-color:#555380!important}.analogue-1-bg-b7{background-color:#4e4d66}.analogue-1-color-b7{color:#4e4d66}.analogue-1-border-color-b7,.analogue-1-border-color-b7.border{border-color:#4e4d66!important}.analogue-1-bg-b8{background-color:#42414d}.analogue-1-color-b8{color:#42414d}.analogue-1-border-color-b8,.analogue-1-border-color-b8.border{border-color:#42414d!important}.analogue-2-bg{background-color:#0bd9d2}.analogue-2-color{color:#0bd9d2}.analogue-2-border-color-,.analogue-2-border-color-.border{border-color:#0bd9d2!important}.analogue-2-bg-b1{background-color:#0bd9d2}.analogue-2-color-b1{color:#0bd9d2}.analogue-2-border-color-b1,.analogue-2-border-color-b1.border{border-color:#0bd9d2!important}.analogue-2-bg-b2{background-color:#1dbfba}.analogue-2-color-b2{color:#1dbfba}.analogue-2-border-color-b2,.analogue-2-border-color-b2.border{border-color:#1dbfba!important}.analogue-2-bg-b3{background-color:#29a6a2}.analogue-2-color-b3{color:#29a6a2}.analogue-2-border-color-b3,.analogue-2-border-color-b3.border{border-color:#29a6a2!important}.analogue-2-bg-b4{background-color:#318c89}.analogue-2-color-b4{color:#318c89}.analogue-2-border-color-b4,.analogue-2-border-color-b4.border{border-color:#318c89!important}.analogue-2-bg-b5{background-color:#347371}.analogue-2-color-b5{color:#347371}.analogue-2-border-color-b5,.analogue-2-border-color-b5.border{border-color:#347371!important}.analogue-2-bg-b6{background-color:#315958}.analogue-2-color-b6{color:#315958}.analogue-2-border-color-b6,.analogue-2-border-color-b6.border{border-color:#315958!important}.analogue-2-bg-b7{background-color:#29403f}.analogue-2-color-b7{color:#29403f}.analogue-2-border-color-b7,.analogue-2-border-color-b7.border{border-color:#29403f!important}.analogue-2-bg-b8{background-color:#1d2626}.analogue-2-color-b8{color:#1d2626}.analogue-2-border-color-b8,.analogue-2-border-color-b8.border{border-color:#1d2626!important}.complementary-1-bg-b1{background-color:#f73e5a}.complementary-1-color-b1{color:#f73e5a}.complementary-1-border-color-b1,.complementary-1-border-color-b1.border{border-color:#f73e5a!important}.complementary-1-bg-b2{background-color:#de4e63}.complementary-1-color-b2{color:#de4e63}.complementary-1-border-color-b2,.complementary-1-border-color-b2.border{border-color:#de4e63!important}.complementary-1-bg-b3{background-color:#c45869}.complementary-1-color-b3{color:#c45869}.complementary-1-border-color-b3,.complementary-1-border-color-b3.border{border-color:#c45869!important}.complementary-1-bg-b4{background-color:#ab5e69}.complementary-1-color-b4{color:#ab5e69}.complementary-1-border-color-b4,.complementary-1-border-color-b4.border{border-color:#ab5e69!important}.complementary-1-bg-b5{background-color:#915e66}.complementary-1-color-b5{color:#915e66}.complementary-1-border-color-b5,.complementary-1-border-color-b5.border{border-color:#915e66!important}.complementary-1-bg-b6{background-color:#785a5e}.complementary-1-color-b6{color:#785a5e}.complementary-1-border-color-b6,.complementary-1-border-color-b6.border{border-color:#785a5e!important}.complementary-1-bg-b7{background-color:#5e5052}.complementary-1-color-b7{color:#5e5052}.complementary-1-border-color-b7,.complementary-1-border-color-b7.border{border-color:#5e5052!important}.complementary-1-bg-b8{background-color:#454142}.complementary-1-color-b8{color:#454142}.complementary-1-border-color-b8,.complementary-1-border-color-b8.border{border-color:#454142!important}.complementary-2-bg-b1{background-color:#f90}.complementary-2-color-b1{color:#f90}.complementary-2-border-color-b1,.complementary-2-border-color-b1.border{border-color:#f90!important}.complementary-2-bg-b2{background-color:#e69317}.complementary-2-color-b2{color:#e69317}.complementary-2-border-color-b2,.complementary-2-border-color-b2.border{border-color:#e69317!important}.complementary-2-bg-b3{background-color:#cc8b29}.complementary-2-color-b3{color:#cc8b29}.complementary-2-border-color-b3,.complementary-2-border-color-b3.border{border-color:#cc8b29!important}.complementary-2-bg-b4{background-color:#b38136}.complementary-2-color-b4{color:#b38136}.complementary-2-border-color-b4,.complementary-2-border-color-b4.border{border-color:#b38136!important}.complementary-2-bg-b5{background-color:#99743d}.complementary-2-color-b5{color:#99743d}.complementary-2-border-color-b5,.complementary-2-border-color-b5.border{border-color:#99743d!important}.complementary-2-bg-b6{background-color:#806640}.complementary-2-color-b6{color:#806640}.complementary-2-border-color-b6,.complementary-2-border-color-b6.border{border-color:#806640!important}.complementary-2-bg-b7{background-color:#66563d}.complementary-2-color-b7{color:#66563d}.complementary-2-border-color-b7,.complementary-2-border-color-b7.border{border-color:#66563d!important}.complementary-2-bg-b8{background-color:#4d4336}.complementary-2-color-b8{color:#4d4336}.complementary-2-border-color-b8,.complementary-2-border-color-b8.border{border-color:#4d4336!important}.complementary-3-bg-b1{background-color:#00cf86}.complementary-3-color-b1{color:#00cf86}.complementary-3-border-color-b1,.complementary-3-border-color-b1.border{border-color:#00cf86!important}.complementary-3-bg-b2{background-color:#12b57c}.complementary-3-color-b2{color:#12b57c}.complementary-3-border-color-b2,.complementary-3-border-color-b2.border{border-color:#12b57c!important}.complementary-3-bg-b3{background-color:#1f9c70}.complementary-3-color-b3{color:#1f9c70}.complementary-3-border-color-b3,.complementary-3-border-color-b3.border{border-color:#1f9c70!important}.complementary-3-bg-b4{background-color:#278262}.complementary-3-color-b4{color:#278262}.complementary-3-border-color-b4,.complementary-3-border-color-b4.border{border-color:#278262!important}.complementary-3-bg-b5{background-color:#2a6953}.complementary-3-color-b5{color:#2a6953}.complementary-3-border-color-b5,.complementary-3-border-color-b5.border{border-color:#2a6953!important}.complementary-3-bg-b6{background-color:#284f41}.complementary-3-color-b6{color:#284f41}.complementary-3-border-color-b6,.complementary-3-border-color-b6.border{border-color:#284f41!important}.complementary-3-bg-b7{background-color:#20362e}.complementary-3-color-b7{color:#20362e}.complementary-3-border-color-b7,.complementary-3-border-color-b7.border{border-color:#20362e!important}.complementary-3-bg-b8{background-color:#141c19}.complementary-3-color-b8{color:#141c19}.complementary-3-border-color-b8,.complementary-3-border-color-b8.border{border-color:#141c19!important}.neutral-1-bg{background-color:#17324d}.neutral-1-color{color:#17324d}.neutral-1-border-color-,.neutral-1-border-color-.border{border-color:#17324d!important}.neutral-1-bg-a1{background-color:#ebeced}.neutral-1-color-a1{color:#ebeced}.neutral-1-border-color-a1,.neutral-1-border-color-a1.border{border-color:#ebeced!important}.neutral-1-bg-a2{background-color:#d9dadb}.neutral-1-color-a2{color:#d9dadb}.neutral-1-border-color-a2,.neutral-1-border-color-a2.border{border-color:#d9dadb!important}.neutral-1-bg-a3{background-color:#c5c7c9}.neutral-1-color-a3{color:#c5c7c9}.neutral-1-border-color-a3,.neutral-1-border-color-a3.border{border-color:#c5c7c9!important}.neutral-1-bg-a4{background-color:#adb2b8}.neutral-1-color-a4{color:#adb2b8}.neutral-1-border-color-a4,.neutral-1-border-color-a4.border{border-color:#adb2b8!important}.neutral-1-bg-a5{background-color:#959da6}.neutral-1-color-a5{color:#959da6}.neutral-1-border-color-a5,.neutral-1-border-color-a5.border{border-color:#959da6!important}.neutral-1-bg-a6{background-color:#768594}.neutral-1-color-a6{color:#768594}.neutral-1-border-color-a6,.neutral-1-border-color-a6.border{border-color:#768594!important}.neutral-1-bg-a7{background-color:#5b6f82}.neutral-1-color-a7{color:#5b6f82}.neutral-1-border-color-a7,.neutral-1-border-color-a7.border{border-color:#5b6f82!important}.neutral-1-bg-a8{background-color:#435a70}.neutral-1-color-a8{color:#435a70}.neutral-1-border-color-a8,.neutral-1-border-color-a8.border{border-color:#435a70!important}.neutral-1-bg-a9{background-color:#2f475e}.neutral-1-color-a9{color:#2f475e}.neutral-1-border-color-a9,.neutral-1-border-color-a9.border{border-color:#2f475e!important}.neutral-1-bg-a10{background-color:#17324d}.neutral-1-color-a10{color:#17324d}.neutral-1-border-color-a10,.neutral-1-border-color-a10.border{border-color:#17324d!important}.neutral-2-bg{background-color:#e6ecf2}.neutral-2-color{color:#e6ecf2}.neutral-2-border-color-{border-color:#e6ecf2}.neutral-2-bg-b1{background-color:#e6ecf2}.neutral-2-color-b1{color:#e6ecf2}.neutral-2-border-color-b1,.neutral-2-border-color-b1.border{border-color:#e6ecf2!important}.neutral-2-bg-b2{background-color:#c2c7cc}.neutral-2-color-b2{color:#c2c7cc}.neutral-2-border-color-b2,.neutral-2-border-color-b2.border{border-color:#c2c7cc!important}.neutral-2-bg-b3{background-color:#9da2a6}.neutral-2-color-b3{color:#9da2a6}.neutral-2-border-color-b3,.neutral-2-border-color-b3.border{border-color:#9da2a6!important}.neutral-2-bg-b4{background-color:#797c80}.neutral-2-color-b4{color:#797c80}.neutral-2-border-color-b4,.neutral-2-border-color-b4.border{border-color:#797c80!important}.neutral-2-bg-b5{background-color:#565759}.neutral-2-color-b5{color:#565759}.neutral-2-border-color-b5,.neutral-2-border-color-b5.border{border-color:#565759!important}.neutral-2-bg-b6{background-color:#2f3133}.neutral-2-color-b6{color:#2f3133}.neutral-2-border-color-b6,.neutral-2-border-color-b6.border{border-color:#2f3133!important}.neutral-2-bg-b7{background-color:#0c0c0d}.neutral-2-color-b7{color:#0c0c0d}.neutral-2-border-color-b7,.neutral-2-border-color-b7.border{border-color:#0c0c0d!important}.neutral-2-bg-a1{background-color:#e6ecf2}.neutral-2-color-a1{color:#e6ecf2}.neutral-2-border-color-a1,.neutral-2-border-color-a1.border{border-color:#e6ecf2!important}.neutral-2-bg-a2{background-color:#bcc4cc}.neutral-2-color-a2{color:#bcc4cc}.neutral-2-border-color-a2,.neutral-2-border-color-a2.border{border-color:#bcc4cc!important}.neutral-2-bg-a3{background-color:#9aa0a6}.neutral-2-color-a3{color:#9aa0a6}.neutral-2-border-color-a3,.neutral-2-border-color-a3.border{border-color:#9aa0a6!important}.neutral-2-bg-a4{background-color:#777b80}.neutral-2-color-a4{color:#777b80}.neutral-2-border-color-a4,.neutral-2-border-color-a4.border{border-color:#777b80!important}.neutral-2-bg-a5{background-color:#535659}.neutral-2-color-a5{color:#535659}.neutral-2-border-color-a5,.neutral-2-border-color-a5.border{border-color:#535659!important}.neutral-2-bg-a6{background-color:#2f3133}.neutral-2-color-a6{color:#2f3133}.neutral-2-border-color-a6,.neutral-2-border-color-a6.border{border-color:#2f3133!important}.neutral-2-bg-a7{background-color:#17181a}.neutral-2-color-a7{color:#17181a}.neutral-2-border-color-a7,.neutral-2-border-color-a7.border{border-color:#17181a!important}.lightgrey-bg-a1{background-color:#e8f2fc}.lightgrey-color-a1{color:#e8f2fc}.lightgrey-border-color-a1,.lightgrey-border-color-a1.border{border-color:#e8f2fc!important}.lightgrey-bg-a2{background-color:#edf5fc}.lightgrey-color-a2{color:#edf5fc}.lightgrey-border-color-a2,.lightgrey-border-color-a2.border{border-color:#edf5fc!important}.lightgrey-bg-a3{background-color:#f2f7fc}.lightgrey-color-a3{color:#f2f7fc}.lightgrey-border-color-a3,.lightgrey-border-color-a3.border{border-color:#f2f7fc!important}.lightgrey-bg-a4{background-color:#f5f9fc}.lightgrey-color-a4{color:#f5f9fc}.lightgrey-border-color-a4,.lightgrey-border-color-a4.border{border-color:#f5f9fc!important}.lightgrey-bg-b1{background-color:#e6f0fa}.lightgrey-color-b1{color:#e6f0fa}.lightgrey-border-color-b1,.lightgrey-border-color-b1.border{border-color:#e6f0fa!important}.lightgrey-bg-b2{background-color:#ebf2fa}.lightgrey-color-b2{color:#ebf2fa}.lightgrey-border-color-b2,.lightgrey-border-color-b2.border{border-color:#ebf2fa!important}.lightgrey-bg-b3{background-color:#edf4fa}.lightgrey-color-b3{color:#edf4fa}.lightgrey-border-color-b3,.lightgrey-border-color-b3.border{border-color:#edf4fa!important}.lightgrey-bg-b4{background-color:#f2f6fa}.lightgrey-color-b4{color:#f2f6fa}.lightgrey-border-color-b4,.lightgrey-border-color-b4.border{border-color:#f2f6fa!important}.lightgrey-bg-c1{background-color:#f7f9fa}.lightgrey-color-c1{color:#f7f9fa}.lightgrey-border-color-c1,.lightgrey-border-color-c1.border{border-color:#f7f9fa!important}.lightgrey-bg-c2{background-color:#f5f6f7}.lightgrey-color-c2{color:#f5f6f7}.lightgrey-border-color-c2,.lightgrey-border-color-c2.border{border-color:#f5f6f7!important}:root{--blue:#0073e6;--indigo:#554dff;--purple:#9e99ff;--pink:#ffb3bf;--red:#f73e5a;--orange:#f90;--yellow:#ffda73;--green:#00cc85;--teal:#0bd9d2;--cyan:#00fff7;--white:#fff;--gray:#656566;--gray-dark:#323333;--italia:#06c;--gray-secondary:#5c6f82;--gray-tertiary:#5a768a;--gray-quaternary:#fcfdff;--primary:#0073e6;--secondary:#5c6f82;--success:#00cc85;--info:#979899;--warning:#f90;--danger:#f73e5a;--light:#e9e6f2;--dark:#17324d;--100:#e3e4e6;--200:#cacacc;--300:#b1b1b3;--400:#979899;--500:#7e7f80;--600:#656566;--700:#4c4c4d;--800:#323333;--900:#19191a;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:"Titillium Web",Geneva,Tahoma,sans-serif;--font-family-monospace:"Roboto Mono",monospace}@media print{*,:after,:before{text-shadow:none!important;-webkit-box-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 #7e7f80;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 #b1b1b3!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#d6dce3}.table .thead-dark th{color:inherit;border-color:#d6dce3}}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Titillium Web,Geneva,Tahoma,sans-serif;font-size:16px;font-size:1rem;font-weight:300;line-height:1.5;color:#19191a;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:8px}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}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}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:#0073e6;text-decoration:none;background-color:transparent}a:hover{color:#004d99;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:Roboto Mono,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:1em;padding-bottom:1em;color:#5a768a;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}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[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]{-webkit-box-sizing:border-box;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:24px;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:8px;font-weight:700;line-height:1.2}.h1,h1{font-size:40px;font-size:2.5rem}.h2,h2{font-size:32px;font-size:2rem}.h3,h3{font-size:28px;font-size:1.75rem}.h4,h4{font-size:24px;font-size:1.5rem}.h5,h5{font-size:20px;font-size:1.25rem}.h6,h6{font-size:16px;font-size:1rem}.lead{font-size:20px;font-size:1.25rem;font-weight:300}.display-1{font-size:56px;font-size:3.5rem}.display-1,.display-2{font-weight:700;line-height:1.2}.display-2{font-size:40px;font-size:2.5rem}.display-3{font-size:24px;font-size:1.5rem}.display-3,.display-4{font-weight:700;line-height:1.2}.display-4{font-size:20px;font-size:1.25rem}hr{margin-top:16px;margin-bottom:16px;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:12.432px;font-size:.777rem}.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:16px;font-size:20px;font-size:1.25rem}.blockquote-footer{display:block;font-size:12.432px;font-size:.777rem}.blockquote-footer:before{content:"\2014\00A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #b1b1b3;border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.figure{display:inline-block}.figure-img{margin-bottom:8px;line-height:1}.figure-caption{font-size:90%;color:#656566}code{font-size:87.5%;color:#17324d;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#19191a;border-radius:2px;-webkit-box-shadow:inset 0 -.1rem 0 rgba(0,0,0,.25);box-shadow:inset 0 -.1rem 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;font-size:87.5%;color:#19191a}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:6px;padding-left:6px;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:6px;padding-left:6px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-6px;margin-left:-6px}.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%;padding-right:6px;padding-left:6px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1,.col-auto{-webkit-box-flex:0}.col-1{-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-2,.col-3{-webkit-box-flex:0}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-4,.col-5{-webkit-box-flex:0}.col-5{-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-6,.col-7{-webkit-box-flex:0}.col-7{-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-8,.col-9{-webkit-box-flex:0}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-10,.col-11{-webkit-box-flex:0}.col-11{-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:16px;color:#19191a}.table td,.table th{padding:1em;vertical-align:top;border-top:1px solid #d6dce3}.table thead th{vertical-align:bottom;border-bottom:2px solid #d6dce3}.table tbody+tbody{border-top:2px solid #d6dce3}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #d6dce3}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:#f6f7f9}.table-hover tbody tr:hover{color:#19191a;background-color:#e5f1fa}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8d8f8}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7ab6f2}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#a1cbf6}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d1d7dc}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#aab4be}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c3cad1}.table-success,.table-success>td,.table-success>th{background-color:#b8f1dd}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#7ae4c0}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#a3edd3}.table-info,.table-info>td,.table-info>th{background-color:#e2e2e2}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#c9c9ca}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#d5d5d5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffe2b8}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffca7a}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffd89f}.table-danger,.table-danger>td,.table-danger>th{background-color:#fdc9d1}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#fb9ba9}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#fcb0bc}.table-light,.table-light>td,.table-light>th{background-color:#f9f8fb}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#f4f2f8}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ebe8f2}.table-dark,.table-dark>td,.table-dark>th{background-color:#bec6cd}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#8694a2}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b0b9c2}.table-100,.table-100>td,.table-100>th{background-color:#f7f7f8}.table-100 tbody+tbody,.table-100 td,.table-100 th,.table-100 thead th{border-color:#f0f1f2}.table-hover .table-100:hover,.table-hover .table-100:hover>td,.table-hover .table-100:hover>th{background-color:#e9e9ec}.table-200,.table-200>td,.table-200>th{background-color:#f0f0f1}.table-200 tbody+tbody,.table-200 td,.table-200 th,.table-200 thead th{border-color:#e3e3e4}.table-hover .table-200:hover,.table-hover .table-200:hover>td,.table-hover .table-200:hover>th{background-color:#e3e3e5}.table-300,.table-300>td,.table-300>th{background-color:#e9e9ea}.table-300 tbody+tbody,.table-300 td,.table-300 th,.table-300 thead th{border-color:#d6d6d7}.table-hover .table-300:hover,.table-hover .table-300:hover>td,.table-hover .table-300:hover>th{background-color:#dcdcde}.table-400,.table-400>td,.table-400>th{background-color:#e2e2e2}.table-400 tbody+tbody,.table-400 td,.table-400 th,.table-400 thead th{border-color:#c9c9ca}.table-hover .table-400:hover,.table-hover .table-400:hover>td,.table-hover .table-400:hover>th{background-color:#d5d5d5}.table-500,.table-500>td,.table-500>th{background-color:#dbdbdb}.table-500 tbody+tbody,.table-500 td,.table-500 th,.table-500 thead th{border-color:#bcbcbd}.table-hover .table-500:hover,.table-hover .table-500:hover>td,.table-hover .table-500:hover>th{background-color:#cecece}.table-600,.table-600>td,.table-600>th{background-color:#d4d4d4}.table-600 tbody+tbody,.table-600 td,.table-600 th,.table-600 thead th{border-color:#afafaf}.table-hover .table-600:hover,.table-hover .table-600:hover>td,.table-hover .table-600:hover>th{background-color:#c7c7c7}.table-700,.table-700>td,.table-700>th{background-color:#cdcdcd}.table-700 tbody+tbody,.table-700 td,.table-700 th,.table-700 thead th{border-color:#a2a2a2}.table-hover .table-700:hover,.table-hover .table-700:hover>td,.table-hover .table-700:hover>th{background-color:silver}.table-800,.table-800>td,.table-800>th{background-color:#c6c6c6}.table-800 tbody+tbody,.table-800 td,.table-800 th,.table-800 thead th{border-color:#949595}.table-hover .table-800:hover,.table-hover .table-800:hover>td,.table-hover .table-800:hover>th{background-color:#b9b9b9}.table-900,.table-900>td,.table-900>th{background-color:#bfbfbf}.table-900 tbody+tbody,.table-900 td,.table-900 th,.table-900 thead th{border-color:#878788}.table-hover .table-900:hover,.table-hover .table-900:hover>td,.table-hover .table-900:hover>th{background-color:#b2b2b2}.table-active,.table-active>td,.table-active>th{background-color:#e5f1fa}.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:#d0e5f6}.table .thead-dark th{color:#fff;background-color:#323333;border-color:#464646}.table .thead-light th{color:#4c4c4d;background-color:#cacacc;border-color:#d6dce3}.table-dark{color:#fff;background-color:#323333}.table-dark td,.table-dark th,.table-dark thead th{border-color:#464646}.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{color:#fff;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}.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}.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}.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}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:16px;font-size:1rem;font-weight:300;line-height:1.5;color:#4c4c4d;background-color:#fff;background-clip:padding-box;border:1px solid #979899;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{-webkit-transition:none;transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#4c4c4d;background-color:#fff;border-color:#5c6f82;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.25);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.25)}.form-control::-webkit-input-placeholder{color:#656566;opacity:1}.form-control::-moz-placeholder{color:#656566;opacity:1}.form-control::-ms-input-placeholder{color:#656566;opacity:1}.form-control::placeholder{color:#656566;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#cacacc;opacity:1}select.form-control:focus::-ms-value{color:#4c4c4d;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:20px;font-size:1.25rem;line-height:1.556}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:14px;font-size:.875rem;line-height:1.428}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#19191a;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.428em + .5rem + 2px);padding:.25rem .5rem;font-size:14px;font-size:.875rem;line-height:1.428;border-radius:2px}.form-control-lg{height:calc(1.556em + 1rem + 2px);padding:.5rem 1rem;font-size:20px;font-size:1.25rem;line-height:1.556;border-radius:8px}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#5a768a}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:12.432px;font-size:.777rem;color:#00cc85}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:1rem;margin-top:.1rem;font-size:14px;font-size:.875rem;line-height:1.5;color:#19191a;background-color:#00cc85;border-radius:4px}.form-control.is-valid,.was-validated .form-control:valid{border-color:#00cc85;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2300cc85' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#00cc85;-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.25);box-shadow:0 0 0 .2rem rgba(0,204,133,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#00cc85;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23323333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2300cc85' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#00cc85;-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.25);box-shadow:0 0 0 .2rem rgba(0,204,133,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#00cc85}.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:#00cc85}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#00cc85}.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{border-color:#00ffa6;background-color:#00ffa6}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.25);box-shadow:0 0 0 .2rem rgba(0,204,133,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#00cc85}.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{border-color:#00cc85;-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.25);box-shadow:0 0 0 .2rem rgba(0,204,133,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:12.432px;font-size:.777rem;color:#f73e5a}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:1rem;margin-top:.1rem;font-size:14px;font-size:.875rem;line-height:1.5;color:#19191a;background-color:#f73e5a;border-radius:4px}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#f73e5a;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f73e5a' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23f73e5a' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#f73e5a;-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.25);box-shadow:0 0 0 .2rem rgba(247,62,90,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#f73e5a;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23323333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f73e5a' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23f73e5a' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#f73e5a;-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.25);box-shadow:0 0 0 .2rem rgba(247,62,90,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#f73e5a}.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:#f73e5a}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#f73e5a}.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{border-color:#f96f84;background-color:#f96f84}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.25);box-shadow:0 0 0 .2rem rgba(247,62,90,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#f73e5a}.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{border-color:#f73e5a;-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.25);box-shadow:0 0 0 .2rem rgba(247,62,90,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .form-group,.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;align-items:center;margin-bottom:0}.form-inline .form-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:600;color:#19191a;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:0 solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:4px;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{-webkit-transition:none;transition:none}}.btn:hover{color:#19191a;text-decoration:none}.btn.focus,.btn:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(0,115,230,.25);box-shadow:0 0 0 .2rem rgba(0,115,230,.25)}.btn.disabled,.btn:disabled{opacity:.65;-webkit-box-shadow:none;box-shadow:none}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:not(:disabled):not(.disabled).active:focus,.btn:not(:disabled):not(.disabled):active:focus{-webkit-box-shadow:0 0 0 .2rem rgba(0,115,230,.25),inset 0 3px 5px rgba(0,0,0,.125);box-shadow:0 0 0 .2rem rgba(0,115,230,.25),inset 0 3px 5px rgba(0,0,0,.125)}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#0073e6;border-color:#0073e6;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-primary:hover{color:#fff;background-color:#0060bf;border-color:#0059b3}.btn-primary.focus,.btn-primary:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0073e6;border-color:#0073e6}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0059b3;border-color:#0053a6}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5)}.btn-secondary{color:#fff;background-color:#5c6f82;border-color:#5c6f82;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-secondary:hover{color:#fff;background-color:#4c5c6c;border-color:#475664}.btn-secondary.focus,.btn-secondary:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(92,111,130,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(92,111,130,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#5c6f82;border-color:#5c6f82}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#475664;border-color:#424f5d}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(92,111,130,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(92,111,130,.5)}.btn-success{color:#19191a;background-color:#00cc85;border-color:#00cc85;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-success:hover{color:#fff;background-color:#00a66c;border-color:#009963}.btn-success.focus,.btn-success:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,204,133,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,204,133,.5)}.btn-success.disabled,.btn-success:disabled{color:#19191a;background-color:#00cc85;border-color:#00cc85}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#009963;border-color:#008c5b}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,204,133,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,204,133,.5)}.btn-info{color:#19191a;background-color:#979899;border-color:#979899;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-info:hover{color:#19191a;background-color:#848586;border-color:#7e7e80}.btn-info.focus,.btn-info:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(151,152,153,.5)}.btn-info.disabled,.btn-info:disabled{color:#19191a;background-color:#979899;border-color:#979899}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#19191a;background-color:#7e7e80;border-color:#777879}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5)}.btn-warning{color:#19191a;background-color:#f90;border-color:#f90;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-warning:hover{color:#19191a;background-color:#d98200;border-color:#cc7a00}.btn-warning.focus,.btn-warning:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(255,153,0,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(255,153,0,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#19191a;background-color:#f90;border-color:#f90}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#19191a;background-color:#cc7a00;border-color:#bf7300}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,153,0,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,153,0,.5)}.btn-danger{color:#19191a;background-color:#f73e5a;border-color:#f73e5a;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger:hover{color:#fff;background-color:#f6193a;border-color:#f50d30}.btn-danger.focus,.btn-danger:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(247,62,90,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(247,62,90,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#19191a;background-color:#f73e5a;border-color:#f73e5a}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#f50d30;border-color:#ec092b}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(247,62,90,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(247,62,90,.5)}.btn-light{color:#19191a;background-color:#e9e6f2;border-color:#e9e6f2;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-light:hover{color:#19191a;background-color:#d3cde5;border-color:#ccc4e1}.btn-light.focus,.btn-light:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(233,230,242,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(233,230,242,.5)}.btn-light.disabled,.btn-light:disabled{color:#19191a;background-color:#e9e6f2;border-color:#e9e6f2}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#19191a;background-color:#ccc4e1;border-color:#c4bcdd}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(233,230,242,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(233,230,242,.5)}.btn-dark{color:#fff;background-color:#17324d;border-color:#17324d;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-dark:hover{color:#fff;background-color:#0e1f2f;border-color:#0b1825}.btn-dark.focus,.btn-dark:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(23,50,77,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(23,50,77,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#17324d;border-color:#17324d}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#0b1825;border-color:#08121b}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(23,50,77,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(23,50,77,.5)}.btn-100{color:#19191a;background-color:#e3e4e6;border-color:#e3e4e6;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-100:hover{color:#19191a;background-color:#cfd0d3;border-color:#c9cacd}.btn-100.focus,.btn-100:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(227,228,230,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(227,228,230,.5)}.btn-100.disabled,.btn-100:disabled{color:#19191a;background-color:#e3e4e6;border-color:#e3e4e6}.btn-100:not(:disabled):not(.disabled).active,.btn-100:not(:disabled):not(.disabled):active,.show>.btn-100.dropdown-toggle{color:#19191a;background-color:#c9cacd;border-color:#c2c3c7}.btn-100:not(:disabled):not(.disabled).active:focus,.btn-100:not(:disabled):not(.disabled):active:focus,.show>.btn-100.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(227,228,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(227,228,230,.5)}.btn-200{color:#19191a;background-color:#cacacc;border-color:#cacacc;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-200:hover{color:#19191a;background-color:#b6b7b9;border-color:#b0b1b3}.btn-200.focus,.btn-200:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(202,202,204,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(202,202,204,.5)}.btn-200.disabled,.btn-200:disabled{color:#19191a;background-color:#cacacc;border-color:#cacacc}.btn-200:not(:disabled):not(.disabled).active,.btn-200:not(:disabled):not(.disabled):active,.show>.btn-200.dropdown-toggle{color:#19191a;background-color:#b0b1b3;border-color:#a9aaad}.btn-200:not(:disabled):not(.disabled).active:focus,.btn-200:not(:disabled):not(.disabled):active:focus,.show>.btn-200.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(202,202,204,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(202,202,204,.5)}.btn-300{color:#19191a;background-color:#b1b1b3;border-color:#b1b1b3;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-300:hover{color:#19191a;background-color:#9d9ea0;border-color:#979899}.btn-300.focus,.btn-300:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(177,177,179,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(177,177,179,.5)}.btn-300.disabled,.btn-300:disabled{color:#19191a;background-color:#b1b1b3;border-color:#b1b1b3}.btn-300:not(:disabled):not(.disabled).active,.btn-300:not(:disabled):not(.disabled):active,.show>.btn-300.dropdown-toggle{color:#19191a;background-color:#979899;border-color:#909193}.btn-300:not(:disabled):not(.disabled).active:focus,.btn-300:not(:disabled):not(.disabled):active:focus,.show>.btn-300.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(177,177,179,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(177,177,179,.5)}.btn-400{color:#19191a;background-color:#979899;border-color:#979899;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-400:hover{color:#19191a;background-color:#848586;border-color:#7e7e80}.btn-400.focus,.btn-400:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(151,152,153,.5)}.btn-400.disabled,.btn-400:disabled{color:#19191a;background-color:#979899;border-color:#979899}.btn-400:not(:disabled):not(.disabled).active,.btn-400:not(:disabled):not(.disabled):active,.show>.btn-400.dropdown-toggle{color:#19191a;background-color:#7e7e80;border-color:#777879}.btn-400:not(:disabled):not(.disabled).active:focus,.btn-400:not(:disabled):not(.disabled):active:focus,.show>.btn-400.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5)}.btn-500{color:#19191a;background-color:#7e7f80;border-color:#7e7f80;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-500:hover{color:#fff;background-color:#6b6b6c;border-color:#656566}.btn-500.focus,.btn-500:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(126,127,128,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(126,127,128,.5)}.btn-500.disabled,.btn-500:disabled{color:#19191a;background-color:#7e7f80;border-color:#7e7f80}.btn-500:not(:disabled):not(.disabled).active,.btn-500:not(:disabled):not(.disabled):active,.show>.btn-500.dropdown-toggle{color:#fff;background-color:#656566;border-color:#5f5f5f}.btn-500:not(:disabled):not(.disabled).active:focus,.btn-500:not(:disabled):not(.disabled):active:focus,.show>.btn-500.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(126,127,128,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(126,127,128,.5)}.btn-600{color:#fff;background-color:#656566;border-color:#656566;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-600:hover{color:#fff;background-color:#525253;border-color:#4c4c4c}.btn-600.focus,.btn-600:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(101,101,102,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(101,101,102,.5)}.btn-600.disabled,.btn-600:disabled{color:#fff;background-color:#656566;border-color:#656566}.btn-600:not(:disabled):not(.disabled).active,.btn-600:not(:disabled):not(.disabled):active,.show>.btn-600.dropdown-toggle{color:#fff;background-color:#4c4c4c;border-color:#454546}.btn-600:not(:disabled):not(.disabled).active:focus,.btn-600:not(:disabled):not(.disabled):active:focus,.show>.btn-600.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(101,101,102,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(101,101,102,.5)}.btn-700{color:#fff;background-color:#4c4c4d;border-color:#4c4c4d;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-700:hover{color:#fff;background-color:#393939;border-color:#323233}.btn-700.focus,.btn-700:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(76,76,77,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(76,76,77,.5)}.btn-700.disabled,.btn-700:disabled{color:#fff;background-color:#4c4c4d;border-color:#4c4c4d}.btn-700:not(:disabled):not(.disabled).active,.btn-700:not(:disabled):not(.disabled):active,.show>.btn-700.dropdown-toggle{color:#fff;background-color:#323233;border-color:#2c2c2c}.btn-700:not(:disabled):not(.disabled).active:focus,.btn-700:not(:disabled):not(.disabled):active:focus,.show>.btn-700.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(76,76,77,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(76,76,77,.5)}.btn-800{color:#fff;background-color:#323333;border-color:#323333;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-800:hover{color:#fff;background-color:#1f2020;border-color:#191919}.btn-800.focus,.btn-800:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(50,51,51,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(50,51,51,.5)}.btn-800.disabled,.btn-800:disabled{color:#fff;background-color:#323333;border-color:#323333}.btn-800:not(:disabled):not(.disabled).active,.btn-800:not(:disabled):not(.disabled):active,.show>.btn-800.dropdown-toggle{color:#fff;background-color:#191919;border-color:#131313}.btn-800:not(:disabled):not(.disabled).active:focus,.btn-800:not(:disabled):not(.disabled):active:focus,.show>.btn-800.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(50,51,51,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(50,51,51,.5)}.btn-900{color:#fff;background-color:#19191a;border-color:#19191a;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-900:hover{color:#fff;background-color:#060606;border-color:#000}.btn-900.focus,.btn-900:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(25,25,26,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(25,25,26,.5)}.btn-900.disabled,.btn-900:disabled{color:#fff;background-color:#19191a;border-color:#19191a}.btn-900:not(:disabled):not(.disabled).active,.btn-900:not(:disabled):not(.disabled):active,.show>.btn-900.dropdown-toggle{color:#fff;background-color:#000;border-color:#000}.btn-900:not(:disabled):not(.disabled).active:focus,.btn-900:not(:disabled):not(.disabled):active:focus,.show>.btn-900.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(25,25,26,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(25,25,26,.5)}.btn-outline-primary{color:#0073e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #0073e6;box-shadow:inset 0 0 0 1px #0073e6}.btn-outline-primary:hover{color:#0959aa;-webkit-box-shadow:inset 0 0 0 1px #0959aa;box-shadow:inset 0 0 0 1px #0959aa}.btn-outline-primary.focus,.btn-outline-primary:focus{-webkit-box-shadow:inset 0 0 0 1px #0073e6,0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 0 0 1px #0073e6,0 0 0 .2rem rgba(0,115,230,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0073e6;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:#0073e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #0073e6;box-shadow:inset 0 0 0 1px #0073e6}.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{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5)}.btn-outline-secondary{color:#5c6f82;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #5c6f82;box-shadow:inset 0 0 0 1px #5c6f82}.btn-outline-secondary:hover{color:#50565c;-webkit-box-shadow:inset 0 0 0 1px #50565c;box-shadow:inset 0 0 0 1px #50565c}.btn-outline-secondary.focus,.btn-outline-secondary:focus{-webkit-box-shadow:inset 0 0 0 1px #5c6f82,0 0 0 .2rem rgba(92,111,130,.5);box-shadow:inset 0 0 0 1px #5c6f82,0 0 0 .2rem rgba(92,111,130,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#5c6f82;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:#5c6f82;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #5c6f82;box-shadow:inset 0 0 0 1px #5c6f82}.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{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(92,111,130,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(92,111,130,.5)}.btn-outline-success{color:#00cc85;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #00cc85;box-shadow:inset 0 0 0 1px #00cc85}.btn-outline-success:hover{color:#089161;-webkit-box-shadow:inset 0 0 0 1px #089161;box-shadow:inset 0 0 0 1px #089161}.btn-outline-success.focus,.btn-outline-success:focus{-webkit-box-shadow:inset 0 0 0 1px #00cc85,0 0 0 .2rem rgba(0,204,133,.5);box-shadow:inset 0 0 0 1px #00cc85,0 0 0 .2rem rgba(0,204,133,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#00cc85;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:#00cc85;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #00cc85;box-shadow:inset 0 0 0 1px #00cc85}.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{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,204,133,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,204,133,.5)}.btn-outline-info{color:#979899;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #979899;box-shadow:inset 0 0 0 1px #979899}.btn-outline-info:hover{color:#7f7f7f;-webkit-box-shadow:inset 0 0 0 1px #7f7f7f;box-shadow:inset 0 0 0 1px #7f7f7f}.btn-outline-info.focus,.btn-outline-info:focus{-webkit-box-shadow:inset 0 0 0 1px #979899,0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 0 0 1px #979899,0 0 0 .2rem rgba(151,152,153,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#979899;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:#979899;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #979899;box-shadow:inset 0 0 0 1px #979899}.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{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5)}.btn-outline-warning{color:#f90;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #f90;box-shadow:inset 0 0 0 1px #f90}.btn-outline-warning:hover{color:#c2780a;-webkit-box-shadow:inset 0 0 0 1px #c2780a;box-shadow:inset 0 0 0 1px #c2780a}.btn-outline-warning.focus,.btn-outline-warning:focus{-webkit-box-shadow:inset 0 0 0 1px #f90,0 0 0 .2rem rgba(255,153,0,.5);box-shadow:inset 0 0 0 1px #f90,0 0 0 .2rem rgba(255,153,0,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#f90;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:#f90;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #f90;box-shadow:inset 0 0 0 1px #f90}.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{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,153,0,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,153,0,.5)}.btn-outline-danger{color:#f73e5a;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #f73e5a;box-shadow:inset 0 0 0 1px #f73e5a}.btn-outline-danger:hover{color:#e91938;-webkit-box-shadow:inset 0 0 0 1px #e91938;box-shadow:inset 0 0 0 1px #e91938}.btn-outline-danger.focus,.btn-outline-danger:focus{-webkit-box-shadow:inset 0 0 0 1px #f73e5a,0 0 0 .2rem rgba(247,62,90,.5);box-shadow:inset 0 0 0 1px #f73e5a,0 0 0 .2rem rgba(247,62,90,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#f73e5a;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:#f73e5a;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #f73e5a;box-shadow:inset 0 0 0 1px #f73e5a}.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{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(247,62,90,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(247,62,90,.5)}.btn-outline-light{color:#e9e6f2;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e9e6f2;box-shadow:inset 0 0 0 1px #e9e6f2}.btn-outline-light:hover{color:#cec9dd;-webkit-box-shadow:inset 0 0 0 1px #cec9dd;box-shadow:inset 0 0 0 1px #cec9dd}.btn-outline-light.focus,.btn-outline-light:focus{-webkit-box-shadow:inset 0 0 0 1px #e9e6f2,0 0 0 .2rem rgba(233,230,242,.5);box-shadow:inset 0 0 0 1px #e9e6f2,0 0 0 .2rem rgba(233,230,242,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#e9e6f2;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:#e9e6f2;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e9e6f2;box-shadow:inset 0 0 0 1px #e9e6f2}.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{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(233,230,242,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(233,230,242,.5)}.btn-outline-dark{color:#17324d;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #17324d;box-shadow:inset 0 0 0 1px #17324d}.btn-outline-dark:hover{color:#0e1823;-webkit-box-shadow:inset 0 0 0 1px #0e1823;box-shadow:inset 0 0 0 1px #0e1823}.btn-outline-dark.focus,.btn-outline-dark:focus{-webkit-box-shadow:inset 0 0 0 1px #17324d,0 0 0 .2rem rgba(23,50,77,.5);box-shadow:inset 0 0 0 1px #17324d,0 0 0 .2rem rgba(23,50,77,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#17324d;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:#17324d;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #17324d;box-shadow:inset 0 0 0 1px #17324d}.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{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(23,50,77,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(23,50,77,.5)}.btn-outline-100{color:#e3e4e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e3e4e6;box-shadow:inset 0 0 0 1px #e3e4e6}.btn-outline-100:hover{color:#cbcbcb;-webkit-box-shadow:inset 0 0 0 1px #cbcbcb;box-shadow:inset 0 0 0 1px #cbcbcb}.btn-outline-100.focus,.btn-outline-100:focus{-webkit-box-shadow:inset 0 0 0 1px #e3e4e6,0 0 0 .2rem rgba(227,228,230,.5);box-shadow:inset 0 0 0 1px #e3e4e6,0 0 0 .2rem rgba(227,228,230,.5)}.btn-outline-100.disabled,.btn-outline-100:disabled{color:#e3e4e6;background-color:transparent}.btn-outline-100:not(:disabled):not(.disabled).active,.btn-outline-100:not(:disabled):not(.disabled):active,.show>.btn-outline-100.dropdown-toggle{color:#e3e4e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e3e4e6;box-shadow:inset 0 0 0 1px #e3e4e6}.btn-outline-100:not(:disabled):not(.disabled).active:focus,.btn-outline-100:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-100.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(227,228,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(227,228,230,.5)}.btn-outline-200{color:#cacacc;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #cacacc;box-shadow:inset 0 0 0 1px #cacacc}.btn-outline-200:hover{color:#b1b1b1;-webkit-box-shadow:inset 0 0 0 1px #b1b1b1;box-shadow:inset 0 0 0 1px #b1b1b1}.btn-outline-200.focus,.btn-outline-200:focus{-webkit-box-shadow:inset 0 0 0 1px #cacacc,0 0 0 .2rem rgba(202,202,204,.5);box-shadow:inset 0 0 0 1px #cacacc,0 0 0 .2rem rgba(202,202,204,.5)}.btn-outline-200.disabled,.btn-outline-200:disabled{color:#cacacc;background-color:transparent}.btn-outline-200:not(:disabled):not(.disabled).active,.btn-outline-200:not(:disabled):not(.disabled):active,.show>.btn-outline-200.dropdown-toggle{color:#cacacc;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #cacacc;box-shadow:inset 0 0 0 1px #cacacc}.btn-outline-200:not(:disabled):not(.disabled).active:focus,.btn-outline-200:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-200.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(202,202,204,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(202,202,204,.5)}.btn-outline-300{color:#b1b1b3;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #b1b1b3;box-shadow:inset 0 0 0 1px #b1b1b3}.btn-outline-300:hover{color:#989898;-webkit-box-shadow:inset 0 0 0 1px #989898;box-shadow:inset 0 0 0 1px #989898}.btn-outline-300.focus,.btn-outline-300:focus{-webkit-box-shadow:inset 0 0 0 1px #b1b1b3,0 0 0 .2rem rgba(177,177,179,.5);box-shadow:inset 0 0 0 1px #b1b1b3,0 0 0 .2rem rgba(177,177,179,.5)}.btn-outline-300.disabled,.btn-outline-300:disabled{color:#b1b1b3;background-color:transparent}.btn-outline-300:not(:disabled):not(.disabled).active,.btn-outline-300:not(:disabled):not(.disabled):active,.show>.btn-outline-300.dropdown-toggle{color:#b1b1b3;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #b1b1b3;box-shadow:inset 0 0 0 1px #b1b1b3}.btn-outline-300:not(:disabled):not(.disabled).active:focus,.btn-outline-300:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-300.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(177,177,179,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(177,177,179,.5)}.btn-outline-400{color:#979899;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #979899;box-shadow:inset 0 0 0 1px #979899}.btn-outline-400:hover{color:#7f7f7f;-webkit-box-shadow:inset 0 0 0 1px #7f7f7f;box-shadow:inset 0 0 0 1px #7f7f7f}.btn-outline-400.focus,.btn-outline-400:focus{-webkit-box-shadow:inset 0 0 0 1px #979899,0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 0 0 1px #979899,0 0 0 .2rem rgba(151,152,153,.5)}.btn-outline-400.disabled,.btn-outline-400:disabled{color:#979899;background-color:transparent}.btn-outline-400:not(:disabled):not(.disabled).active,.btn-outline-400:not(:disabled):not(.disabled):active,.show>.btn-outline-400.dropdown-toggle{color:#979899;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #979899;box-shadow:inset 0 0 0 1px #979899}.btn-outline-400:not(:disabled):not(.disabled).active:focus,.btn-outline-400:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-400.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5)}.btn-outline-500{color:#7e7f80;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #7e7f80;box-shadow:inset 0 0 0 1px #7e7f80}.btn-outline-500:hover{color:#656565;-webkit-box-shadow:inset 0 0 0 1px #656565;box-shadow:inset 0 0 0 1px #656565}.btn-outline-500.focus,.btn-outline-500:focus{-webkit-box-shadow:inset 0 0 0 1px #7e7f80,0 0 0 .2rem rgba(126,127,128,.5);box-shadow:inset 0 0 0 1px #7e7f80,0 0 0 .2rem rgba(126,127,128,.5)}.btn-outline-500.disabled,.btn-outline-500:disabled{color:#7e7f80;background-color:transparent}.btn-outline-500:not(:disabled):not(.disabled).active,.btn-outline-500:not(:disabled):not(.disabled):active,.show>.btn-outline-500.dropdown-toggle{color:#7e7f80;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #7e7f80;box-shadow:inset 0 0 0 1px #7e7f80}.btn-outline-500:not(:disabled):not(.disabled).active:focus,.btn-outline-500:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-500.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(126,127,128,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(126,127,128,.5)}.btn-outline-600{color:#656566;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #656566;box-shadow:inset 0 0 0 1px #656566}.btn-outline-600:hover{color:#4c4c4c;-webkit-box-shadow:inset 0 0 0 1px #4c4c4c;box-shadow:inset 0 0 0 1px #4c4c4c}.btn-outline-600.focus,.btn-outline-600:focus{-webkit-box-shadow:inset 0 0 0 1px #656566,0 0 0 .2rem rgba(101,101,102,.5);box-shadow:inset 0 0 0 1px #656566,0 0 0 .2rem rgba(101,101,102,.5)}.btn-outline-600.disabled,.btn-outline-600:disabled{color:#656566;background-color:transparent}.btn-outline-600:not(:disabled):not(.disabled).active,.btn-outline-600:not(:disabled):not(.disabled):active,.show>.btn-outline-600.dropdown-toggle{color:#656566;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #656566;box-shadow:inset 0 0 0 1px #656566}.btn-outline-600:not(:disabled):not(.disabled).active:focus,.btn-outline-600:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-600.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(101,101,102,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(101,101,102,.5)}.btn-outline-700{color:#4c4c4d;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #4c4c4d;box-shadow:inset 0 0 0 1px #4c4c4d}.btn-outline-700:hover{color:#333;-webkit-box-shadow:inset 0 0 0 1px #333;box-shadow:inset 0 0 0 1px #333}.btn-outline-700.focus,.btn-outline-700:focus{-webkit-box-shadow:inset 0 0 0 1px #4c4c4d,0 0 0 .2rem rgba(76,76,77,.5);box-shadow:inset 0 0 0 1px #4c4c4d,0 0 0 .2rem rgba(76,76,77,.5)}.btn-outline-700.disabled,.btn-outline-700:disabled{color:#4c4c4d;background-color:transparent}.btn-outline-700:not(:disabled):not(.disabled).active,.btn-outline-700:not(:disabled):not(.disabled):active,.show>.btn-outline-700.dropdown-toggle{color:#4c4c4d;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #4c4c4d;box-shadow:inset 0 0 0 1px #4c4c4d}.btn-outline-700:not(:disabled):not(.disabled).active:focus,.btn-outline-700:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-700.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(76,76,77,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(76,76,77,.5)}.btn-outline-800{color:#323333;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #323333;box-shadow:inset 0 0 0 1px #323333}.btn-outline-800:hover{color:#191919;-webkit-box-shadow:inset 0 0 0 1px #191919;box-shadow:inset 0 0 0 1px #191919}.btn-outline-800.focus,.btn-outline-800:focus{-webkit-box-shadow:inset 0 0 0 1px #323333,0 0 0 .2rem rgba(50,51,51,.5);box-shadow:inset 0 0 0 1px #323333,0 0 0 .2rem rgba(50,51,51,.5)}.btn-outline-800.disabled,.btn-outline-800:disabled{color:#323333;background-color:transparent}.btn-outline-800:not(:disabled):not(.disabled).active,.btn-outline-800:not(:disabled):not(.disabled):active,.show>.btn-outline-800.dropdown-toggle{color:#323333;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #323333;box-shadow:inset 0 0 0 1px #323333}.btn-outline-800:not(:disabled):not(.disabled).active:focus,.btn-outline-800:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-800.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(50,51,51,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(50,51,51,.5)}.btn-outline-900{color:#19191a;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #19191a;box-shadow:inset 0 0 0 1px #19191a}.btn-outline-900:hover{color:#000;-webkit-box-shadow:inset 0 0 0 1px #000;box-shadow:inset 0 0 0 1px #000}.btn-outline-900.focus,.btn-outline-900:focus{-webkit-box-shadow:inset 0 0 0 1px #19191a,0 0 0 .2rem rgba(25,25,26,.5);box-shadow:inset 0 0 0 1px #19191a,0 0 0 .2rem rgba(25,25,26,.5)}.btn-outline-900.disabled,.btn-outline-900:disabled{color:#19191a;background-color:transparent}.btn-outline-900:not(:disabled):not(.disabled).active,.btn-outline-900:not(:disabled):not(.disabled):active,.show>.btn-outline-900.dropdown-toggle{color:#19191a;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #19191a;box-shadow:inset 0 0 0 1px #19191a}.btn-outline-900:not(:disabled):not(.disabled).active:focus,.btn-outline-900:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-900.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(25,25,26,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(25,25,26,.5)}.btn-link{font-weight:400;color:#0073e6;text-decoration:none}.btn-link:hover{color:#004d99;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;-webkit-box-shadow:none;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#656566;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.125rem;border-radius:8px}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:2px}.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{-webkit-transition:opacity .15s linear;transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{-webkit-transition:none;transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{-webkit-transition:none;transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;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:160px;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:16px;font-size:1rem;color:#19191a;text-align:left;list-style:none;background-clip:padding-box;border:0 solid transparent;border-radius:4px;-webkit-box-shadow:0 0 30px 5px rgba(0,0,0,.05);box-shadow:0 0 30px 5px rgba(0,0,0,.05)}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;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:8px 0;overflow:hidden;border-top:1px solid #cacacc}.dropdown-item{display:block;width:100%;padding:12px 24px;clear:both;font-weight:400;color:#17324d;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#17324d;text-decoration:none;background-color:#e6ecf2}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0073e6}.dropdown-item.disabled,.dropdown-item:disabled{color:#656566;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 24px;margin-bottom:0;font-size:14px;font-size:.875rem;color:#17324d;white-space:nowrap}.dropdown-item-text{display:block;padding:12px 24px;color:#17324d}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 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-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group.show .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.show .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top: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:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.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:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:16px;font-size:1rem;font-weight:400;line-height:1.5;color:#4c4c4d;text-align:center;white-space:nowrap;background-color:#cacacc;border:1px solid #979899;border-radius:4px}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.556em + 1rem + 2px)}.input-group-lg>.custom-select,.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:20px;font-size:1.25rem;line-height:1.556;border-radius:8px}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.428em + .5rem + 2px)}.input-group-sm>.custom-select,.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:14px;font-size:.875rem;line-height:1.428;border-radius:2px}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.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}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#656566;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #b1b1b3}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:4px;border-top-right-radius:4px}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#cacacc #cacacc #b1b1b3}.nav-tabs .nav-link.disabled{color:#656566;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#4c4c4d;background-color:#fff;border-color:#b1b1b3 #b1b1b3 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:4px}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0073e6}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:8px 16px}.navbar,.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.5rem;padding-bottom:.5rem;margin-right:16px;font-size:16px;font-size:1rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:20px;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:0}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.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{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm,.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md,.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg,.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl,.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.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=utf-8,%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:transparent}.navbar-dark .navbar-toggler-icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTkuMiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDEyIDEwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0wIDRoMTJ2MkgwVjR6bTAtNGg4djJIMFYwem0wIDhoOHYySDBWOHoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==)}.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:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:0}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:0;border-bottom-left-radius:0}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:2rem}.card-title{margin-bottom:1rem}.card-subtitle{margin-top:-.5rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:2rem}.card-header{padding:1rem 2rem;margin-bottom:0;background-color:transparent;border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:-1px -1px 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:1rem 2rem;background-color:transparent;border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 -1px -1px}.card-header-tabs{margin-bottom:-1rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-1rem;margin-left:-1rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:-1px}.card-img-top{width:100%;border-top-left-radius:-1px;border-top-right-radius:-1px}.card-img-bottom{width:100%;border-bottom-right-radius:-1px;border-bottom-left-radius:-1px}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:6px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-6px;margin-left:-6px}.card-deck,.card-deck .card{-webkit-box-direction:normal}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column;margin-right:6px;margin-bottom:0;margin-left:6px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:6px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:1rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:transparent;border-radius:0}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#656566;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#656566}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:4px}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#0073e6;background-color:#fff;border:1px solid #b1b1b3}.page-link:hover{z-index:2;color:#004d99;text-decoration:none;background-color:#cacacc;border-color:#b1b1b3}.page-link:focus{z-index:2;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(0,115,230,.25);box-shadow:0 0 0 .2rem rgba(0,115,230,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.page-item:last-child .page-link{border-top-right-radius:4px;border-bottom-right-radius:4px}.page-item.active .page-link{z-index:1;color:#fff;background-color:#0073e6;border-color:#0073e6}.page-item.disabled .page-link{color:#656566;pointer-events:none;cursor:auto;background-color:#fff;border-color:#b1b1b3}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:20px;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:8px;border-bottom-left-radius:8px}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:8px;border-bottom-right-radius:8px}.pagination-sm .page-link{padding:.25rem .5rem;font-size:14px;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:2px;border-bottom-left-radius:2px}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:2px;border-bottom-right-radius:2px}.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:4px;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{-webkit-transition:none;transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.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:#0073e6}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0059b3}a.badge-primary.focus,a.badge-primary:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(0,115,230,.5);box-shadow:0 0 0 .2rem rgba(0,115,230,.5)}.badge-secondary{color:#fff;background-color:#5c6f82}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#475664}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(92,111,130,.5);box-shadow:0 0 0 .2rem rgba(92,111,130,.5)}.badge-success{color:#19191a;background-color:#00cc85}a.badge-success:focus,a.badge-success:hover{color:#19191a;background-color:#009963}a.badge-success.focus,a.badge-success:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.5);box-shadow:0 0 0 .2rem rgba(0,204,133,.5)}.badge-info{color:#19191a;background-color:#979899}a.badge-info:focus,a.badge-info:hover{color:#19191a;background-color:#7e7e80}a.badge-info.focus,a.badge-info:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(151,152,153,.5);box-shadow:0 0 0 .2rem rgba(151,152,153,.5)}.badge-warning{color:#19191a;background-color:#f90}a.badge-warning:focus,a.badge-warning:hover{color:#19191a;background-color:#cc7a00}a.badge-warning.focus,a.badge-warning:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(255,153,0,.5);box-shadow:0 0 0 .2rem rgba(255,153,0,.5)}.badge-danger{color:#19191a;background-color:#f73e5a}a.badge-danger:focus,a.badge-danger:hover{color:#19191a;background-color:#f50d30}a.badge-danger.focus,a.badge-danger:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.5);box-shadow:0 0 0 .2rem rgba(247,62,90,.5)}.badge-light{color:#19191a;background-color:#e9e6f2}a.badge-light:focus,a.badge-light:hover{color:#19191a;background-color:#ccc4e1}a.badge-light.focus,a.badge-light:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(233,230,242,.5);box-shadow:0 0 0 .2rem rgba(233,230,242,.5)}.badge-dark{color:#fff;background-color:#17324d}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#0b1825}a.badge-dark.focus,a.badge-dark:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(23,50,77,.5);box-shadow:0 0 0 .2rem rgba(23,50,77,.5)}.badge-100{color:#19191a;background-color:#e3e4e6}a.badge-100:focus,a.badge-100:hover{color:#19191a;background-color:#c9cacd}a.badge-100.focus,a.badge-100:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(227,228,230,.5);box-shadow:0 0 0 .2rem rgba(227,228,230,.5)}.badge-200{color:#19191a;background-color:#cacacc}a.badge-200:focus,a.badge-200:hover{color:#19191a;background-color:#b0b1b3}a.badge-200.focus,a.badge-200:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(202,202,204,.5);box-shadow:0 0 0 .2rem rgba(202,202,204,.5)}.badge-300{color:#19191a;background-color:#b1b1b3}a.badge-300:focus,a.badge-300:hover{color:#19191a;background-color:#979899}a.badge-300.focus,a.badge-300:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(177,177,179,.5);box-shadow:0 0 0 .2rem rgba(177,177,179,.5)}.badge-400{color:#19191a;background-color:#979899}a.badge-400:focus,a.badge-400:hover{color:#19191a;background-color:#7e7e80}a.badge-400.focus,a.badge-400:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(151,152,153,.5);box-shadow:0 0 0 .2rem rgba(151,152,153,.5)}.badge-500{color:#19191a;background-color:#7e7f80}a.badge-500:focus,a.badge-500:hover{color:#19191a;background-color:#656566}a.badge-500.focus,a.badge-500:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(126,127,128,.5);box-shadow:0 0 0 .2rem rgba(126,127,128,.5)}.badge-600{color:#fff;background-color:#656566}a.badge-600:focus,a.badge-600:hover{color:#fff;background-color:#4c4c4c}a.badge-600.focus,a.badge-600:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(101,101,102,.5);box-shadow:0 0 0 .2rem rgba(101,101,102,.5)}.badge-700{color:#fff;background-color:#4c4c4d}a.badge-700:focus,a.badge-700:hover{color:#fff;background-color:#323233}a.badge-700.focus,a.badge-700:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(76,76,77,.5);box-shadow:0 0 0 .2rem rgba(76,76,77,.5)}.badge-800{color:#fff;background-color:#323333}a.badge-800:focus,a.badge-800:hover{color:#fff;background-color:#191919}a.badge-800.focus,a.badge-800:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(50,51,51,.5);box-shadow:0 0 0 .2rem rgba(50,51,51,.5)}.badge-900{color:#fff;background-color:#19191a}a.badge-900:focus,a.badge-900:hover{color:#fff;background-color:#000}a.badge-900.focus,a.badge-900:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(25,25,26,.5);box-shadow:0 0 0 .2rem rgba(25,25,26,.5)}@-webkit-keyframes progress-bar-stripes{0%{background-position:16px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:16px 0}to{background-position:0 0}}.progress{height:16px;overflow:hidden;font-size:12px;font-size:.75rem;background-color:#cacacc;border-radius:0;-webkit-box-shadow:inset 0 .1rem .1rem rgba(0,0,0,.1);box-shadow:inset 0 .1rem .1rem rgba(0,0,0,.1)}.progress,.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex}.progress-bar{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#0073e6;-webkit-transition:width .6s ease;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{-webkit-transition:none;transition:none}}.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:16px 16px}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#0073e6;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#00264d;text-decoration:none}.list-group-item-action:active{color:#19191a;background-color:#cacacc}.list-group-item{position:relative;display:block;padding:1rem 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:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item.disabled,.list-group-item:disabled{color:#656566;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0073e6;border-color:#0073e6}.list-group-horizontal{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#003c78;background-color:#b8d8f8}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#003c78;background-color:#a1cbf6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#003c78;border-color:#003c78}.list-group-item-secondary{color:#303a44;background-color:#d1d7dc}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#303a44;background-color:#c3cad1}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#303a44;border-color:#303a44}.list-group-item-success{color:#006a45;background-color:#b8f1dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#006a45;background-color:#a3edd3}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#006a45;border-color:#006a45}.list-group-item-info{color:#4f4f50;background-color:#e2e2e2}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#4f4f50;background-color:#d5d5d5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#4f4f50;border-color:#4f4f50}.list-group-item-warning{color:#855000;background-color:#ffe2b8}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#855000;background-color:#ffd89f}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#855000;border-color:#855000}.list-group-item-danger{color:#80202f;background-color:#fdc9d1}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#80202f;background-color:#fcb0bc}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#80202f;border-color:#80202f}.list-group-item-light{color:#79787e;background-color:#f9f8fb}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#79787e;background-color:#ebe8f2}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#79787e;border-color:#79787e}.list-group-item-dark{color:#0c1a28;background-color:#bec6cd}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#0c1a28;background-color:#b0b9c2}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#0c1a28;border-color:#0c1a28}.list-group-item-100{color:#767778;background-color:#f7f7f8}.list-group-item-100.list-group-item-action:focus,.list-group-item-100.list-group-item-action:hover{color:#767778;background-color:#e9e9ec}.list-group-item-100.list-group-item-action.active{color:#fff;background-color:#767778;border-color:#767778}.list-group-item-200{color:#69696a;background-color:#f0f0f1}.list-group-item-200.list-group-item-action:focus,.list-group-item-200.list-group-item-action:hover{color:#69696a;background-color:#e3e3e5}.list-group-item-200.list-group-item-action.active{color:#fff;background-color:#69696a;border-color:#69696a}.list-group-item-300{color:#5c5c5d;background-color:#e9e9ea}.list-group-item-300.list-group-item-action:focus,.list-group-item-300.list-group-item-action:hover{color:#5c5c5d;background-color:#dcdcde}.list-group-item-300.list-group-item-action.active{color:#fff;background-color:#5c5c5d;border-color:#5c5c5d}.list-group-item-400{color:#4f4f50;background-color:#e2e2e2}.list-group-item-400.list-group-item-action:focus,.list-group-item-400.list-group-item-action:hover{color:#4f4f50;background-color:#d5d5d5}.list-group-item-400.list-group-item-action.active{color:#fff;background-color:#4f4f50;border-color:#4f4f50}.list-group-item-500{color:#424243;background-color:#dbdbdb}.list-group-item-500.list-group-item-action:focus,.list-group-item-500.list-group-item-action:hover{color:#424243;background-color:#cecece}.list-group-item-500.list-group-item-action.active{color:#fff;background-color:#424243;border-color:#424243}.list-group-item-600{color:#353535;background-color:#d4d4d4}.list-group-item-600.list-group-item-action:focus,.list-group-item-600.list-group-item-action:hover{color:#353535;background-color:#c7c7c7}.list-group-item-600.list-group-item-action.active{color:#fff;background-color:#353535;border-color:#353535}.list-group-item-700{color:#282828;background-color:#cdcdcd}.list-group-item-700.list-group-item-action:focus,.list-group-item-700.list-group-item-action:hover{color:#282828;background-color:silver}.list-group-item-700.list-group-item-action.active{color:#fff;background-color:#282828;border-color:#282828}.list-group-item-800{color:#1a1b1b;background-color:#c6c6c6}.list-group-item-800.list-group-item-action:focus,.list-group-item-800.list-group-item-action:hover{color:#1a1b1b;background-color:#b9b9b9}.list-group-item-800.list-group-item-action.active{color:#fff;background-color:#1a1b1b;border-color:#1a1b1b}.list-group-item-900{color:#0d0d0e;background-color:#bfbfbf}.list-group-item-900.list-group-item-action:focus,.list-group-item-900.list-group-item-action:hover{color:#0d0d0e;background-color:#b2b2b2}.list-group-item-900.list-group-item-action.active{color:#fff;background-color:#0d0d0e;border-color:#0d0d0e}.close{float:right;font-size:24px;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translateY(-50px);transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{-webkit-transition:none;transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-scrollable{display:-webkit-box;display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:8px;-webkit-box-shadow:0 .25rem .5rem rgba(0,0,0,.5);box-shadow:0 .25rem .5rem rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.8}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.5rem;border-bottom:0 solid #b1b1b3;border-top-left-radius:8px;border-top-right-radius:8px}.modal-header .close{padding:1.5rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.5rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1.5rem;border-top:0 solid #b1b1b3;border-bottom-right-radius:8px;border-bottom-left-radius:8px}.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.5rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3rem)}.modal-dialog-centered{min-height:calc(100% - 3rem)}.modal-dialog-centered:before{height:calc(100vh - 3rem)}.modal-content{-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.5);box-shadow:0 .5rem 1rem rgba(0,0,0,.5)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:Titillium Web,Geneva,Tahoma,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:14px;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:1}.tooltip .arrow{position:absolute;display:block;width:12.8px;width:.8rem;height:6.4px;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:#004a4d}.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:6.4px;width:.4rem;height:12.8px;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:#004a4d}.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:#004a4d}.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:6.4px;width:.4rem;height:12.8px;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:#004a4d}.tooltip-inner{max-width:32em;padding:1rem;color:#fff;text-align:center;background-color:#004a4d;border-radius:4px}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:Titillium Web,Geneva,Tahoma,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:14px;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:8px;-webkit-box-shadow:0 .25rem .5rem rgba(0,0,0,.2);box-shadow:0 .25rem .5rem rgba(0,0,0,.2)}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:16px;width:1rem;height:8px;height:.5rem;margin:0 8px}.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)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 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-width:.5rem .5rem 0;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);width:8px;width:.5rem;height:16px;height:1rem;margin:8px 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 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-width:.5rem .5rem .5rem 0;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)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem;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:16px;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);width:8px;width:.5rem;height:16px;height:1rem;margin:8px 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:16px;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:7px;border-top-right-radius:7px}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#19191a}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{-webkit-transition:none;transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;-webkit-transition:opacity 0s .6s;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{-webkit-transition:none;transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;color:#5c6f82;text-align:center;opacity:1;-webkit-transition:opacity .15s ease;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{-webkit-transition:none;transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#5c6f82;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:32px;height:32px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%235c6f82' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%235c6f82' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:auto;margin-left:auto;list-style:none}.carousel-indicators li{-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;-webkit-transition:opacity .6s ease;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{-webkit-transition:none;transition:none}}.carousel-indicators .active{opacity:1}.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:#0073e6!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0059b3!important}.bg-secondary{background-color:#5c6f82!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#475664!important}.bg-success{background-color:#00cc85!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#009963!important}.bg-info{background-color:#979899!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#7e7e80!important}.bg-warning{background-color:#f90!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#cc7a00!important}.bg-danger{background-color:#f73e5a!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#f50d30!important}.bg-light{background-color:#e9e6f2!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#ccc4e1!important}.bg-dark{background-color:#17324d!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#0b1825!important}.bg-100{background-color:#e3e4e6!important}a.bg-100:focus,a.bg-100:hover,button.bg-100:focus,button.bg-100:hover{background-color:#c9cacd!important}.bg-200{background-color:#cacacc!important}a.bg-200:focus,a.bg-200:hover,button.bg-200:focus,button.bg-200:hover{background-color:#b0b1b3!important}.bg-300{background-color:#b1b1b3!important}.bg-400,a.bg-300:focus,a.bg-300:hover,button.bg-300:focus,button.bg-300:hover{background-color:#979899!important}a.bg-400:focus,a.bg-400:hover,button.bg-400:focus,button.bg-400:hover{background-color:#7e7e80!important}.bg-500{background-color:#7e7f80!important}.bg-600,a.bg-500:focus,a.bg-500:hover,button.bg-500:focus,button.bg-500:hover{background-color:#656566!important}a.bg-600:focus,a.bg-600:hover,button.bg-600:focus,button.bg-600:hover{background-color:#4c4c4c!important}.bg-700{background-color:#4c4c4d!important}a.bg-700:focus,a.bg-700:hover,button.bg-700:focus,button.bg-700:hover{background-color:#323233!important}.bg-800{background-color:#323333!important}a.bg-800:focus,a.bg-800:hover,button.bg-800:focus,button.bg-800:hover{background-color:#191919!important}.bg-900{background-color:#19191a!important}a.bg-900:focus,a.bg-900:hover,button.bg-900:focus,button.bg-900:hover{background-color:#000!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #b1b1b3!important}.border-top{border-top:1px solid #b1b1b3!important}.border-right{border-right:1px solid #b1b1b3!important}.border-bottom{border-bottom:1px solid #b1b1b3!important}.border-left{border-left:1px solid #b1b1b3!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:#0073e6!important}.border-secondary{border-color:#5c6f82!important}.border-success{border-color:#00cc85!important}.border-info{border-color:#979899!important}.border-warning{border-color:#f90!important}.border-danger{border-color:#f73e5a!important}.border-light{border-color:#e9e6f2!important}.border-dark{border-color:#17324d!important}.border-100{border-color:#e3e4e6!important}.border-200{border-color:#cacacc!important}.border-300{border-color:#b1b1b3!important}.border-400{border-color:#979899!important}.border-500{border-color:#7e7f80!important}.border-600{border-color:#656566!important}.border-700{border-color:#4c4c4d!important}.border-800{border-color:#323333!important}.border-900{border-color:#19191a!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:2px!important}.rounded{border-radius:4px!important}.rounded-top{border-top-left-radius:4px!important}.rounded-right,.rounded-top{border-top-right-radius:4px!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:4px!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:4px!important}.rounded-left{border-top-left-radius:4px!important}.rounded-lg{border-radius:8px!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!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:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.8571428571%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column,.flex-row{-webkit-box-direction:normal!important}.flex-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse,.flex-row-reverse{-webkit-box-direction:reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column,.flex-sm-row{-webkit-box-direction:normal!important}.flex-sm-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column,.flex-md-row{-webkit-box-direction:normal!important}.flex-md-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column,.flex-lg-row{-webkit-box-direction:normal!important}.flex-lg-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column,.flex-xl-row{-webkit-box-direction:normal!important}.flex-xl-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{-webkit-box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important;box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important;box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{-webkit-box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important;box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{-webkit-box-shadow:none!important;box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.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:4px!important}.mt-1,.my-1{margin-top:4px!important}.mr-1,.mx-1{margin-right:4px!important}.mb-1,.my-1{margin-bottom:4px!important}.ml-1,.mx-1{margin-left:4px!important}.m-2{margin:8px!important}.mt-2,.my-2{margin-top:8px!important}.mr-2,.mx-2{margin-right:8px!important}.mb-2,.my-2{margin-bottom:8px!important}.ml-2,.mx-2{margin-left:8px!important}.m-3{margin:16px!important}.mt-3,.my-3{margin-top:16px!important}.mr-3,.mx-3{margin-right:16px!important}.mb-3,.my-3{margin-bottom:16px!important}.ml-3,.mx-3{margin-left:16px!important}.m-4{margin:24px!important}.mt-4,.my-4{margin-top:24px!important}.mr-4,.mx-4{margin-right:24px!important}.mb-4,.my-4{margin-bottom:24px!important}.ml-4,.mx-4{margin-left:24px!important}.m-5{margin:48px!important}.mt-5,.my-5{margin-top:48px!important}.mr-5,.mx-5{margin-right:48px!important}.mb-5,.my-5{margin-bottom:48px!important}.ml-5,.mx-5{margin-left:48px!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:4px!important}.pt-1,.py-1{padding-top:4px!important}.pr-1,.px-1{padding-right:4px!important}.pb-1,.py-1{padding-bottom:4px!important}.pl-1,.px-1{padding-left:4px!important}.p-2{padding:8px!important}.pt-2,.py-2{padding-top:8px!important}.pr-2,.px-2{padding-right:8px!important}.pb-2,.py-2{padding-bottom:8px!important}.pl-2,.px-2{padding-left:8px!important}.p-3{padding:16px!important}.pt-3,.py-3{padding-top:16px!important}.pr-3,.px-3{padding-right:16px!important}.pb-3,.py-3{padding-bottom:16px!important}.pl-3,.px-3{padding-left:16px!important}.p-4{padding:24px!important}.pt-4,.py-4{padding-top:24px!important}.pr-4,.px-4{padding-right:24px!important}.pb-4,.py-4{padding-bottom:24px!important}.pl-4,.px-4{padding-left:24px!important}.p-5{padding:48px!important}.pt-5,.py-5{padding-top:48px!important}.pr-5,.px-5{padding-right:48px!important}.pb-5,.py-5{padding-bottom:48px!important}.pl-5,.px-5{padding-left:48px!important}.m-n1{margin:-4px!important}.mt-n1,.my-n1{margin-top:-4px!important}.mr-n1,.mx-n1{margin-right:-4px!important}.mb-n1,.my-n1{margin-bottom:-4px!important}.ml-n1,.mx-n1{margin-left:-4px!important}.m-n2{margin:-8px!important}.mt-n2,.my-n2{margin-top:-8px!important}.mr-n2,.mx-n2{margin-right:-8px!important}.mb-n2,.my-n2{margin-bottom:-8px!important}.ml-n2,.mx-n2{margin-left:-8px!important}.m-n3{margin:-16px!important}.mt-n3,.my-n3{margin-top:-16px!important}.mr-n3,.mx-n3{margin-right:-16px!important}.mb-n3,.my-n3{margin-bottom:-16px!important}.ml-n3,.mx-n3{margin-left:-16px!important}.m-n4{margin:-24px!important}.mt-n4,.my-n4{margin-top:-24px!important}.mr-n4,.mx-n4{margin-right:-24px!important}.mb-n4,.my-n4{margin-bottom:-24px!important}.ml-n4,.mx-n4{margin-left:-24px!important}.m-n5{margin:-48px!important}.mt-n5,.my-n5{margin-top:-48px!important}.mr-n5,.mx-n5{margin-right:-48px!important}.mb-n5,.my-n5{margin-bottom:-48px!important}.ml-n5,.mx-n5{margin-left:-48px!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:4px!important}.mt-sm-1,.my-sm-1{margin-top:4px!important}.mr-sm-1,.mx-sm-1{margin-right:4px!important}.mb-sm-1,.my-sm-1{margin-bottom:4px!important}.ml-sm-1,.mx-sm-1{margin-left:4px!important}.m-sm-2{margin:8px!important}.mt-sm-2,.my-sm-2{margin-top:8px!important}.mr-sm-2,.mx-sm-2{margin-right:8px!important}.mb-sm-2,.my-sm-2{margin-bottom:8px!important}.ml-sm-2,.mx-sm-2{margin-left:8px!important}.m-sm-3{margin:16px!important}.mt-sm-3,.my-sm-3{margin-top:16px!important}.mr-sm-3,.mx-sm-3{margin-right:16px!important}.mb-sm-3,.my-sm-3{margin-bottom:16px!important}.ml-sm-3,.mx-sm-3{margin-left:16px!important}.m-sm-4{margin:24px!important}.mt-sm-4,.my-sm-4{margin-top:24px!important}.mr-sm-4,.mx-sm-4{margin-right:24px!important}.mb-sm-4,.my-sm-4{margin-bottom:24px!important}.ml-sm-4,.mx-sm-4{margin-left:24px!important}.m-sm-5{margin:48px!important}.mt-sm-5,.my-sm-5{margin-top:48px!important}.mr-sm-5,.mx-sm-5{margin-right:48px!important}.mb-sm-5,.my-sm-5{margin-bottom:48px!important}.ml-sm-5,.mx-sm-5{margin-left:48px!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:4px!important}.pt-sm-1,.py-sm-1{padding-top:4px!important}.pr-sm-1,.px-sm-1{padding-right:4px!important}.pb-sm-1,.py-sm-1{padding-bottom:4px!important}.pl-sm-1,.px-sm-1{padding-left:4px!important}.p-sm-2{padding:8px!important}.pt-sm-2,.py-sm-2{padding-top:8px!important}.pr-sm-2,.px-sm-2{padding-right:8px!important}.pb-sm-2,.py-sm-2{padding-bottom:8px!important}.pl-sm-2,.px-sm-2{padding-left:8px!important}.p-sm-3{padding:16px!important}.pt-sm-3,.py-sm-3{padding-top:16px!important}.pr-sm-3,.px-sm-3{padding-right:16px!important}.pb-sm-3,.py-sm-3{padding-bottom:16px!important}.pl-sm-3,.px-sm-3{padding-left:16px!important}.p-sm-4{padding:24px!important}.pt-sm-4,.py-sm-4{padding-top:24px!important}.pr-sm-4,.px-sm-4{padding-right:24px!important}.pb-sm-4,.py-sm-4{padding-bottom:24px!important}.pl-sm-4,.px-sm-4{padding-left:24px!important}.p-sm-5{padding:48px!important}.pt-sm-5,.py-sm-5{padding-top:48px!important}.pr-sm-5,.px-sm-5{padding-right:48px!important}.pb-sm-5,.py-sm-5{padding-bottom:48px!important}.pl-sm-5,.px-sm-5{padding-left:48px!important}.m-sm-n1{margin:-4px!important}.mt-sm-n1,.my-sm-n1{margin-top:-4px!important}.mr-sm-n1,.mx-sm-n1{margin-right:-4px!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-4px!important}.ml-sm-n1,.mx-sm-n1{margin-left:-4px!important}.m-sm-n2{margin:-8px!important}.mt-sm-n2,.my-sm-n2{margin-top:-8px!important}.mr-sm-n2,.mx-sm-n2{margin-right:-8px!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-8px!important}.ml-sm-n2,.mx-sm-n2{margin-left:-8px!important}.m-sm-n3{margin:-16px!important}.mt-sm-n3,.my-sm-n3{margin-top:-16px!important}.mr-sm-n3,.mx-sm-n3{margin-right:-16px!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-16px!important}.ml-sm-n3,.mx-sm-n3{margin-left:-16px!important}.m-sm-n4{margin:-24px!important}.mt-sm-n4,.my-sm-n4{margin-top:-24px!important}.mr-sm-n4,.mx-sm-n4{margin-right:-24px!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-24px!important}.ml-sm-n4,.mx-sm-n4{margin-left:-24px!important}.m-sm-n5{margin:-48px!important}.mt-sm-n5,.my-sm-n5{margin-top:-48px!important}.mr-sm-n5,.mx-sm-n5{margin-right:-48px!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-48px!important}.ml-sm-n5,.mx-sm-n5{margin-left:-48px!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:4px!important}.mt-md-1,.my-md-1{margin-top:4px!important}.mr-md-1,.mx-md-1{margin-right:4px!important}.mb-md-1,.my-md-1{margin-bottom:4px!important}.ml-md-1,.mx-md-1{margin-left:4px!important}.m-md-2{margin:8px!important}.mt-md-2,.my-md-2{margin-top:8px!important}.mr-md-2,.mx-md-2{margin-right:8px!important}.mb-md-2,.my-md-2{margin-bottom:8px!important}.ml-md-2,.mx-md-2{margin-left:8px!important}.m-md-3{margin:16px!important}.mt-md-3,.my-md-3{margin-top:16px!important}.mr-md-3,.mx-md-3{margin-right:16px!important}.mb-md-3,.my-md-3{margin-bottom:16px!important}.ml-md-3,.mx-md-3{margin-left:16px!important}.m-md-4{margin:24px!important}.mt-md-4,.my-md-4{margin-top:24px!important}.mr-md-4,.mx-md-4{margin-right:24px!important}.mb-md-4,.my-md-4{margin-bottom:24px!important}.ml-md-4,.mx-md-4{margin-left:24px!important}.m-md-5{margin:48px!important}.mt-md-5,.my-md-5{margin-top:48px!important}.mr-md-5,.mx-md-5{margin-right:48px!important}.mb-md-5,.my-md-5{margin-bottom:48px!important}.ml-md-5,.mx-md-5{margin-left:48px!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:4px!important}.pt-md-1,.py-md-1{padding-top:4px!important}.pr-md-1,.px-md-1{padding-right:4px!important}.pb-md-1,.py-md-1{padding-bottom:4px!important}.pl-md-1,.px-md-1{padding-left:4px!important}.p-md-2{padding:8px!important}.pt-md-2,.py-md-2{padding-top:8px!important}.pr-md-2,.px-md-2{padding-right:8px!important}.pb-md-2,.py-md-2{padding-bottom:8px!important}.pl-md-2,.px-md-2{padding-left:8px!important}.p-md-3{padding:16px!important}.pt-md-3,.py-md-3{padding-top:16px!important}.pr-md-3,.px-md-3{padding-right:16px!important}.pb-md-3,.py-md-3{padding-bottom:16px!important}.pl-md-3,.px-md-3{padding-left:16px!important}.p-md-4{padding:24px!important}.pt-md-4,.py-md-4{padding-top:24px!important}.pr-md-4,.px-md-4{padding-right:24px!important}.pb-md-4,.py-md-4{padding-bottom:24px!important}.pl-md-4,.px-md-4{padding-left:24px!important}.p-md-5{padding:48px!important}.pt-md-5,.py-md-5{padding-top:48px!important}.pr-md-5,.px-md-5{padding-right:48px!important}.pb-md-5,.py-md-5{padding-bottom:48px!important}.pl-md-5,.px-md-5{padding-left:48px!important}.m-md-n1{margin:-4px!important}.mt-md-n1,.my-md-n1{margin-top:-4px!important}.mr-md-n1,.mx-md-n1{margin-right:-4px!important}.mb-md-n1,.my-md-n1{margin-bottom:-4px!important}.ml-md-n1,.mx-md-n1{margin-left:-4px!important}.m-md-n2{margin:-8px!important}.mt-md-n2,.my-md-n2{margin-top:-8px!important}.mr-md-n2,.mx-md-n2{margin-right:-8px!important}.mb-md-n2,.my-md-n2{margin-bottom:-8px!important}.ml-md-n2,.mx-md-n2{margin-left:-8px!important}.m-md-n3{margin:-16px!important}.mt-md-n3,.my-md-n3{margin-top:-16px!important}.mr-md-n3,.mx-md-n3{margin-right:-16px!important}.mb-md-n3,.my-md-n3{margin-bottom:-16px!important}.ml-md-n3,.mx-md-n3{margin-left:-16px!important}.m-md-n4{margin:-24px!important}.mt-md-n4,.my-md-n4{margin-top:-24px!important}.mr-md-n4,.mx-md-n4{margin-right:-24px!important}.mb-md-n4,.my-md-n4{margin-bottom:-24px!important}.ml-md-n4,.mx-md-n4{margin-left:-24px!important}.m-md-n5{margin:-48px!important}.mt-md-n5,.my-md-n5{margin-top:-48px!important}.mr-md-n5,.mx-md-n5{margin-right:-48px!important}.mb-md-n5,.my-md-n5{margin-bottom:-48px!important}.ml-md-n5,.mx-md-n5{margin-left:-48px!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:4px!important}.mt-lg-1,.my-lg-1{margin-top:4px!important}.mr-lg-1,.mx-lg-1{margin-right:4px!important}.mb-lg-1,.my-lg-1{margin-bottom:4px!important}.ml-lg-1,.mx-lg-1{margin-left:4px!important}.m-lg-2{margin:8px!important}.mt-lg-2,.my-lg-2{margin-top:8px!important}.mr-lg-2,.mx-lg-2{margin-right:8px!important}.mb-lg-2,.my-lg-2{margin-bottom:8px!important}.ml-lg-2,.mx-lg-2{margin-left:8px!important}.m-lg-3{margin:16px!important}.mt-lg-3,.my-lg-3{margin-top:16px!important}.mr-lg-3,.mx-lg-3{margin-right:16px!important}.mb-lg-3,.my-lg-3{margin-bottom:16px!important}.ml-lg-3,.mx-lg-3{margin-left:16px!important}.m-lg-4{margin:24px!important}.mt-lg-4,.my-lg-4{margin-top:24px!important}.mr-lg-4,.mx-lg-4{margin-right:24px!important}.mb-lg-4,.my-lg-4{margin-bottom:24px!important}.ml-lg-4,.mx-lg-4{margin-left:24px!important}.m-lg-5{margin:48px!important}.mt-lg-5,.my-lg-5{margin-top:48px!important}.mr-lg-5,.mx-lg-5{margin-right:48px!important}.mb-lg-5,.my-lg-5{margin-bottom:48px!important}.ml-lg-5,.mx-lg-5{margin-left:48px!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:4px!important}.pt-lg-1,.py-lg-1{padding-top:4px!important}.pr-lg-1,.px-lg-1{padding-right:4px!important}.pb-lg-1,.py-lg-1{padding-bottom:4px!important}.pl-lg-1,.px-lg-1{padding-left:4px!important}.p-lg-2{padding:8px!important}.pt-lg-2,.py-lg-2{padding-top:8px!important}.pr-lg-2,.px-lg-2{padding-right:8px!important}.pb-lg-2,.py-lg-2{padding-bottom:8px!important}.pl-lg-2,.px-lg-2{padding-left:8px!important}.p-lg-3{padding:16px!important}.pt-lg-3,.py-lg-3{padding-top:16px!important}.pr-lg-3,.px-lg-3{padding-right:16px!important}.pb-lg-3,.py-lg-3{padding-bottom:16px!important}.pl-lg-3,.px-lg-3{padding-left:16px!important}.p-lg-4{padding:24px!important}.pt-lg-4,.py-lg-4{padding-top:24px!important}.pr-lg-4,.px-lg-4{padding-right:24px!important}.pb-lg-4,.py-lg-4{padding-bottom:24px!important}.pl-lg-4,.px-lg-4{padding-left:24px!important}.p-lg-5{padding:48px!important}.pt-lg-5,.py-lg-5{padding-top:48px!important}.pr-lg-5,.px-lg-5{padding-right:48px!important}.pb-lg-5,.py-lg-5{padding-bottom:48px!important}.pl-lg-5,.px-lg-5{padding-left:48px!important}.m-lg-n1{margin:-4px!important}.mt-lg-n1,.my-lg-n1{margin-top:-4px!important}.mr-lg-n1,.mx-lg-n1{margin-right:-4px!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-4px!important}.ml-lg-n1,.mx-lg-n1{margin-left:-4px!important}.m-lg-n2{margin:-8px!important}.mt-lg-n2,.my-lg-n2{margin-top:-8px!important}.mr-lg-n2,.mx-lg-n2{margin-right:-8px!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-8px!important}.ml-lg-n2,.mx-lg-n2{margin-left:-8px!important}.m-lg-n3{margin:-16px!important}.mt-lg-n3,.my-lg-n3{margin-top:-16px!important}.mr-lg-n3,.mx-lg-n3{margin-right:-16px!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-16px!important}.ml-lg-n3,.mx-lg-n3{margin-left:-16px!important}.m-lg-n4{margin:-24px!important}.mt-lg-n4,.my-lg-n4{margin-top:-24px!important}.mr-lg-n4,.mx-lg-n4{margin-right:-24px!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-24px!important}.ml-lg-n4,.mx-lg-n4{margin-left:-24px!important}.m-lg-n5{margin:-48px!important}.mt-lg-n5,.my-lg-n5{margin-top:-48px!important}.mr-lg-n5,.mx-lg-n5{margin-right:-48px!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-48px!important}.ml-lg-n5,.mx-lg-n5{margin-left:-48px!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:4px!important}.mt-xl-1,.my-xl-1{margin-top:4px!important}.mr-xl-1,.mx-xl-1{margin-right:4px!important}.mb-xl-1,.my-xl-1{margin-bottom:4px!important}.ml-xl-1,.mx-xl-1{margin-left:4px!important}.m-xl-2{margin:8px!important}.mt-xl-2,.my-xl-2{margin-top:8px!important}.mr-xl-2,.mx-xl-2{margin-right:8px!important}.mb-xl-2,.my-xl-2{margin-bottom:8px!important}.ml-xl-2,.mx-xl-2{margin-left:8px!important}.m-xl-3{margin:16px!important}.mt-xl-3,.my-xl-3{margin-top:16px!important}.mr-xl-3,.mx-xl-3{margin-right:16px!important}.mb-xl-3,.my-xl-3{margin-bottom:16px!important}.ml-xl-3,.mx-xl-3{margin-left:16px!important}.m-xl-4{margin:24px!important}.mt-xl-4,.my-xl-4{margin-top:24px!important}.mr-xl-4,.mx-xl-4{margin-right:24px!important}.mb-xl-4,.my-xl-4{margin-bottom:24px!important}.ml-xl-4,.mx-xl-4{margin-left:24px!important}.m-xl-5{margin:48px!important}.mt-xl-5,.my-xl-5{margin-top:48px!important}.mr-xl-5,.mx-xl-5{margin-right:48px!important}.mb-xl-5,.my-xl-5{margin-bottom:48px!important}.ml-xl-5,.mx-xl-5{margin-left:48px!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:4px!important}.pt-xl-1,.py-xl-1{padding-top:4px!important}.pr-xl-1,.px-xl-1{padding-right:4px!important}.pb-xl-1,.py-xl-1{padding-bottom:4px!important}.pl-xl-1,.px-xl-1{padding-left:4px!important}.p-xl-2{padding:8px!important}.pt-xl-2,.py-xl-2{padding-top:8px!important}.pr-xl-2,.px-xl-2{padding-right:8px!important}.pb-xl-2,.py-xl-2{padding-bottom:8px!important}.pl-xl-2,.px-xl-2{padding-left:8px!important}.p-xl-3{padding:16px!important}.pt-xl-3,.py-xl-3{padding-top:16px!important}.pr-xl-3,.px-xl-3{padding-right:16px!important}.pb-xl-3,.py-xl-3{padding-bottom:16px!important}.pl-xl-3,.px-xl-3{padding-left:16px!important}.p-xl-4{padding:24px!important}.pt-xl-4,.py-xl-4{padding-top:24px!important}.pr-xl-4,.px-xl-4{padding-right:24px!important}.pb-xl-4,.py-xl-4{padding-bottom:24px!important}.pl-xl-4,.px-xl-4{padding-left:24px!important}.p-xl-5{padding:48px!important}.pt-xl-5,.py-xl-5{padding-top:48px!important}.pr-xl-5,.px-xl-5{padding-right:48px!important}.pb-xl-5,.py-xl-5{padding-bottom:48px!important}.pl-xl-5,.px-xl-5{padding-left:48px!important}.m-xl-n1{margin:-4px!important}.mt-xl-n1,.my-xl-n1{margin-top:-4px!important}.mr-xl-n1,.mx-xl-n1{margin-right:-4px!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-4px!important}.ml-xl-n1,.mx-xl-n1{margin-left:-4px!important}.m-xl-n2{margin:-8px!important}.mt-xl-n2,.my-xl-n2{margin-top:-8px!important}.mr-xl-n2,.mx-xl-n2{margin-right:-8px!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-8px!important}.ml-xl-n2,.mx-xl-n2{margin-left:-8px!important}.m-xl-n3{margin:-16px!important}.mt-xl-n3,.my-xl-n3{margin-top:-16px!important}.mr-xl-n3,.mx-xl-n3{margin-right:-16px!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-16px!important}.ml-xl-n3,.mx-xl-n3{margin-left:-16px!important}.m-xl-n4{margin:-24px!important}.mt-xl-n4,.my-xl-n4{margin-top:-24px!important}.mr-xl-n4,.mx-xl-n4{margin-right:-24px!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-24px!important}.ml-xl-n4,.mx-xl-n4{margin-left:-24px!important}.m-xl-n5{margin:-48px!important}.mt-xl-n5,.my-xl-n5{margin-top:-48px!important}.mr-xl-n5,.mx-xl-n5{margin-right:-48px!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-48px!important}.ml-xl-n5,.mx-xl-n5{margin-left:-48px!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:Roboto Mono,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!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-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#004d99!important}a.text-primary:focus,a.text-primary:hover{color:#004080!important}.text-secondary{color:#3d4955!important}a.text-secondary:focus,a.text-secondary:hover{color:#323c46!important}.text-success{color:#008053!important}a.text-success:focus,a.text-success:hover{color:#006642!important}.text-info{color:#717273!important}a.text-info:focus,a.text-info:hover{color:#646566!important}.text-warning{color:#a36200!important}a.text-warning:focus,a.text-warning:hover{color:#995c00!important}.text-danger{color:#e00929!important}a.text-danger:focus,a.text-danger:hover{color:#c70825!important}.text-light{color:#bdb4d8!important}a.text-light:focus,a.text-light:hover{color:#aea3d0!important}.text-dark{color:#050b12!important}a.text-dark:focus,a.text-dark:hover{color:#000!important}.text-100{color:#bbbdc1!important}a.text-100:focus,a.text-100:hover{color:#aeb0b5!important}.text-200{color:#a3a4a7!important}a.text-200:focus,a.text-200:hover{color:#96979a!important}.text-300{color:#8a8b8d!important}a.text-300:focus,a.text-300:hover{color:#7d7e80!important}.text-400{color:#717273!important}a.text-400:focus,a.text-400:hover{color:#646566!important}.text-500{color:#585859!important}a.text-500:focus,a.text-500:hover{color:#4b4c4c!important}.text-600{color:#3f3f40!important}a.text-600:focus,a.text-600:hover{color:#323233!important}.text-700{color:#262626!important}a.text-700:focus,a.text-700:hover{color:#191919!important}.text-800{color:#0c0c0d!important}.text-900,a.text-800:focus,a.text-800:hover,a.text-900:focus,a.text-900:hover{color:#000!important}.text-body{color:#19191a!important}.text-muted{color:#5a768a!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}body,html{font-size:16px;line-height:1.5}@media (min-width:576px){body,html{font-size:18px;line-height:1.555}}.h1,h1{letter-spacing:-1px}@media (min-width:576px){.h1,h1{font-size:2.666rem;letter-spacing:-1.3px;line-height:1.25}}.h2,h2{line-height:1.25}@media (min-width:576px){.h2,h2{font-size:2.222rem;line-height:1.2;letter-spacing:-2px}}.h3,h3{line-height:1.1428}@media (min-width:576px){.h3,h3{font-size:1.777rem;line-height:1.25}}.h4,h4{line-height:1.1666}@media (min-width:576px){.h4,h4{font-size:1.555rem;line-height:1.428;font-weight:600}}.h5,h5{font-weight:400}@media (min-width:576px){.h5,h5{font-size:1.333rem}}.h6,h6{font-weight:600;line-height:1.5}.display-1{font-size:49.776px;font-size:3.111rem}@media (min-width:576px){.display-1{font-size:3.111rem;line-height:1.428}}.blockquote,blockquote{font-family:Lora,Georgia,serif;margin:1.5rem 0}caption{font-size:12.432px;font-size:.777rem;line-height:1.4285}b,strong{font-weight:600}.small,small{font-size:15px;font-size:.9375rem;font-weight:400}@media (min-width:576px){.small,small{font-size:.8888rem}}.x-small{font-size:14px;font-size:.875rem;font-weight:400}@media (min-width:576px){.x-small{font-size:.7777rem}}.blockquote-footer{color:#656566}.bg-dark .blockquote-footer{color:#979899}.row.variable-gutters{margin-right:-6px;margin-left:-6px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:6px;padding-left:6px}@media (min-width:576px){.row.variable-gutters{margin-right:-6px;margin-left:-6px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:6px;padding-left:6px}}@media (min-width:768px){.row.variable-gutters{margin-right:-10px;margin-left:-10px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:10px;padding-left:10px}}@media (min-width:992px){.row.variable-gutters{margin-right:-10px;margin-left:-10px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:10px;padding-left:10px}}@media (min-width:1200px){.row.variable-gutters{margin-right:-14px;margin-left:-14px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:14px;padding-left:14px}}.table td,.table th{text-align:left;border-bottom:1px solid #d6dce3;border-top:none}.breadcrumb-container .breadcrumb{padding:24px;border-radius:0}.breadcrumb-container .breadcrumb .breadcrumb-item{padding-left:0}.breadcrumb-container .breadcrumb .breadcrumb-item+.breadcrumb-item:before{display:none}.breadcrumb-container .breadcrumb .breadcrumb-item i{padding-right:.5em}.breadcrumb-container .breadcrumb .breadcrumb-item a{color:#5b6f82;font-weight:600}.breadcrumb-container .breadcrumb .breadcrumb-item.active a{font-weight:400;pointer-events:none}.breadcrumb-container .breadcrumb .breadcrumb-item span.separator{display:inline-block;font-weight:600;padding:0 .5em}.breadcrumb-container .breadcrumb.dark{background:#435a70}.breadcrumb-container .breadcrumb.dark .breadcrumb-item a,.breadcrumb-container .breadcrumb.dark .breadcrumb-item span.separator{color:#fff}.breadcrumb-container .breadcrumb.dark .breadcrumb-item i{color:#0bd9d2}.modal-content,.modal-header{border-radius:0}[data-toggle=collapse] .collapse-icon:before{content:"";display:inline-block;width:0;height:0;border-top:.5rem solid;border-right:.5rem solid transparent;border-bottom:0;border-left:.5rem solid transparent;vertical-align:3px;vertical-align:.1875rem}[data-toggle=collapse].collapsed .collapse-icon:before{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.collapse-div{border-bottom:1px solid #e3e4e6}.collapse-div .collapse-div{border:1px solid #e3e4e6;border-top:0}.collapse-header{position:relative}.collapse-header [data-toggle=collapse]{width:100%;text-align:left;border:0;background-color:transparent;border-top:1px solid #e3e4e6;padding:14px 24px;cursor:pointer;color:#5c6f82;font-weight:600}.collapse-header [data-toggle=collapse][aria-expanded=false]{color:#0073e6}.collapse-header [data-toggle=collapse][aria-expanded=false]:after{content:"\e818"}.collapse-header [data-toggle=collapse][aria-expanded=true]:before{height:2px;width:56px;border-radius:2px;background-color:#0073e6;position:absolute;top:0;display:block;content:"";left:20px}.collapse-header [data-toggle=collapse][aria-expanded=false]:hover:after,.collapse-header [data-toggle=collapse][aria-expanded=true]:hover:after{text-decoration:none}.collapse-header [data-toggle=collapse]:after{content:"\e810";font-family:italia-icon-font;font-style:normal;font-weight:400;float:right;text-decoration:inherit;width:1em;margin-right:.2em;margin-top:5px;text-align:center;font-variant:normal;text-transform:none;line-height:1em}.collapse-header [data-toggle=collapse]:hover{background-color:#e6ecf2;text-decoration:underline}.collapse-header [data-toggle=collapse]:active{background-color:#0073e6;color:#fff;border-color:#0073e6}.collapse-body{padding:12px 24px 42px}.collapse-body .collapse-header button[aria-expanded=true]:before{height:0;width:0}.carousel{background-color:#444e57;padding:3.5em 3em 3em}.carousel-control-next,.carousel-control-prev{top:1em;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.carousel-control-prev{left:auto;right:6em}.carousel-control-next{right:3em}.carousel-caption{position:static;padding-bottom:0}.carousel-indicators li{background-color:rgba(101,220,223,.5)}.carousel-indicators .active{background-color:#5c6f82}.list-group-item{padding:1rem}.list-group-item.disabled,.list-group-item:disabled{cursor:default}.list-group-item-action:focus,.list-group-item-action:hover{text-decoration:underline;background-color:#d9e6f2}.list-group-item-action.disabled:focus,.list-group-item-action.disabled:hover,.list-group-item-action:disabled:focus,.list-group-item-action:disabled:hover{text-decoration:none;background-color:transparent;border-top-color:transparent}.list-group-item.active:focus,.list-group-item.active:hover{background-color:#0073e6}.alert{position:relative;margin-bottom:1rem;border:1px solid #b1b1b3;padding:1rem 1rem 1rem 4em}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3.5rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.8rem 1rem;color:inherit}.alert-success{border-left:8px solid #00cc85}.alert-info,.alert-success{background-position:1em .8em;background-repeat:no-repeat}.alert-info{border-left:8px solid #979899}.alert-warning{border-left:8px solid #f90}.alert-danger,.alert-warning{background-position:1em .8em;background-repeat:no-repeat}.alert-danger{border-left:8px solid #f73e5a;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M16 1.6C24 1.6 30.4 8 30.4 16S24 30.4 16 30.4 1.6 24 1.6 16 8 1.6 16 1.6zM16 0C7.2 0 0 7.2 0 16s7.2 16 16 16 16-7.2 16-16S24.8 0 16 0z'/%3E%3Cpath d='M14.4 24c0-.96.64-1.6 1.6-1.6s1.6.64 1.6 1.6c0 .96-.64 1.6-1.6 1.6s-1.6-.64-1.6-1.6zm.64-3.2l-.32-14.4h2.56l-.32 14.4z'/%3E%3C/svg%3E")}.alert-warning{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M14.333 26c0-1 .667-1.667 1.667-1.667S17.667 25 17.667 26 17 27.667 16 27.667 14.333 27 14.333 26zM15 22.667l-.333-15h2.667l-.333 15z'/%3E%3Cpath d='M16 2.667c1 0 2 .5 2.5 1.333l10.333 20.833c.5.833.5 2 0 2.833s-1.5 1.5-2.5 1.5H5.666c-1 0-2-.5-2.5-1.5-.5-.833-.5-2 0-2.833L13.499 4c.5-.833 1.5-1.333 2.5-1.333zM16 1c-1.5 0-3 .833-4 2.333L1.667 24.166c-1.667 3 .5 6.833 4 6.833h20.667c3.5 0 5.667-3.833 4-6.833L20.001 3.333c-1-1.667-2.5-2.333-4-2.333z'/%3E%3C/svg%3E")}.alert-success{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M32 6.682l-2.824-2.635-18.447 18.635-8.094-8.094L0 17.412l8.094 7.906h-.188l2.824 2.635 2.635-2.635z'/%3E%3C/svg%3E")}.alert-info{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M16 1.6C24 1.6 30.4 8 30.4 16S24 30.4 16 30.4 1.6 24 1.6 16 8.16 1.6 16 1.6zM16 0C7.2 0 0 7.2 0 16s7.2 16 16 16 16-7.2 16-16S24.8 0 16 0z'/%3E%3Cpath d='M14.72 9.76V6.72h2.88v3.04h-2.88zm0 15.84V12h2.88v13.6h-2.88z'/%3E%3C/svg%3E")}.btn{padding:12px 24px;font-size:16px;white-space:normal}.btn-group-lg>.btn,.btn-group-sm>.btn,.btn-lg,.btn-sm,.btn-xs{border-radius:4px;line-height:1.5}.btn-xs{padding:8px;font-size:14px;line-height:1.428}.btn-group-sm>.btn,.btn-sm{padding:10px 20px;font-size:14px;line-height:1.428}.btn-group-lg>.btn,.btn-lg{padding:14px 28px;font-size:18px;line-height:1.556}.btn-block{border-radius:0}.btn-primary.disabled,.btn-primary:disabled{color:#bfc2c9;background-color:#e6e9f2;border-color:#dfe4f2}.btn-outline-secondary{background:#fcfdff;-webkit-box-shadow:inset 0 0 0 1px #e6e9f2;box-shadow:inset 0 0 0 1px #e6e9f2}.btn-outline-secondary:hover{-webkit-box-shadow:inset 0 0 0 1px #c9cedc;box-shadow:inset 0 0 0 1px #c9cedc}.bg-dark .btn-link{color:#fff}.bg-dark .btn-primary{color:#19191a;background-color:#fff;border-color:#0073e6;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);color:#0073e6}.bg-dark .btn-primary:hover{color:#19191a;background-color:#fff;border-color:#0059b3}.bg-dark .btn-primary.focus,.bg-dark .btn-primary:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.5)}.bg-dark .btn-primary.disabled,.bg-dark .btn-primary:disabled{color:#19191a;background-color:#fff;border-color:#0073e6}.bg-dark .btn-primary:not(:disabled):not(.disabled).active,.bg-dark .btn-primary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-primary.dropdown-toggle{color:#19191a;background-color:#fff;border-color:#0053a6}.bg-dark .btn-primary:not(:disabled):not(.disabled).active:focus,.bg-dark .btn-primary:not(:disabled):not(.disabled):active:focus,.show>.bg-dark .btn-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5)}.bg-dark .btn-primary.disabled,.bg-dark .btn-primary:disabled,.bg-dark .btn-primary:hover{color:#0059b3}.bg-dark .btn-outline-primary{color:#fff;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;-webkit-box-shadow:inset 0 0 0 2px #fff;box-shadow:inset 0 0 0 2px #fff}.bg-dark .btn-outline-primary:hover{color:#e6e6e6;-webkit-box-shadow:inset 0 0 0 1px #e6e6e6;box-shadow:inset 0 0 0 1px #e6e6e6}.bg-dark .btn-outline-primary.focus,.bg-dark .btn-outline-primary:focus{-webkit-box-shadow:inset 0 0 0 1px #e6e6e6,0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 0 0 1px #e6e6e6,0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-primary.disabled,.bg-dark .btn-outline-primary:disabled{color:#fff;background-color:transparent}.bg-dark .btn-outline-primary:not(:disabled):not(.disabled).active,.bg-dark .btn-outline-primary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-outline-primary.dropdown-toggle{color:#e6e6e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e6e6e6;box-shadow:inset 0 0 0 1px #e6e6e6}.bg-dark .btn-outline-primary:not(:disabled):not(.disabled).active:focus,.bg-dark .btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.bg-dark .btn-outline-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-primary:hover{-webkit-box-shadow:inset 0 0 0 2px #e6e6e6;box-shadow:inset 0 0 0 2px #e6e6e6}.bg-dark .btn-outline-primary.focus,.bg-dark .btn-outline-primary:focus{-webkit-box-shadow:inset 0 0 0 2px #fff,0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 0 0 2px #fff,0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-primary:not(:disabled):not(.disabled).active,.bg-dark .btn-outline-primary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-outline-primary.dropdown-toggle{-webkit-box-shadow:inset 0 0 0 2px #fff;box-shadow:inset 0 0 0 2px #fff}.bg-dark .btn-secondary{background-color:#0073e6;border-color:#fff;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);color:#fff}.bg-dark .btn-secondary:hover{color:#fff;background-color:#0d86ff;border-color:#e6e6e6}.bg-dark .btn-secondary.focus,.bg-dark .btn-secondary:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-secondary.disabled,.bg-dark .btn-secondary:disabled{color:#fff;background-color:#0073e6;border-color:#fff}.bg-dark .btn-secondary:not(:disabled):not(.disabled).active,.bg-dark .btn-secondary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-secondary.dropdown-toggle{color:#fff;background-color:#1a8cff;border-color:#dfdfdf}.bg-dark .btn-secondary:not(:disabled):not(.disabled).active:focus,.bg-dark .btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.bg-dark .btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-secondary{color:#fff;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;-webkit-box-shadow:none;box-shadow:none}.bg-dark .btn-outline-secondary:hover{color:#e6e6e6;-webkit-box-shadow:inset 0 0 0 1px #e6e6e6;box-shadow:inset 0 0 0 1px #e6e6e6}.bg-dark .btn-outline-secondary.focus,.bg-dark .btn-outline-secondary:focus{-webkit-box-shadow:inset 0 0 0 1px #e6e6e6,0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 0 0 1px #e6e6e6,0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-secondary.disabled,.bg-dark .btn-outline-secondary:disabled{color:#fff;background-color:transparent}.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled).active,.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-outline-secondary.dropdown-toggle{color:#e6e6e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e6e6e6;box-shadow:inset 0 0 0 1px #e6e6e6}.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.bg-dark .btn-outline-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-secondary:hover{-webkit-box-shadow:none;box-shadow:none}.bg-dark .btn-outline-secondary.focus,.bg-dark .btn-outline-secondary:focus{-webkit-box-shadow:0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled).active,.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-outline-secondary.dropdown-toggle{-webkit-box-shadow:none;box-shadow:none}.form-group{position:relative;margin-bottom:4px;padding:1.5rem 0 1rem}.form-group button,.form-group input,.form-group optgroup,.form-group select,.form-group textarea{color:#17324d}.form-group label{position:absolute;color:#5c6f82;font-weight:600;line-height:40px;line-height:2.5rem;-webkit-transition:.2s ease-out;transition:.2s ease-out;top:24px;top:1.5rem;font-size:16px;font-size:1rem;cursor:text;display:block;width:100%;padding:0 .75rem;z-index:6}.form-group small.form-text{position:absolute;margin:0;padding:0 .75rem;font-size:12.432px;font-size:.777rem}.form-group.active label{-webkit-transform:translateY(-75%);transform:translateY(-75%);font-size:12.432px;font-size:.777rem}.form-group.active .ico-prefix,.form-group.active label{color:#5c6f82}.form-row .form-group{padding-bottom:0}input[type=date],input[type=datetime-local],input[type=email],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],select,textarea{border:none;border-bottom:1px solid #5c6f82;border-radius:0;outline:0;height:40px;height:2.5rem;width:100%;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:all .3s;transition:all .3s;font-weight:700}select,textarea{border:1px solid #5c6f82}input[type=file]+label{background-color:transparent}.form-control-plaintext+label,.form-group input.form-control-file+label,.form-group label.active,.form-group select.form-control+label,.input-group+label,.input-group~label,:disabled .form-group label{-webkit-transform:translateY(-75%);transform:translateY(-75%);font-size:12.432px;font-size:.777rem;background:transparent}:disabled .form-group label{top:0}.form-group.active .form-file-name{padding-bottom:1.95rem}.form-control-plaintext{padding:.375rem .75rem;background-color:#fff}.form-control:active,.form-control:focus{-webkit-box-shadow:none!important;box-shadow:none!important}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{background-position:100%!important;background-repeat:no-repeat!important;background-size:45px 45%!important;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2300cc85' viewBox='0 0 192 512'%3E%3Cpath d='M435.848 83.466L172.804 346.51l-96.652-96.652c-4.686-4.686-12.284-4.686-16.971 0l-28.284 28.284c-4.686 4.686-4.686 12.284 0 16.971l133.421 133.421c4.686 4.686 12.284 4.686 16.971 0l299.813-299.813c4.686-4.686 4.686-12.284 0-16.971l-28.284-28.284c-4.686-4.686-12.284-4.686-16.97 0z'/%3E%3C/svg%3E")}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{background-position:100%!important;background-repeat:no-repeat!important;background-size:45px 45%!important;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f73e5a' viewBox='0 0 384 512'%3E%3Cpath d='M231.6 256l130.1-130.1c4.7-4.7 4.7-12.3 0-17l-22.6-22.6c-4.7-4.7-12.3-4.7-17 0L192 216.4 61.9 86.3c-4.7-4.7-12.3-4.7-17 0l-22.6 22.6c-4.7 4.7-4.7 12.3 0 17L152.4 256 22.3 386.1c-4.7 4.7-4.7 12.3 0 17l22.6 22.6c4.7 4.7 12.3 4.7 17 0L192 295.6l130.1 130.1c4.7 4.7 12.3 4.7 17 0l22.6-22.6c4.7-4.7 4.7-12.3 0-17L231.6 256z'/%3E%3C/svg%3E")}.custom-select.warning,.form-control.warning{background-position:100%!important;background-repeat:no-repeat!important;background-size:25px 45%!important;border-color:#f90;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f90' viewBox='0 0 192 512'%3E%3Cpath d='M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z'/%3E%3C/svg%3E")}.custom-select.is-valid~.warning-feedback,.form-control.is-valid~.warning-feedback{display:block}.warning-feedback{display:none;width:100%;margin-top:.25rem;font-size:12.432px;font-size:.777rem;color:#f90}.invalid-feedback,.valid-feedback,.warning-feedback{margin-left:.75rem}.form-file input[type=file]{filter:alpha(opacity=0);margin:0;max-width:100%;opacity:0}.form-file .form-file-name{border-bottom:1px solid rgba(0,0,0,.15);border-radius:0;color:#464a4c;left:0;overflow:hidden;padding:.5rem .6rem 2rem;max-height:32px;max-height:2rem;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:5}.form-file .form-file-name,.form-file .form-file-name:before{background-color:#fff;line-height:1.7;position:absolute;right:0;top:0}.form-file .form-file-name:before{bottom:-1px;color:#0073e6;content:"Sfoglia";display:block;height:40px;height:2.5rem;padding:.4rem 1rem 1.5rem;border:1px solid #0073e6;z-index:6;border-top-right-radius:4px}.input-group-text{background-color:#f8f8f8;border:0;border-radius:0!important;border-bottom:1px solid #555}.input-group-prepend{margin-right:0}.input-group-append{margin-left:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:0 1rem;border-radius:0}.ico-prefix{position:absolute;width:48px;width:3rem;font-size:28.8px;font-size:1.8rem;z-index:10;text-align:center}.ico-prefix~.form-file-name{padding-left:3.5rem}.ico-prefix~.select-wrapper .select-dropdown,.ico-prefix~input,.ico-prefix~label,.ico-prefix~textarea{padding-left:3rem}.form-group.active .ico-prefix~label,.ico-prefix~.custom-select~label,.ico-prefix~label.active{padding-left:.75rem}.form-group .form-check,.form-row .form-check,.row .form-check{padding-left:0;margin-top:1rem}.form-check [type=checkbox],.form-check [type=radio]{position:absolute;left:-9999px}.form-check [type=checkbox]+label,.form-check [type=radio]+label{position:relative;padding-left:36px;cursor:pointer;display:inline-block;height:32px;line-height:32px;font-size:16px;font-size:1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.form-check [type=checkbox]+label:after,.form-check [type=checkbox]+label:before{content:"";left:0;position:absolute;-webkit-transition:.2s;transition:.2s;z-index:1;border-style:solid;border-width:2px}.form-check [type=checkbox]+label:before{top:0;width:17px;height:17px;border:1px solid #e6e9f2;border-radius:1px;margin:2px 5px;-webkit-transform:rotate(37deg);transform:rotate(37deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.form-check [type=checkbox]+label:after{border-radius:4px;height:20px;width:20px;margin:6px 5px;top:0}.form-check [type=checkbox]:checked+label:before{top:6px;left:1px;width:8px;height:13px;border-color:transparent #fff #fff transparent;border-style:solid;border-width:2px;-webkit-transform:rotate(40deg);transform:rotate(40deg);-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:.8}.form-check [type=checkbox]:checked+label:after{border-color:#0073e6;background-color:#0073e6;z-index:0}.form-check [type=checkbox]:not(:checked)+label:after{background-color:transparent;border-color:#5c6f82;z-index:0}.form-check [type=checkbox]:not(:checked)+label:before{width:0;height:0;border-color:transparent;left:6px;top:10px}.form-check [type=checkbox]:disabled+label{cursor:not-allowed}.form-check [type=checkbox]:disabled:not(:checked)+label:after{border-color:#e6e9f2;background-color:#fff}.form-check [type=checkbox]:disabled:checked+label:after{background-color:#e6e9f2;border-color:#e6e9f2}.form-check [type=radio]+label{-webkit-transition:.2s ease;transition:.2s ease}.form-check [type=radio]+label:after,.form-check [type=radio]+label:before{content:"";position:absolute;left:0;top:0;margin:5px;width:22px;height:22px;z-index:0;border-radius:50%;border-style:solid;border-width:2px;-webkit-transition:.2s ease;transition:.2s ease}.form-check [type=radio]:not(:checked)+label:after,.form-check [type=radio]:not(:checked)+label:before{border-color:#5c6f82}.form-check [type=radio]:not(:checked)+label:after{z-index:-1;-webkit-transform:scale(0);transform:scale(0)}.form-check [type=radio]:checked+label:after{border-color:#0073e6;background-color:#0073e6;z-index:0;-webkit-transform:scale(.64);transform:scale(.64)}.form-check [type=radio]:checked+label:before{border-color:#0073e6}.form-check [type=radio]:disabled+label{cursor:not-allowed}.form-check [type=radio]:disabled:not(:checked)+label:after,.form-check [type=radio]:disabled:not(:checked)+label:before{border-color:#e6e9f2}.form-check [type=radio]:disabled:checked+label:after{border-color:#e6e9f2;background-color:#e6e9f2}.form-check [type=radio]:disabled:checked+label:before{border-color:#e6e9f2}.form-check.form-check-group{padding:0 0 8px;margin-bottom:16px;-webkit-box-shadow:inset 0 -1px 0 0 rgba(1,1,1,.1);box-shadow:inset 0 -1px 0 0 rgba(1,1,1,.1)}.form-check.form-check-group [type=checkbox]+label,.form-check.form-check-group [type=radio]+label{position:static;padding-left:8px;padding-right:52px}.form-check.form-check-group [type=checkbox]+label:after,.form-check.form-check-group [type=checkbox]+label:before,.form-check.form-check-group [type=radio]+label:after,.form-check.form-check-group [type=radio]+label:before{right:15px;left:auto}.form-check.form-check-group [type=checkbox]:checked+label:before{right:26px}.form-check.form-check-group [type=radio]:checked+label:before{right:15px}.form-check.form-check-group .form-text{opacity:.6;margin:0;padding-left:8px;padding-right:52px}.toggles,.toggles *{-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.toggles label{cursor:pointer;width:100%;margin:0 8px 8px;height:32px;line-height:32px;font-weight:700}.toggles label input[type=checkbox]{opacity:0;width:0;height:0}.toggles label input[type=checkbox]+.lever{content:"";position:relative;width:46px;height:16px;background-color:#e6e9f2;border-radius:10px;-webkit-transition:background .3s ease;transition:background .3s ease;vertical-align:middle;float:right;margin:8px 16px 0}.toggles label input[type=checkbox]+.lever:after,.toggles label input[type=checkbox]+.lever:before{content:"";position:absolute;display:inline-block;width:26px;height:26px;border-radius:50%;left:0;top:-5px;left:-3px;-webkit-transition:left .3s ease,background .1s ease,-webkit-transform .1s ease;transition:left .3s ease,background .1s ease,-webkit-transform .1s ease;transition:left .3s ease,background .1s ease,transform .1s ease;transition:left .3s ease,background .1s ease,transform .1s ease,-webkit-transform .1s ease}.toggles label input[type=checkbox]+.lever:before{background-color:rgba(0,115,230,.15)}.toggles label input[type=checkbox]+.lever:after{background-color:#5c6f82;background-size:10px 10px;background-repeat:no-repeat;background-position:50%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='10' height='10' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.364 4.95l3.535 3.535L8.485 9.9 4.95 6.364 1.414 9.899 0 8.485 3.536 4.95 0 1.414 1.414 0 4.95 3.536 8.485 0 9.9 1.414 6.364 4.95z' fill='%23FFF' fill-rule='evenodd' opacity='.8'/%3E%3C/svg%3E");border:2px solid #fff}.toggles label input[type=checkbox]:checked+.lever{background-color:#e6e9f2}.toggles label input[type=checkbox]:checked+.lever:after,.toggles label input[type=checkbox]:checked+.lever:before{left:23px}.toggles label input[type=checkbox]:checked+.lever:after{background-color:#0073e6;background-size:14px 14px;background-repeat:no-repeat;background-position:50%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='14' height='11' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.879 7.536l7.07-7.072 1.415 1.415-7.071 7.07-1.414 1.415L.636 6.121 2.05 4.707 4.88 7.536z' fill='%23FFF' fill-rule='evenodd' opacity='.5'/%3E%3C/svg%3E")}.toggles label input[type=checkbox][disabled]+.lever{cursor:default;background-color:#e6e9f2}.toggles label input[type=checkbox][disabled]+.lever:after,.toggles label input[type=checkbox][disabled]:checked+.lever:after{background-color:#e6e9f2}.select-wrapper{position:relative}.select-wrapper .search-wrap input{width:100%;border:none;border-bottom:1px solid #0073e6;font-size:14.4px;font-size:.9rem;padding:0 .5em}.select-wrapper .dropdown-menu{background-color:#fff;border-radius:0;-webkit-box-shadow:0 2px 4px 3px rgba(0,0,0,.1);box-shadow:0 2px 4px 3px rgba(0,0,0,.1);margin:0;display:none;min-width:100px;max-height:240px;overflow-y:auto;position:absolute;padding:.3rem;z-index:999;will-change:width,height;list-style-type:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.select-wrapper .dropdown-menu.show{display:block}.select-wrapper .dropdown-menu li{clear:both;color:#000;cursor:pointer;line-height:32px;width:100%;text-align:left;text-transform:none}.select-wrapper .dropdown-menu li.optgroup>span{color:#ccc;padding:0}.select-wrapper .dropdown-menu li:not(.disabled):focus,.select-wrapper .dropdown-menu li:not(.disabled):hover{background-color:#eee}.select-wrapper .dropdown-menu li.active>span:after{content:"";background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiB2aWV3Qm94PSIwIDAgNDQ4LjggNDQ4LjgiPjxwYXRoIGZpbGw9IiMwMDZERjAiIGQ9Ik0xNDIuOCAzMjMuODVMMzUuNyAyMTYuNzUgMCAyNTIuNDVsMTQyLjggMTQyLjggMzA2LTMwNi0zNS43LTM1Ljd6Ii8+PC9zdmc+");background-size:16px 16px;background-repeat:no-repeat;background-position:50%;float:right;display:block;height:32px;width:16px;opacity:.5}.select-wrapper .dropdown-menu li>a,.select-wrapper .dropdown-menu li>span{font-size:14px;color:#5c6f82;font-weight:600;display:block;padding:0 .5rem}.select-wrapper .dropdown-menu li>a.filtrable label,.select-wrapper .dropdown-menu li>a [type=checkbox],.select-wrapper .dropdown-menu li>span.filtrable label,.select-wrapper .dropdown-menu li>span [type=checkbox]{display:none}.select-wrapper .dropdown-menu li.disabled>span{cursor:unset;color:#ccc}.select-wrapper .dropdown-menu li>a>i{height:inherit;line-height:inherit}.select-wrapper .select-dropdown{color:#17324d;border-bottom:1px solid #5c6f82;position:relative;cursor:pointer;background-color:transparent;outline:0;width:100%;font-size:16px;font-size:1rem;margin:0 0 15px;display:block;line-height:24px;padding:12px 38px 12px 16px}.select-wrapper .select-dropdown:disabled{color:rgba(0,0,0,.3);border-bottom-color:rgba(0,0,0,.3);cursor:default}.select-wrapper .select-dropdown ul{list-style-type:none;padding:0}.select-wrapper .select-dropdown ul li.disabled,.select-wrapper .select-dropdown ul li.disabled>span,.select-wrapper .select-dropdown ul li.optgroup{color:rgba(0,0,0,.3);background-color:transparent!important;cursor:context-menu}.select-wrapper .select-dropdown ul li.optgroup{border-top:1px solid #eee}.select-wrapper .select-dropdown ul li.optgroup.selected>span{color:rgba(0,0,0,.7)}.select-wrapper .select-dropdown ul li.optgroup>span{color:rgba(0,0,0,.4)}.select-wrapper .caret{color:#757575;position:absolute;right:12px;line-height:16px;top:calc(50% - 8px)}.select-wrapper .caret .disabled{color:rgba(0,0,0,.46)}.select-wrapper.show .select-dropdown{color:#0073e6;border-bottom:1px solid #0073e6}.select-wrapper.show .caret{color:#0073e6}.select-wrapper+label{padding:0 .75rem!important;position:absolute;top:-18px;font-size:12.8px;font-size:.8rem}.select-wrapper select.custom-select{display:none!important}.select-wrapper select:disabled{color:rgba(0,0,0,.3)}.btn-eye{background-position:50%!important;background-repeat:no-repeat!important;width:28px;height:22px;position:absolute;right:8px;right:.5rem;top:36px;top:2.25rem;z-index:10;color:#5c6f82;cursor:pointer}.eye-on{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%235c6f82' viewBox='0 0 576 512'%3E%3Cpath d='M272.702 359.139c-80.483-9.011-136.212-86.886-116.93-167.042l116.93 167.042zM288 392c-102.556 0-192.092-54.701-240-136 21.755-36.917 52.1-68.342 88.344-91.658l-27.541-39.343C67.001 152.234 31.921 188.741 6.646 231.631a47.999 47.999 0 0 0 0 48.739C63.004 376.006 168.14 440 288 440a332.89 332.89 0 0 0 39.648-2.367l-32.021-45.744A284.16 284.16 0 0 1 288 392zm281.354-111.631c-33.232 56.394-83.421 101.742-143.554 129.492l48.116 68.74c3.801 5.429 2.48 12.912-2.949 16.712L450.23 509.83c-5.429 3.801-12.912 2.48-16.712-2.949L102.084 33.399c-3.801-5.429-2.48-12.912 2.949-16.712L125.77 2.17c5.429-3.801 12.912-2.48 16.712 2.949l55.526 79.325C226.612 76.343 256.808 72 288 72c119.86 0 224.996 63.994 281.354 159.631a48.002 48.002 0 0 1 0 48.738zM528 256c-44.157-74.933-123.677-127.27-216.162-135.007C302.042 131.078 296 144.83 296 160c0 30.928 25.072 56 56 56s56-25.072 56-56l-.001-.042c30.632 57.277 16.739 130.26-36.928 171.719l26.695 38.135C452.626 346.551 498.308 306.386 528 256z'/%3E%3C/svg%3E")}.eye-off{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%235c6f82' viewBox='0 0 576 512'%3E%3Cpath d='M569.354 231.631C512.97 135.949 407.81 72 288 72 168.14 72 63.004 135.994 6.646 231.631a47.999 47.999 0 0 0 0 48.739C63.031 376.051 168.19 440 288 440c119.86 0 224.996-63.994 281.354-159.631a47.997 47.997 0 0 0 0-48.738zM288 392c-102.556 0-192.091-54.701-240-136 44.157-74.933 123.677-127.27 216.162-135.007C273.958 131.078 280 144.83 280 160c0 30.928-25.072 56-56 56s-56-25.072-56-56l.001-.042C157.794 179.043 152 200.844 152 224c0 75.111 60.889 136 136 136s136-60.889 136-136c0-31.031-10.4-59.629-27.895-82.515C451.704 164.638 498.009 205.106 528 256c-47.908 81.299-137.444 136-240 136z'/%3E%3C/svg%3E")}.psw-wrapper{padding:0 .75rem}.psw-meter{height:3px;max-width:180px}.psw-meter .col-3{height:3px}.psw-percent,.psw-text{font-size:12px;font-size:.75rem;display:block;padding:.25rem 0;font-weight:500}.psw-percent{margin-right:5px}@-webkit-keyframes dropdownFadeIn{0%{opacity:0;margin-top:0}to{opacity:1;margin-top:16px}}@keyframes dropdownFadeIn{0%{opacity:0;margin-top:0}to{opacity:1;margin-top:16px}}@-webkit-keyframes dropdownFadeInTop{0%{opacity:0;margin-top:0}to{opacity:1;margin-top:-16px}}@keyframes dropdownFadeInTop{0%{opacity:0;margin-top:0}to{opacity:1;margin-top:-16px}}.btn-dropdown{color:#06c;padding:0 4px;background-color:transparent;font-size:16px;font-size:1rem;border-radius:0}.btn-dropdown:not(:disabled):not(.disabled):active{-webkit-box-shadow:none;box-shadow:none}.btn-dropdown:after{content:"";font-size:12.8px;font-size:.8rem;font-family:italia-icon-font;font-style:normal;font-weight:400;speak:none;border:none;display:inline-block;vertical-align:0;width:auto;height:auto;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.btn-dropdown[aria-expanded=true]:after{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.dropdown-menu{border-radius:0 0 4px 4px}.dropdown-menu.full-width{width:100%}.dropdown-menu.full-width .link-list li{display:inline-block;width:auto}.dropdown-menu.full-width .link-list li:focus,.dropdown-menu.full-width .link-list li:hover{background:none;text-decoration:underline}.dropdown-menu .link-list{margin-bottom:0}.dropdown-menu .link-list h3{line-height:2.3em;margin-bottom:0}.dropdown-menu:before{content:"";position:absolute;top:-6px;left:24px;width:18px;height:18px;border-radius:4px;background-color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.dropdown-menu[x-placement=top-start]{border-radius:4px 4px 0 0}.dropdown-menu[x-placement=top-start]:before{bottom:-6px;top:auto}.dropdown-menu.dark{background-color:#435a70}.dropdown-menu.dark .link-list-wrapper ul span.divider{background:#2e465e}.dropdown-menu.dark .link-list-wrapper ul li a:hover span,.dropdown-menu.dark .link-list-wrapper ul li a span,.dropdown-menu.dark .link-list-wrapper ul li h3,.dropdown-menu.dark .link-list-wrapper ul li i{color:#fff}.dropdown-menu.dark .link-list-wrapper ul li a:not(.active):not(.disabled):hover i{color:#4fe0dc}.dropdown-menu.dark .link-list-wrapper ul li a.disabled span{color:#adb2b8}.dropdown-menu.dark:before{background-color:#435a70}nav.pagination-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination-wrapper,nav.pagination-wrapper.pagination-total{-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}nav.pagination-wrapper.pagination-total{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination-wrapper.pagination-total ul{margin-bottom:.5rem}nav.pagination-wrapper.pagination-total p{font-size:14.222px;font-size:.8888888889rem;color:#5b6f82;margin-bottom:1rem;font-weight:600;text-align:center}nav.pagination-wrapper .form-group{margin-left:2.5rem;width:72px;width:4.5rem;margin-top:0}nav.pagination-wrapper .form-group label{font-size:14.222px;font-size:.8888888889rem;color:#9da2a6}nav.pagination-wrapper .form-group.active label{font-size:12.8px;font-size:.8rem}nav.pagination-wrapper .btn.dropdown-toggle{font-size:14.222px;font-size:.8888888889rem;color:#5b6f82;font-weight:600;padding:12px;height:40px;height:2.5rem;border:none;width:100%}nav.pagination-wrapper .btn.dropdown-toggle:after{color:#0073e6;margin-left:.5rem}.pagination{-ms-flex-wrap:wrap;flex-wrap:wrap}.pagination .page-item{margin-right:5px}.pagination .page-item.disabled a.page-link,.pagination .page-item.disabled a.page-link i[class^=it-]{color:#c2c7cc}.pagination .page-item span.page-link{pointer-events:none}.pagination .page-item .page-link{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:40px;height:2.5rem;min-width:40px;min-width:2.5rem;border-radius:4px;border:none;font-size:14.222px;font-size:.8888888889rem;font-weight:600;color:#5b6f82;background-color:transparent}.pagination .page-item .page-link[aria-current]{border:1px solid #06c;color:#06c;pointer-events:none}.pagination .page-item .page-link.text,.pagination .page-item .page-link i[class^=it-]{color:#0073e6}.pagination .page-item .page-link i[class^=it-]{font-size:11.2px;font-size:.7rem}.pagination .page-item .page-link span.d-inline-block{margin-right:.5rem}.pagination .page-item .page-link:hover{color:#06c;background-color:transparent}.pagination .page-item .page-link:hover i[class^=it-]{color:#06c}@media (min-width:576px){.pagination .page-item .page-link{height:2.6666666667rem;min-width:2.6666666667rem}nav.pagination-wrapper .btn.dropdown-toggle{height:2.6666666667rem}}@media (min-width:768px){nav.pagination-wrapper{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}nav.pagination-wrapper .dropdown{margin-left:2.6666666667rem}}@media (max-width:767.98px){.offcanvas-collapse{position:fixed;top:56px;bottom:0;left:1em;width:100%;overflow-y:auto;background-color:#323333;-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out;-webkit-transform:translateX(100%);transform:translateX(100%)}.offcanvas-collapse.open{-webkit-transform:translateX(-1rem);transform:translateX(-1rem)}}.nav-tabs{position:relative;background-color:#fff;border-bottom:0}.nav-tabs:after{content:"";position:absolute;z-index:-1;-webkit-box-shadow:0 0 2rem rgba(0,0,0,.15);box-shadow:0 0 2rem rgba(0,0,0,.15);bottom:0;left:10%;right:10%;width:80%;height:50%;border-radius:100%}.nav-tabs .nav-link{border-radius:0;font-weight:600;color:#5c6f82;border:none;border-bottom:2px solid transparent}.nav-tabs .nav-link.disabled{color:#b1b1b3;font-weight:400}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{border-bottom:2px solid #06c;color:#06c;cursor:inherit}.nav-tabs .nav-item{margin-bottom:0}.nav-tabs.nav-dark{background-color:#455b71}.nav-tabs.nav-dark .nav-link{color:#c7d1d0}.nav-tabs.nav-dark .nav-item.show .nav-link,.nav-tabs.nav-dark .nav-link.active{background-color:#455b71;color:#00fff7;border-bottom:2px solid #00fff7}.it-ico-sm{font-size:28px;font-size:1.75rem}.it-ico{font-size:20px;font-size:1.25rem}.it-ico-lg{font-size:24px;font-size:1.5rem}.cookiebar{bottom:0;left:0;right:0;display:none;position:fixed;width:100%;z-index:1100}.cookiebar.cookiebar-top{bottom:auto;top:0}.cookiebar.show{display:block}.hero{padding:1rem;margin-bottom:1rem;background-color:#cacacc;border-radius:0}@media (min-width:576px){.hero{padding:1rem}}.hero .hero-heading{font-size:32px;font-size:2rem;font-weight:700;color:#00264d;margin-bottom:.8rem}.hero-fluid{padding-right:0;padding-left:0;border-radius:0}.forward{display:block;text-align:center;font-size:48px;font-size:3rem;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.forward:hover{text-decoration:none}.return-to-top{position:fixed;bottom:16px;right:16px;background:#0073e6;background:rgba(0,115,230,.7);width:48px;height:48px;display:block;text-decoration:none;border-radius:50%;display:none;text-align:center;z-index:1}.return-to-top,.return-to-top i{-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.return-to-top i{color:#fff;margin:0;position:relative;top:8px;font-size:20px}.return-to-top i:before{margin:0}.return-to-top:hover{background:rgba(0,115,230,.9);text-decoration:none}.return-to-top:hover i{color:#fff;top:4px}.autocomplete-clear{visibility:hidden;position:absolute;z-index:2;right:4px;right:.25rem;top:8px;top:.5rem;background:transparent;border:none;cursor:pointer}.autocomplete-clear svg{fill:#a6a6a6}.autocomplete-wrap{position:absolute;left:0;right:0;background:#fff;-webkit-box-shadow:0 2px 5px rgba(0,0,0,.25);box-shadow:0 2px 5px rgba(0,0,0,.25);z-index:100;max-height:240px;overflow-y:auto;padding-left:0;list-style-type:none}.autocomplete-wrap li{cursor:pointer;padding:12px 16px;font-size:14px;font-size:.875rem}.autocomplete-wrap li:hover{background:#eee}.link-list-wrapper ul{padding:0;list-style-type:none}.link-list-wrapper ul.link-sublist{padding-left:24px}.link-list-wrapper ul li a{font-size:.889em;line-height:2.3em;display:block;padding:0 24px;position:relative}.link-list-wrapper ul li a:hover:not(.disabled){text-decoration:none}.link-list-wrapper ul li a:hover:not(.disabled) span{color:#06c;text-decoration:underline}.link-list-wrapper ul li a:hover:not(.disabled) p{color:#06c;text-decoration:none}.link-list-wrapper ul li a.disabled:hover{text-decoration:none}.link-list-wrapper ul li a.medium{font-weight:600}.link-list-wrapper ul li a span{color:#06c;display:block;margin-right:24px}.link-list-wrapper ul li a.right-icon i.right{position:absolute;top:0;right:24px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.link-list-wrapper ul li a.right-icon i.right.secondary{color:#9da2a6}.link-list-wrapper ul li a.right-icon[aria-expanded=true] i.right{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.link-list-wrapper ul li a.active span{color:#17324d;text-decoration:underline}.link-list-wrapper ul li a.disabled{cursor:not-allowed}.link-list-wrapper ul li a.disabled.left-icon i,.link-list-wrapper ul li a.disabled.left-icon i.secondary,.link-list-wrapper ul li a.disabled.right-icon i,.link-list-wrapper ul li a.disabled.right-icon i.secondary,.link-list-wrapper ul li a.disabled span{color:#adb2b8}.link-list-wrapper ul li a.left-icon{display:-webkit-box;display:-ms-flexbox;display:flex}.link-list-wrapper ul li a.left-icon i.left{margin-right:8px}.link-list-wrapper ul li a.large{font-size:1em}.link-list-wrapper ul li a p{font-size:.778em;line-height:normal;color:#5b6f82}.link-list-wrapper ul li a.avatar{display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:8px}.link-list-wrapper ul li a.avatar .avatar{display:block;border-radius:50px;margin-right:8px}.link-list-wrapper ul li h3{font-size:1em;color:#17324d;padding:0 24px}.link-list-wrapper ul li h3 a{line-height:inherit;font-size:1em;padding:0}.link-list-wrapper ul .divider{display:block;height:1px;background:#ebeced;margin:8px 0}.link-list-wrapper ul .toggles label{padding:0 24px;font-size:.889em;line-height:2.3em;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;height:auto;font-weight:inherit;margin:0}.link-list-wrapper ul .toggles input[type=checkbox]+.lever{margin:8px 0 0}.link-list-wrapper ul .form-check.form-check-group{padding:0 24px;-webkit-box-shadow:none;box-shadow:none}.link-list-wrapper ul .form-check.form-check-group [type=checkbox]+label{padding-left:0;font-size:.889em;line-height:2.3em;height:inherit;margin-bottom:0}.link-list-wrapper ul .form-check.form-check-group [type=checkbox]+label:after{right:24px}.link-list-wrapper ul .form-check.form-check-group [type=checkbox]+label:before{right:35px}.link-list-wrapper ul .form-check.form-check-group [type=checkbox][disabled]+label{color:#adb2b8}@media (min-width:576px){.link-list-wrapper ul li a.large{font-size:1em;line-height:2.7em}}@media (min-width:768px){.link-list-wrapper ul li a.large{line-height:2.7em}}@-webkit-keyframes megamenuFadeIn{0%{opacity:0;margin-top:16px}to{opacity:1;margin-top:16px}}@keyframes megamenuFadeIn{0%{opacity:0;margin-top:16px}to{opacity:1;margin-top:16px}}.navbar{background:#06c}.navbar .navbar-collapsable{position:fixed;top:0;right:0;left:0;bottom:0;z-index:10;background:rgba(0,0,0,.6);display:none}.navbar .navbar-collapsable .menu-wrapper{background:#06c;position:absolute;top:0;bottom:0;right:0;left:48px;pointer-events:all;overflow-y:auto;-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition:all .3s;transition:all .3s}.navbar .navbar-collapsable .navbar-nav{margin-top:102px;padding:24px 0}.navbar .navbar-collapsable .navbar-nav li a.nav-link{color:#fff;font-weight:400;padding:12px 24px;position:relative}.navbar .navbar-collapsable .navbar-nav li a.nav-link.active{border-left:2px solid #fff}.navbar .navbar-collapsable.expanded .close-div,.navbar .navbar-collapsable.expanded .menu-wrapper{-webkit-transform:translateX(0);transform:translateX(0)}.navbar .close-div{-webkit-transform:translateX(100%);transform:translateX(100%);padding:24px;position:fixed;left:48px;right:0;top:0;background:#06c;z-index:10;-webkit-transition:all .3s;transition:all .3s}.navbar .close-div .close-menu{background:transparent;color:#fff;text-align:center;font-size:.75em;text-transform:uppercase;padding:0}.navbar .close-div .close-menu span{display:block;text-align:center;font-size:2em}.navbar .close-div .close-menu span:before{margin-right:0}.navbar .dropdown-menu{background:transparent;-webkit-box-shadow:none;box-shadow:none}.navbar .dropdown-menu:before{display:none}.navbar .dropdown-menu .link-list-wrapper{padding-left:24px;padding-right:24px}.navbar .dropdown-menu .link-list-wrapper ul li a h3,.navbar .dropdown-menu .link-list-wrapper ul li a span,.navbar .dropdown-menu .link-list-wrapper ul li h3{color:#fff}.navbar .dropdown-toggle{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar .dropdown-toggle:after{font-family:italia-icon-font;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:auto;height:auto;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;content:"\e818";vertical-align:auto;border:none;border-bottom:0;font-size:.8em;line-height:2em;-webkit-transform-origin:center;transform-origin:center;-webkit-transition:all .3s;transition:all .3s}.navbar .dropdown-toggle[aria-expanded=true]:after{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.custom-navbar-toggler{background:none;border:none}.custom-navbar-toggler span{color:#fff;font-size:1.625em}.inline-menu .link-list-wrapper .link-list,.inline-menu .link-list-wrapper .link-list li a{position:relative}.inline-menu .link-list-wrapper .link-list li a i{color:#6aaaeb}.inline-menu .link-list-wrapper .link-list li a:after{content:"";display:block;width:2px;background:#06c;position:absolute;right:0;top:0;height:100%;-webkit-transform-origin:center;transform-origin:center;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transition:all .3s;transition:all .3s;z-index:1}.inline-menu .link-list-wrapper .link-list li a.active span{color:#06c;text-decoration:none}.inline-menu .link-list-wrapper .link-list li a[aria-expanded=true]:after{-webkit-transform:scaleY(1);transform:scaleY(1)}.inline-menu .link-list-wrapper .link-list:after{content:"";display:block;width:2px;background:-webkit-gradient(linear,left top,left bottom,from(#e6ecf2),to(rgba(230,236,242,.3)));background:linear-gradient(180deg,#e6ecf2 0,rgba(230,236,242,.3));position:absolute;right:0;top:0;height:100%}@media (min-width:992px){.navbar{background:#06c;padding:0}.navbar .navbar-collapsable{position:relative;z-index:auto;background:none;display:block!important}.navbar .navbar-collapsable,.navbar .navbar-collapsable .menu-wrapper{top:auto;right:auto;left:auto;bottom:auto;-webkit-transition:none;transition:none}.navbar .navbar-collapsable .menu-wrapper{position:inherit;overflow-y:visible;-webkit-transform:none;transform:none}.navbar .navbar-collapsable .navbar-nav{margin-top:0;padding:0 24px}.navbar .navbar-collapsable .navbar-nav li a.nav-link{font-weight:400;padding:12px 24px}.navbar .navbar-collapsable .navbar-nav li a.nav-link.active{border-left:0;border-bottom:2px solid #fff}.navbar .navbar-collapsable .navbar-nav li a.nav-link.disabled{opacity:.5;cursor:not-allowed}.navbar .close-div{display:none}.navbar .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#19191a;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:0 solid transparent;border-radius:4px;-webkit-box-shadow:0 0 30px 5px rgba(0,0,0,.05);box-shadow:0 0 30px 5px rgba(0,0,0,.05)}.navbar .dropdown-menu.show{-webkit-animation:dropdownFadeIn .3s forwards;animation:dropdownFadeIn .3s forwards;top:calc(100% - 16px)}.navbar .dropdown-menu:before{display:block}.navbar .dropdown-menu .link-list-wrapper{padding-left:0;padding-right:0}.navbar .dropdown-menu .link-list-wrapper ul li a h3,.navbar .dropdown-menu .link-list-wrapper ul li a span{color:#06c}.navbar .dropdown-menu .link-list-wrapper ul li h3{color:#19191a}.navbar .dropdown-toggle{display:block;-webkit-box-pack:inherit;-ms-flex-pack:inherit;justify-content:inherit}.navbar .dropdown-toggle:after{content:"";font-size:.8rem;font-family:italia-icon-font;font-style:normal;font-weight:400;speak:none;border:none;display:inline-block;vertical-align:0;width:auto;height:auto;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.navbar.megamenu .navbar-collapsable{width:100%}.navbar.megamenu .navbar-collapsable .nav-item{position:static}.navbar.megamenu .navbar-collapsable .nav-item a{position:relative}.navbar.megamenu .navbar-collapsable .nav-item a:before{content:"";position:absolute;top:auto;bottom:-12px;left:24px;width:18px;height:18px;border-radius:4px;background-color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0;-webkit-transition:opacity .3s;transition:opacity .3s}.navbar.megamenu .navbar-collapsable .nav-item.show a:before{opacity:1}.navbar.megamenu .navbar-collapsable .dropdown-menu{min-width:auto;left:24px;right:24px}.navbar.megamenu .navbar-collapsable .dropdown-menu:before{display:none}.navbar.megamenu .navbar-collapsable .dropdown-menu.show{-webkit-animation:megamenuFadeIn .3s forwards;animation:megamenuFadeIn .3s forwards}.custom-navbar-toggler{display:none}}.skiplinks{background-color:#0bd9d2;text-align:center}.skiplinks a{display:inline-block;padding:.5rem;display:block;font-weight:600;color:#5b6f82;text-decoration:underline}.componente-base{background-color:#0073e6;color:#fff;cursor:pointer;padding:8px}.focus--keyboard,.form-check [type=checkbox]:focus+label,.toggles label input[type=checkbox]:focus+.lever{border-color:#f90;-webkit-box-shadow:0 0 6px 2px #f90;box-shadow:0 0 6px 2px #f90;outline:none}.focus--mouse,.form-check [type=checkbox]:focus.focus--mouse+label,.toggles label input[type=checkbox]:focus.focus--mouse+.lever{border-color:inherit;-webkit-box-shadow:none;box-shadow:none;outline:none}.bg-primary--dark{background-color:#06c}.bg-primary--mid-dark{background-color:#004e95}.bg-primary--darken{background-color:#002b4d}.text-grey{color:#ccc}.text-sans-serif{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}.text-serif{font-family:Lora,serif}.text-light-blue{color:#e6f3fe}.text-blue{color:#0073e6}.border-dark-blue{border-color:#193e5e!important}.border-medium-blue{border-color:#06c!important}.border-grey-light{border-color:#eaebed!important}.border-width-2{border-width:2px!important}.stopScrolling--vertical{overflow-y:hidden}.deactive{display:none!important}@font-face{font-family:docs-icons;src:url(../font/docs.eot);src:url(../font/docs-italia.eot#iefix) format("embedded-opentype"),url(../font/docs-italia.ttf) format("truetype"),url(../font/docs-italia.woff) format("woff"),url(../font/docs-italia.svg#docs) format("svg");font-weight:400;font-style:normal}[class*=" docs-icon-"],[class^=docs-icon-]{font-family:docs-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:middle;color:inherit;font-size:20.8px;font-size:1.3rem;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.docs-icon-more:before{content:""}.docs-icon-expand:before{content:""}.docs-icon-collapse:before{content:""}.docs-icon-plus:before{content:""}.docs-icon-minus:before{content:""}.docs-icon-document:before{content:""}.docs-icon-edit:before{content:""}.docs-icon-download:before{content:""}.docs-icon-info:before{content:""}.docs-icon-compare:before{content:""}.docs-icon-github:before{content:""}.docs-icon-share:before{content:""}.docs-icon-search:before{content:""}.docs-icon-link:before{content:""}.docs-icon-external-link:before{content:""}.docs-icon-comment:before{content:""}.docs-icon-attention:before,.docs-icon-warning:before{content:""}.docs-icon-example:before{content:""}.docs-icon-procedure:before{content:""}.docs-icon-hint:before{content:""}.docs-icon-note:before{content:""}.docs-icon-step:before{content:""}.docs-icon-pdf:before{content:""}.docs-icon-html:before{content:""}.docs-icon-project:before{content:""}.docs-icon-publisher:before{content:""}.docs-icon-docs:before{content:""}.docs-icon-user:before{content:""}.small{font-size:14px}.navbar-dark--text-white{color:#fff}.navbar-dark .lang-selector .nav-link,.navbar-dark .navbar-nav .nav-link{color:#fff!important}.navbar.bg-white{background-color:#fff}.navbar.primary-bg-a7{background-color:#0059b3}@media (min-width:992px){.dropdown-menu.dropdown-menu-right:before{right:24px;left:auto}}@media (min-width:992px){.navbar .dropdown-menu.dropdown-menu-right{left:auto;right:0}}@media (max-width:991.98px){.dropdown-menu-right{right:auto;left:auto}}.btn-group.show .dropdown-menu[x-placement=bottom-start],.dropdown.show .dropdown-menu[x-placement=bottom-start]{-webkit-animation:dropdownFadeIn .3s forwards;animation:dropdownFadeIn .3s forwards}.btn-group.show .dropdown-menu[x-placement=top-start],.dropdown.show .dropdown-menu[x-placement=top-start]{-webkit-animation:dropdownFadeInTop .3s forwards;animation:dropdownFadeInTop .3s forwards}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-menu:before{z-index:-1}.injected{display:none}body{color:#596771;background-color:#002b4d}body.no-scroll{overflow-y:hidden}p{font-family:Lora,serif}h1,h2,h3,h4,h5{color:#000;margin-bottom:2rem}img{max-width:100%;height:auto}.container-fluid--desktop{max-width:1450px}@-webkit-keyframes pulsate{0%{-webkit-transform:scale(.1);transform:scale(.1);opacity:0}50%{opacity:1}to{-webkit-transform:scale(1.2);transform:scale(1.2);opacity:0}}@keyframes pulsate{0%{-webkit-transform:scale(.1);transform:scale(.1);opacity:0}50%{opacity:1}to{-webkit-transform:scale(1.2);transform:scale(1.2);opacity:0}}.loading{overflow:hidden}.loading:after{position:absolute;background:#0073e6;height:100%;width:100%;z-index:10;content:"";left:0;top:0}.loading:before{border:5px solid #fff;margin:-15px 0 0 -15px;border-radius:30px;position:absolute;content:"";z-index:11;height:30px;left:50%;top:50%;opacity:0;width:30px;-webkit-animation:pulsate 1s ease-out;animation:pulsate 1s ease-out;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.loading.no-bg:after{background:none;position:relative}.dropdown-menu{background-color:#fff;padding:.5rem;margin:0;border-radius:.2rem;-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);z-index:100}.dropdown-menu .dropdown-item{color:#0073e6}.dropdown-menu .dropdown-item.active,.dropdown-menu .dropdown-item:active{font-weight:600;text-decoration:inherit;background-color:inherit}#version-list .dropdown-toggle .current-version{max-width:8em;text-overflow:ellipsis;overflow:hidden;display:inline-block;font-size:inherit;font-weight:400}#version-list .version-list-wrapper{max-height:10.2em;max-width:18em;overflow-y:scroll}#version-list .dropdown-item{text-overflow:ellipsis;max-width:16em;overflow-x:hidden}.document-actions .dropdown-toggle:after{vertical-align:middle;line-height:1.5}@media (max-width:767.98px){.document-actions .dropdown-toggle:after{font-family:italia-icon-font!important;border:none;margin:0 2em 0 0;width:auto;height:auto;float:right;content:"\e818";vertical-align:middle;font-size:.8em;line-height:2em;-webkit-transform-origin:center;transform-origin:center;-webkit-transition:all .3s;transition:all .3s}.document-actions .dropdown-toggle[aria-expanded=true]:after{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.document-actions .dropdown-toggle:hover{text-decoration:none}.document-actions .dropdown-menu.show{position:static!important;-webkit-transform:none!important;transform:none!important;-webkit-box-shadow:none;box-shadow:none;padding:0;margin-top:16px;-webkit-animation:none;animation:none}.document-actions .dropdown-menu.show:before{display:none}}.header{font-size:16px;font-size:1rem}.header .navbar-brand{font-size:14.224px;font-size:.889rem;font-weight:600}.header .navbar-brand a{text-decoration:none}.header .navbar .dropdown-toggle:after{margin:0 .2rem;font-size:11.2px;font-size:.7rem}.header .nav-item{margin-left:.2rem}@media (min-width:992px){.header .nav-item{border-left:0;margin-left:0}}.header .nav-item.active{font-weight:600}.header .nav-item:not(.nav-text):not(.nav-item--no-underline).active,.header .nav-item:not(.nav-text):not(.nav-item--no-underline):hover{border-left:.2rem solid #fff;margin-left:0}@media (min-width:992px){.header .nav-item:not(.nav-text):not(.nav-item--no-underline).active,.header .nav-item:not(.nav-text):not(.nav-item--no-underline):hover{border-left:0;margin-left:0;border-bottom:2px solid #fff;margin-bottom:0}}.slim-header{font-size:14.224px;font-size:.889rem}.slim-header .navbar-toggler .navbar__icon{font-size:11.2px;font-size:.7rem;line-height:3em;display:inline-block;-webkit-transform:scaleY(-1);transform:scaleY(-1);-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.slim-header .navbar-toggler.collapsed .navbar__icon{-webkit-transform:scaleY(1);transform:scaleY(1)}.slim-header .navbar-toggler .dropdown-toggle:after{content:""}.slim-header.navbar .divider{border-top:.05rem solid #799ebc;padding-right:1px;width:10%;margin-top:.75rem;margin-bottom:1rem;margin-left:.2rem;padding-bottom:1px}.slim-header.navbar .divider:first-child{margin-top:1px}.slim-header.navbar .divider.divider--w-100{width:100%}@media (min-width:992px){.slim-header.navbar .divider.divider--w-100{width:inherit}}@media (min-width:992px){.slim-header.navbar .divider{border-top:0;width:inherit;margin-top:inherit;margin-bottom:inherit;border-right:.05rem solid #06c;padding-right:1px;margin-left:0}}.secondary-nav{font-weight:600}@media (max-width:991.98px){.secondary-nav.secondary-nav--offcanvas{-webkit-transform:translateX(-100%);transform:translateX(-100%);z-index:10;background-color:#fff;color:#06c;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;position:fixed;top:0;left:0;bottom:0;right:25%;overflow-y:auto}.secondary-nav.secondary-nav--offcanvas.active{-webkit-transform:translateX(0);transform:translateX(0)}}.secondary-nav .navbar-nav li{padding:.5rem;border-bottom:.2rem solid transparent}.secondary-nav .nav-item:not(.nav-text):not(.nav-item--no-underline).active,.secondary-nav .nav-item:not(.nav-text):not(.nav-item--no-underline):hover{border-bottom:.2rem solid #fff}@media (max-width:991.98px){.article-intro-more .dropdown.show:before{content:"";width:100vw;height:100%;position:fixed;top:0;left:0;background-color:rgba(0,0,0,.5);z-index:999}}.article-intro-more .dropdown .dropdown-toggle:after{display:none}.article-intro-more .dropdown .dropdown-menu{background-color:#fff;padding:.5rem;margin:0;border-radius:.2rem;-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);z-index:100}@media (max-width:991.98px){.article-intro-more .dropdown .dropdown-menu{position:fixed!important;z-index:1001!important;top:calc(50% - 140px)!important;left:calc(50% - 140px)!important;-webkit-transform:none!important;transform:none!important}.article-intro-more .dropdown .dropdown-menu:before{display:none}}.article-intro-more .dropdown .dropdown-menu .dropdown-item{color:#0073e6}@media (max-width:991.98px){.lang-selector .dropdown.show:before{content:"";width:100vw;height:100%;position:fixed;top:0;left:0;background-color:rgba(0,0,0,.5);z-index:999}}.lang-selector .dropdown .dropdown-menu{background-color:#fff;padding:.5rem;margin:0;border-radius:.2rem;-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);z-index:100}@media (max-width:991.98px){.lang-selector .dropdown .dropdown-menu{position:fixed!important;z-index:1001!important;top:calc(50% - 80px)!important;left:calc(50% - 80px)!important;-webkit-transform:none!important;transform:none!important}.lang-selector .dropdown .dropdown-menu:before{display:none}}.lang-selector .dropdown .dropdown-menu .dropdown-item{color:#0073e6}.lang-selector .dropdown .dropdown-menu .dropdown-item.active,.lang-selector .dropdown .dropdown-menu .dropdown-item:active{font-weight:600;text-decoration:inherit;background-color:inherit}.h1--header{font-size:21.328px;font-size:1.333rem;font-weight:600;line-height:1.2;letter-spacing:unset}@media (min-width:576px){.h1--header{font-size:1.8rem}}.h1--header span{font-size:11.2px;font-size:.7rem;font-weight:400}.svg--header{width:39px;height:36px}@media (min-width:576px){.svg--header{width:65px;height:60px}}.h2--header{font-size:14px;font-weight:300;letter-spacing:unset}.docs__document-info{color:#fff;font-size:14.4px;font-size:.9rem;vertical-align:bottom}.docs__document-info .docs__document-info__icon{font-size:19.2px;font-size:1.2rem;vertical-align:bottom}.docs__document-info .docs__document-info__ownership .docs__document-info__label{font-size:12.8px;font-size:.8rem}.docs__document-info .docs__document-info__ownership .docs__document-info__icon{font-size:16px;font-size:1rem}.doc-header{-webkit-box-shadow:0 0 120px 0 rgba(0,0,0,.1);box-shadow:0 0 120px 0 rgba(0,0,0,.1);position:relative;z-index:10;color:#0073e6;font-size:16px;font-weight:600}.doc-header .progress-container{width:100%;height:4px;height:.25rem;background:#e6f3fe}.doc-header .progress-bar{height:4px;height:.25rem;background:#06c;width:0}.docs-italia #cerca{border:1px solid #ccc;font-size:12.8px;font-size:.8rem;font-weight:100}.docs-italia #cerca::-webkit-input-placeholder{color:#ccc}.docs-italia #cerca::-moz-placeholder{color:#ccc}.docs-italia #cerca::-ms-input-placeholder{color:#ccc}.docs-italia #cerca::placeholder{color:#ccc}.social{color:#fff}.social .social__label{font-size:15.2px;font-size:.95rem}.social .social__link{color:#fff;font-size:16px;font-size:1rem}.social .social__link:active,.social .social__link:hover{text-decoration:none}#rtd-search-form{border:1px solid #ccc}#rtd-search-form input[type=text]{border:none;height:100%}#rtd-search-form .input-group-append button{background-color:#fff}#rtd-search-form .input-group-append button .docs-icon-search{font-size:19.2px;font-size:1.2rem}#documentInfo .tag{font-family:Titillium Web,Geneva,Tahoma,sans-serif}.offcanvas-menu{position:fixed;z-index:1000;width:100vw;height:100vh;top:0;left:0;right:0;bottom:0}.offcanvas-menu.animate--left{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);-webkit-transition:-webkit-transform .4s;transition:-webkit-transform .4s;transition:transform .4s;transition:transform .4s,-webkit-transform .4s;-webkit-transition-timing-function:cubic-bezier(.7,0,.3,1);transition-timing-function:cubic-bezier(.7,0,.3,1)}.offcanvas-menu.js-active{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:-webkit-transform .8s;transition:-webkit-transform .8s;transition:transform .8s;transition:transform .8s,-webkit-transform .8s;-webkit-transition-timing-function:cubic-bezier(.7,0,.3,1);transition-timing-function:cubic-bezier(.7,0,.3,1)}.offcanvas-menu .offcanvas-menu__inner{width:80%;background-color:#fff;height:100vh;-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:all .5s ease-out;transition:all .5s ease-out}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__header{padding:1.5rem 1.8rem 1rem}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__header .offcanvas-menu__title{font-weight:600;font-size:19.2px;font-size:1.2rem}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav{padding:.5rem 0 0;margin:0}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item{list-style:none;margin:0;padding:.5rem 1rem}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item:first-child,.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item:nth-child(4){position:relative}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item:first-child:before,.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item:nth-child(4):before{content:"";width:64px;height:1px;left:32px;left:2rem;border-top:1px solid rgba(0,102,204,.2);position:absolute;top:0}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item .offcanvas-menu__nav__link{padding:.5rem 1rem;font-size:16px;font-size:1rem;display:block}.offcanvas-menu.deactive .offcanvas-menu__inner{margin-left:-80%;overflow:hidden}.offcanvas-menu .offcanvas-menu__extra{width:20%;height:100vh;position:fixed;right:0;top:0}body:before{position:fixed;top:0;left:0;z-index:999;bottom:0;right:0;background:rgba(0,0,0,.5);content:"";opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);-webkit-transition:opacity .4s,-webkit-transform 0s .4s;transition:opacity .4s,-webkit-transform 0s .4s;transition:opacity .4s,transform 0s .4s;transition:opacity .4s,transform 0s .4s,-webkit-transform 0s .4s;-webkit-transition-timing-function:cubic-bezier(.7,0,.3,1);transition-timing-function:cubic-bezier(.7,0,.3,1)}body.show-menu:before{opacity:1;-webkit-transition:opacity .8s;transition:opacity .8s;-webkit-transition-timing-function:cubic-bezier(.7,0,.3,1);transition-timing-function:cubic-bezier(.7,0,.3,1);-webkit-transform:translateZ(0);transform:translateZ(0)}#desktop-menu{-webkit-transform:translate(0);transform:translate(0);-webkit-transform:translateZ(0);transform:translateZ(0);will-change:position,transform;padding-bottom:5rem}#desktop-menu>button:first-of-type{margin-top:1.5rem}.col--nav{width:100%}@media (min-width:768px){.col--nav{width:420px;float:left;border-right:1px solid #eeeff0;padding-left:4.5rem}}.docs-menu{will-change:min-height;display:none}@media (min-width:768px){.docs-menu{display:block}}@media (max-width:767.98px){.docs-offcanvas-menu{-webkit-transform:translateX(100%);transform:translateX(100%);z-index:10;background-color:#fff;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;position:fixed;top:0;left:0;bottom:0;right:0;overflow-y:auto}.docs-offcanvas-menu.active{-webkit-transform:translateX(0);transform:translateX(0)}}@media (min-width:768px){.docs-offcanvas-menu{display:none}}.navbar-toggler--wrap{position:fixed;bottom:0;left:0;right:0;z-index:9;background-color:#fff;-webkit-box-shadow:-1px -2px 62px -13px rgba(0,0,0,.25);box-shadow:-1px -2px 62px -13px rgba(0,0,0,.25)}@media (min-width:768px){.navbar-toggler--wrap{display:none}}.navbar-toggler{color:#06c;padding:1rem 1rem 1rem 2rem}.navbar-toggler__chapter{color:#000;font-size:12.8px;font-size:.8rem}.sidebar-tabs{position:fixed;top:0;left:0;right:0;background-color:#fff;-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;z-index:11;-webkit-box-shadow:-1px -2px 62px -13px rgba(0,0,0,.25);box-shadow:-1px -2px 62px -13px rgba(0,0,0,.25)}.sidebar-tabs.active{-webkit-transform:translateX(0);transform:translateX(0)}@media (min-width:768px){.sidebar-tabs{display:none}}.sidebar-btn{text-transform:uppercase;color:#06c;font-weight:700;cursor:pointer;border:0;border-bottom:3px solid #0073e6;background:none}@media (min-width:768px){.sidebar-btn{border-bottom:2px solid #bbd8f1}}.sidebar-btn.sidebar-btn--mobile{display:inline-block;font-size:11.2px;font-size:.7rem;text-align:center;border:0}.sidebar-btn.sidebar-btn--mobile.active.show{border-bottom:3px solid #0073e6;text-decoration:none}@media (min-width:768px){.sidebar-btn.sidebar-btn--mobile.active.show{border-bottom:2px solid #bbd8f1}}.form-check [type=checkbox]:focus.focus--mouse+label.sidebar-btn,.sidebar-btn.focus--mouse,.toggles label input[type=checkbox]:focus.focus--mouse+.sidebar-btn.lever{border-color:#0073e6!important}@media (min-width:768px){.form-check [type=checkbox]:focus.focus--mouse+label.sidebar-btn,.sidebar-btn.focus--mouse,.toggles label input[type=checkbox]:focus.focus--mouse+.sidebar-btn.lever{border-color:#bbd8f1!important}}.sidebar-btn .it-collapse,.sidebar-btn .it-expand{font-size:9.6px;font-size:.6rem;line-height:2.5}.sidebar-btn .it-expand{display:inline-block}.sidebar-btn.collapsed .it-expand,.sidebar-btn .it-collapse{display:none}.sidebar-btn.collapsed .it-collapse{display:inline-block}@media (min-width:768px){.sidebar-btn{display:block;width:100%;text-align:left}}@media (max-width:767.98px){.sidebar-btn.collapsed .it-collapse,.sidebar-btn.collapsed .it-expand,.sidebar-btn .it-collapse,.sidebar-btn .it-expand{display:none}}.main-container{overflow:hidden;position:relative;background-color:#fff}.doc-content__consultation{position:absolute;right:0;left:0;top:0;background-color:#4bd4d6;text-align:left;text-transform:uppercase;font-weight:700;color:#000;padding:.5rem 0 .5rem 2rem}@media (min-width:992px){.doc-content__consultation{padding-left:4rem}}@media (min-width:1200px){.doc-content__consultation{-webkit-transform:rotate(45deg) translate(45px,-125px);transform:rotate(45deg) translate(45px,-125px);width:320px;-webkit-transform-origin:left;transform-origin:left;z-index:1;left:auto;text-align:center;padding-left:0}}.col-content{padding:4rem 2rem}@media (min-width:992px){.col-content{padding:4rem 4rem 5rem}}.caption-wrap{clear:both}.caption-wrap .caption--table{margin-top:1rem;margin-bottom:1rem;display:block;font-family:Lora,serif;font-style:italic;font-size:12px;font-size:.75rem;padding:0}@media (min-width:992px){.caption-wrap .caption--table{width:calc(100% - 200px);float:left}}.caption-wrap .reference--wrap{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;margin-top:1rem;margin-bottom:2rem;font-size:.9em}@media (min-width:768px){.caption-wrap .reference--wrap{width:200px;float:right;padding-left:2rem}}.caption-number{font-weight:700;color:#000}.chapter-header{margin-bottom:1rem;margin-left:.5rem}.chapter-nav{position:relative}@media (min-width:992px){.chapter-nav{width:200px;float:left}}.figure-fixed-wrap{display:block;width:100%;overflow-x:auto}.figure-fixed{max-width:none}.title__background{width:100%;background-color:#e6f3fe;position:absolute;top:-1px;height:auto;left:-8px;left:-.5rem;display:none;right:0;z-index:0}.title__background:after{content:"";position:absolute;left:100%;-webkit-transform:translateX(-50%);transform:translateX(-50%);top:0;bottom:0;width:0;height:0;border-left:20px solid transparent;border-right:20px solid transparent;border-top:20px solid #e6f3fe}.std-term{background-color:#bffffd;color:#000;padding:.2rem}.footer-buttons--next{clear:both;margin-top:4rem}.footer-buttons--next a{background-color:#0073e6;color:#fff;padding:.5rem 1rem;border-radius:.2rem;font-weight:700;display:inline-block}.footer-buttons--prev{margin-bottom:2.5rem}.reference-icon{vertical-align:middle;display:inline-block}#doc-content{width:100%;position:relative}@media (min-width:768px){#doc-content{width:calc(100% - 420px);float:left}}#doc-content a.reference[href]{text-decoration:underline}#doc-content .useful-docs .mimetype{display:none}#doc-content .useful-docs ul{list-style-type:none;padding-left:0}#doc-content .useful-docs li{border-top:1px solid #ccc;padding-top:1rem;padding-bottom:1rem;vertical-align:middle}#doc-content .useful-docs li:after{display:none}#doc-content .useful-docs [class*=" docs-icon-"],#doc-content .useful-docs [class^=docs-icon-]{font-size:30.4px;font-size:1.9rem;color:#0073e6}#doc-content ul.simple,#doc-content ul.simple ul{list-style-type:disc}#doc-content ul.simple li,#doc-content ul.simple ul li{position:relative;margin-bottom:.5rem;font-size:14.4px;font-size:.9rem}#doc-content ul.simple li ul li,#doc-content ul.simple ul li ul li{margin-top:.5rem}#doc-content .section{clear:both}#doc-content .section:after{content:"";display:table;clear:both}@media (min-width:992px){#doc-content .section>*{width:calc(100% - 200px);float:left;clear:left}}@media (min-width:992px){#doc-content .section .caption-wrap,#doc-content .section .chapter-header,#doc-content .section .figure,#doc-content .section .full-width,#doc-content .section .section,#doc-content .section .table-responsive,#doc-content .section>.toctree-wrapper.compound{width:100%}}#doc-content .section .figure{width:100%}#doc-content .section .figure[id],#doc-content .section .rubric.ref[id],#doc-content .section .section[id],#doc-content .section .table[id]{border-top:4.2rem solid transparent}#doc-content .section .glossary dt:not([id=""]){margin-top:-4em;padding-top:4em}#doc-content .section ol.loweralpha,#doc-content .section ol.loweralpha li{list-style:lower-alpha}#doc-content .section ol.upperalpha,#doc-content .section ol.upperalpha li{list-style:upper-alpha}#doc-content .section ol.upperroman,#doc-content .section ol.upperroman li{list-style:upper-roman}#doc-content .section ol,#doc-content .section ol.arabic{list-style:decimal}#doc-content .topic-title{color:#000;font-weight:700;font-size:22.4px;font-size:1.4rem;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .topic.procedure{margin-bottom:3rem}#doc-content .topic.procedure em{font-weight:700}#doc-content .topic.procedure ol{padding-left:1rem}#doc-content .topic.procedure ol li{position:relative;margin-bottom:1rem;padding-left:1rem;counter-increment:list;list-style-type:none;font-family:Lora,serif}#doc-content .topic.procedure ol li:after{position:absolute;left:-16px;left:-1rem;top:0;width:16px;width:1rem;height:24px;height:1.5rem;z-index:1;content:counter(list);color:#fff;text-align:center;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600}#doc-content .topic.procedure .topic-title{text-transform:uppercase;font-size:17.6px;font-size:1.1rem;font-weight:700;color:#002b4d;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;padding-bottom:.2rem;background:-webkit-gradient(linear,left top,left bottom,from(#004e95),to(#004e95)) no-repeat 100% 100%/calc(100% - 2rem) 2px;background:linear-gradient(#004e95,#004e95) no-repeat 100% 100%/calc(100% - 2rem) 2px;margin-bottom:1rem}#doc-content .topic.procedure .topic-title [class*=" docs-icon-"],#doc-content .topic.procedure .topic-title [class^=docs-icon-]{margin-right:.5rem}#doc-content .topic.procedure .procedure__img{padding-left:1.5rem;margin-bottom:2rem;margin-left:.5rem;margin-top:2rem;border-left:1px solid #799ebc}#doc-content .topic.procedure .procedure__img img{-webkit-box-shadow:0 0 61px 0 rgba(0,0,0,.15);box-shadow:0 0 61px 0 rgba(0,0,0,.15)}#doc-content .topic.procedure .procedure-internal-title{text-transform:uppercase;color:#000;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:12.8px;font-size:.8rem;font-weight:700}#doc-content .topic.procedure .docs-icon-step{color:#004e95;position:absolute;left:-24px;left:-1.5rem;font-size:32px;font-size:2rem}@media (min-width:992px){#doc-content .title-wrap{width:calc(100% - 200px);float:left;clear:left;position:relative}#doc-content .title-wrap h2{line-height:60px}#doc-content .title-wrap h3{line-height:46px}#doc-content .title-wrap h1,#doc-content .title-wrap h2,#doc-content .title-wrap h3{display:inline;cursor:pointer;position:relative;color:#000;box-shadow:.5rem 0 0 #fff,-.5rem 0 0 #fff;-webkit-box-shadow:.5rem 0 0 #fff,-.5rem 0 0 #fff;-webkit-box-decoration-break:clone;-ms-box-decoration-break:clone;-o-box-decoration-break:clone;box-decoration-break:clone;left:-.5rem;z-index:1}#doc-content .title-wrap h1 .title__chapter,#doc-content .title-wrap h2 .title__chapter,#doc-content .title-wrap h3 .title__chapter{position:relative;color:#0073e6}#doc-content .title-wrap h1{line-height:71px}#doc-content .title-wrap h1 .title__chapter{position:relative;background-color:#0073e6;color:#fff;margin-right:.5rem;padding-left:.5rem;padding-right:.5rem;display:inline-block;z-index:1}#doc-content .title-wrap h1 .title__chapter:after,#doc-content .title-wrap h1 .title__chapter:before{content:"";top:0;bottom:0;width:.5rem;background-color:#0073e6;position:absolute}#doc-content .title-wrap h1 .title__chapter:after{right:100%}#doc-content .title-wrap h1 .title__chapter:before{left:100%}}#doc-content .title-wrap.active h1,#doc-content .title-wrap.active h2,#doc-content .title-wrap.active h3{-webkit-box-shadow:.5rem 0 0 #e6f3fe,-.5rem 0 0 #e6f3fe;box-shadow:.5rem 0 0 #e6f3fe,-.5rem 0 0 #e6f3fe;background-color:#e6f3fe}#doc-content .title-wrap.active .title__background{display:block}#doc-content .headerlink{display:none}#doc-content .document-info{padding:0}#doc-content .document-info .docutils.field-list{width:100%;margin-bottom:2rem;border-bottom:1px solid #ccc;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;display:grid}#doc-content .document-info .docutils.field-list tr{display:block;margin-bottom:2rem}@media (min-width:576px){#doc-content .document-info .docutils.field-list tr{width:50%;float:left}}#doc-content .document-info .docutils.field-list .field-body,#doc-content .document-info .docutils.field-list .field-name{display:block;font-weight:400}#doc-content .document-info .docutils.field-list .field-body{color:#06c;text-decoration:underline}#doc-content dd>p{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .highlights{font-size:24px;font-size:1.5rem;font-family:Lora,serif}#doc-content blockquote.epigraph{margin-top:2rem;padding-left:2rem;border-left:4px solid #00c4c8;color:#596771;font-size:19.2px;font-size:1.2rem;margin-bottom:2rem}#doc-content blockquote.epigraph .attribution{margin-bottom:0;font-size:16px;font-size:1rem}#doc-content .question-and-answers blockquote{margin-top:.5rem;margin-bottom:0}#doc-content .question-and-answers blockquote>div{font-weight:700;font-family:Lora,serif}#doc-content .question-and-answers .pull-quote{max-width:490px;margin-bottom:2rem}#doc-content .question-and-answers .pull-quote ul{list-style-type:none;padding-left:1.5rem}#doc-content .question-and-answers .pull-quote ul li{display:inline-block;margin-top:1rem}#doc-content .question-and-answers .pull-quote ul li:after{display:none}#doc-content .question-and-answers .pull-quote ul li a{padding:.2rem .5rem;margin-right:.2rem;background-color:#bffffd;color:#000;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;border-bottom:2px dotted #ccc}#doc-content .question-and-answers .pull-quote>div>p{text-transform:uppercase;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;color:#0b0b0b;margin-bottom:0;font-weight:100}#doc-content .question-and-answers .pull-quote:nth-of-type(odd){float:left;clear:right}#doc-content .question-and-answers .pull-quote:nth-of-type(odd) blockquote>div,#doc-content .question-and-answers .pull-quote:nth-of-type(odd) ul{padding-left:1.5rem;border-left:5px solid #00c4c8}#doc-content .question-and-answers .pull-quote:nth-of-type(2n){float:right;text-align:right;clear:left}#doc-content .question-and-answers .pull-quote:nth-of-type(2n) blockquote>div,#doc-content .question-and-answers .pull-quote:nth-of-type(2n) ul{padding-right:1.5rem;border-right:5px solid #00c4c8}#doc-content .question-and-answers .glossary.docutils{display:none}#doc-content .highlighted{background:#bffffd;display:inline-block;font-weight:700}.highlight{padding:1rem;margin-bottom:1em}.highlight pre{margin:0;padding-bottom:1em}.highlighttable .highlight{padding:0}.code .highlight{background:none}code:not(.download) .pre{background-color:#efc;padding:.2rem}code.download{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:100%}#doc-content .admonition{margin-bottom:2rem;margin-top:2rem;padding-left:2rem;border-left:4px solid;color:#596771}#doc-content .admonition .more{padding:0}#doc-content .admonition .admonition-title{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;text-transform:uppercase;font-weight:700}#doc-content .admonition .admonition-title [class*=" docs-icon-"],#doc-content .admonition .admonition-title [class^=docs-icon-]{font-size:24px;font-size:1.5rem;margin-right:.5rem}#doc-content .admonition .admonition__hidden-paragraph{display:none}#doc-content .admonition .admonition__toggle-wrap{border-top:1px solid #ccc;padding-top:1rem;margin-top:1.5rem}#doc-content .admonition .admonition__toggle-btn{cursor:pointer;background:none;border:none;color:#0073e6;padding-left:0}#doc-content .admonition .admonition__toggle-btn [class*=" docs-icon-"],#doc-content .admonition .admonition__toggle-btn [class^=docs-icon-]{font-size:9.6px;font-size:.6rem;margin-left:.5rem;position:relative}#doc-content .admonition .admonition__toggle-btn [class*=" docs-icon-"]:after,#doc-content .admonition .admonition__toggle-btn [class^=docs-icon-]:after{content:"";width:16px;width:1rem;height:16px;height:1rem;border:2px solid #0073e6;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);position:absolute;border-radius:50%}#doc-content .admonition .admonition__toggle-btn .admonition__toggle-show-less:first-letter,#doc-content .admonition .admonition__toggle-btn .admonition__toggle-show-more:first-letter{text-transform:uppercase}#doc-content .admonition .admonition__toggle-btn .admonition__toggle-show-less{display:none}#doc-content .admonition .admonition__toggle-btn .admonition__toggle-show-more{display:inline-block}#doc-content .admonition .admonition__toggle-btn.active .admonition__toggle-show-more{display:none}#doc-content .admonition .admonition__toggle-btn.active .admonition__toggle-show-less{display:inline-block}#doc-content .admonition.display-page{background-color:#f9fafb;padding:2rem;position:relative;border:none}#doc-content .admonition.display-page:after,#doc-content .admonition.display-page:before{content:"";width:0;height:0;right:0;top:0;position:absolute;z-index:1}#doc-content .admonition.display-page:before{border-bottom:50px solid transparent;border-right:50px solid #fff}#doc-content .admonition.display-page:after{border-top:50px solid transparent;border-bottom:50px solid #ccc;border-right:50px solid transparent;-webkit-transform:translateY(-50%);transform:translateY(-50%)}#doc-content .admonition.display-page .admonition__hidden-paragraph p,#doc-content .admonition.display-page>p,#doc-content .admonition.display-page li{font-size:12.8px;font-size:.8rem;color:#002b4d}#doc-content .admonition.display-page ol{counter-reset:list}#doc-content .admonition.display-page ol li{margin-bottom:1rem;position:relative;list-style-type:none;counter-increment:list;color:#002b4d;font-family:Lora,serif;text-indent:16px;text-indent:1rem}#doc-content .admonition.display-page ol li:after{position:absolute;left:-16px;left:-1rem;top:0;width:17.6px;width:1.1rem;height:24px;height:1.5rem;z-index:1;content:counter(list) ".";text-align:center;font-weight:700}#doc-content .admonition.display-page ol li:before{position:absolute;left:-32px;left:-2rem;top:.65em;height:1px;z-index:1;content:"";font-weight:700;background-color:#002b4d;width:16px;width:1rem}#doc-content .admonition.display-page .admonition-title,#doc-content .admonition.display-page .code-block__header{color:#004e95;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .admonition.display-page .admonition-title{padding-bottom:.2rem;display:inline-block;background:-webkit-gradient(linear,left top,left bottom,from(#004e95),to(#004e95)) no-repeat 100% 100%/calc(100% - 2.2rem) 2px;background:linear-gradient(#004e95,#004e95) no-repeat 100% 100%/calc(100% - 2.2rem) 2px;margin-bottom:1rem;overflow:hidden}#doc-content .admonition.display-page .admonition-internal-title{text-transform:uppercase;font-size:12.8px;font-size:.8rem;font-weight:700;color:#002b4d;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .admonition.display-page .linenodiv pre{color:#8998a5;font-weight:400}#doc-content .admonition.display-page .highlighttable pre{font-size:12.8px;font-size:.8rem}#doc-content .admonition.admonition-consultation{padding-bottom:1rem;border-bottom:1px solid #ccc;position:relative}#doc-content .admonition.admonition-consultation a{text-decoration:underline}#doc-content .admonition.admonition-consultation .last{font-family:Lora,serif}#doc-content .admonition.admonition-consultation .admonition-title{color:#000;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .admonition.admonition-consultation .admonition-title [class*=" docs-icon-"],#doc-content .admonition.admonition-consultation .admonition-title [class^=docs-icon-]{font-size:19.2px;font-size:1.2rem}#doc-content .admonition.error{border-color:#d83750}#doc-content .admonition.error .admonition-title{color:#d83750}#doc-content .admonition.note{border-color:#004e95}#doc-content .admonition.note .admonition-title{color:#004e95}#doc-content .admonition.attention,#doc-content .admonition.warning{border-color:#df7d26}#doc-content .admonition.attention .admonition-title,#doc-content .admonition.warning .admonition-title{color:#df7d26}#doc-content .admonition.important{border-color:#008255}#doc-content .admonition.important .admonition-title{color:#008255}#doc-content .admonition.important .last{font-weight:700;font-size:19.2px;font-size:1.2rem}#doc-content .admonition.hint{border-color:#008255}#doc-content .admonition.hint .admonition-title{color:#008255}#doc-content .admonition.hint .reference.internal{font-size:12.8px;font-size:.8rem;position:relative}#doc-content .admonition.hint .reference.internal:after{content:"";width:6.4px;width:.4rem;height:6.4px;height:.4rem;border-top:1px solid #0073e6;border-right:1px solid #0073e6;left:100%;-webkit-transform:rotate(45deg) translateY(-50%);transform:rotate(45deg) translateY(-50%);position:absolute;top:50%}#doc-content .admonition.admonition-may,#doc-content .admonition.admonition-must,#doc-content .admonition.admonition-must-not,#doc-content .admonition.admonition-should,#doc-content .admonition.admonition-should-not,#doc-content .admonition.admonition-use,#doc-content .admonition.admonition-use-not{margin-top:2rem;border:2px solid;border-radius:1em;padding:2em;position:relative}#doc-content .admonition.admonition-may .admonition__header,#doc-content .admonition.admonition-must-not .admonition__header,#doc-content .admonition.admonition-must .admonition__header,#doc-content .admonition.admonition-should-not .admonition__header,#doc-content .admonition.admonition-should .admonition__header,#doc-content .admonition.admonition-use-not .admonition__header,#doc-content .admonition.admonition-use .admonition__header{display:inline-block;position:relative;padding:0 1em;background:#fff}#doc-content .admonition.admonition-may .admonition__header .admonition-title,#doc-content .admonition.admonition-must-not .admonition__header .admonition-title,#doc-content .admonition.admonition-must .admonition__header .admonition-title,#doc-content .admonition.admonition-should-not .admonition__header .admonition-title,#doc-content .admonition.admonition-should .admonition__header .admonition-title,#doc-content .admonition.admonition-use-not .admonition__header .admonition-title,#doc-content .admonition.admonition-use .admonition__header .admonition-title{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;margin:0}#doc-content .admonition.admonition-may:before,#doc-content .admonition.admonition-must-not:before,#doc-content .admonition.admonition-must:before,#doc-content .admonition.admonition-should-not:before,#doc-content .admonition.admonition-should:before,#doc-content .admonition.admonition-use-not:before,#doc-content .admonition.admonition-use:before{position:absolute;right:4em;top:-.65em;width:6em;padding:0 1em;display:inline-block;background-color:#fff}#doc-content .admonition.admonition-may,#doc-content .admonition.admonition-must,#doc-content .admonition.admonition-must-not,#doc-content .admonition.admonition-should,#doc-content .admonition.admonition-should-not{border-color:#004080}#doc-content .admonition.admonition-may .admonition__header,#doc-content .admonition.admonition-must-not .admonition__header,#doc-content .admonition.admonition-must .admonition__header,#doc-content .admonition.admonition-should-not .admonition__header,#doc-content .admonition.admonition-should .admonition__header{top:-2.8em}#doc-content .admonition.admonition-may .admonition__header .admonition-title,#doc-content .admonition.admonition-must-not .admonition__header .admonition-title,#doc-content .admonition.admonition-must .admonition__header .admonition-title,#doc-content .admonition.admonition-should-not .admonition__header .admonition-title,#doc-content .admonition.admonition-should .admonition__header .admonition-title{color:#004080}#doc-content .admonition.admonition-use{border-color:#00cf86}#doc-content .admonition.admonition-use .admonition__header .admonition-title{color:#00cf86}#doc-content .admonition.admonition-use .admonition__header .admonition-title:before{content:""}#doc-content .admonition.admonition-use-not{border-color:#d1344c}#doc-content .admonition.admonition-use-not .admonition__header .admonition-title{color:#d1344c}#doc-content .admonition.admonition-use-not .admonition__header .admonition-title:before{content:""}#doc-content .admonition.admonition-use-not .admonition__header,#doc-content .admonition.admonition-use .admonition__header{top:-3.2em}#doc-content .admonition.admonition-use-not .admonition__header .admonition-title:before,#doc-content .admonition.admonition-use .admonition__header .admonition-title:before{font-family:docs-icons;margin-right:.5rem;font-size:1.6em;vertical-align:middle}#doc-content .admonition.admonition-must:before{content:url(../images/must.svg)}#doc-content .admonition.admonition-should:before{content:url(../images/should.svg)}#doc-content .admonition.admonition-must-not:before{content:url(../images/must_not.svg)}#doc-content .admonition.admonition-should-not:before{content:url(../images/should_not.svg)}#doc-content .admonition.admonition-may:before{content:url(../images/may.svg)}.footer *{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}.footer a:hover{text-decoration:none}.footer .in-collaboration{font-size:.8em}.footer .team-logo--icon{width:54px}.footer .team-logo--text{font-size:16px;font-size:1rem;line-height:18px;max-width:160px;text-transform:uppercase}.footer .agid-logo--icon{width:8em}@media (min-width:768px){.footer .agid-logo--icon{width:10em}}.footer .agid-logo--separator{border-left-width:2px!important;height:30px}@media (min-width:768px){.footer .agid-logo--separator{height:40px}}.footer .agid-logo--text{width:112px;width:7rem;line-height:1.2;font-size:1em;display:inline-block;vertical-align:middle}@media (min-width:768px){.footer .agid-logo--text{font-size:1.1em;width:8rem}}.footer .small-prints{color:#00fff8;font-weight:600}.footer .social{font-size:1em;color:#fff}.footer .social .icon{color:#00264d;background-color:#fff;padding:.3em;border-radius:100%;font-size:22px}.footer .colophon{border-top:1px solid hsla(0,0%,100%,.1);margin-top:1.5em}@media (min-width:992px){.footer .colophon{margin-top:2em}}.footer-menu__link:hover{color:#fff}.t_translate-wrap{display:none}.doc-tooltip{background-color:#fff;font-family:Lora,serif;-webkit-box-shadow:0 0 100px 0 rgba(0,0,0,.15);box-shadow:0 0 100px 0 rgba(0,0,0,.15)}.doc-tooltip.bs-popover-auto[x-placement^=bottom]:before,.doc-tooltip.bs-popover-auto[x-placement^=top]:before,.doc-tooltip.bs-popover-bottom:before,.doc-tooltip.bs-popover-top:before{content:"";width:0;height:0;border-top:40px solid transparent;border-bottom:40px solid transparent;border-left:40px solid #fff;position:absolute;left:0;z-index:-1}.doc-tooltip.bs-popover-auto[x-placement^=top]:before,.doc-tooltip.bs-popover-top:before{bottom:-40px}.doc-tooltip.bs-popover-auto[x-placement^=bottom]:before,.doc-tooltip.bs-popover-bottom:before{top:-40px}.doc-tooltip.bs-popover-auto[x-placement^=bottom]:after,.doc-tooltip.bs-popover-auto[x-placement^=top]:after,.doc-tooltip.bs-popover-bottom:after,.doc-tooltip.bs-popover-top:after{content:"";width:15px;height:15px;-webkit-transform:rotate(45deg);transform:rotate(45deg);position:absolute;left:5px;z-index:-2}.doc-tooltip.bs-popover-auto[x-placement^=top]:after,.doc-tooltip.bs-popover-top:after{-webkit-box-shadow:5px 5px 70px 8px rgba(0,0,0,.15);box-shadow:5px 5px 70px 8px rgba(0,0,0,.15);bottom:-20px}.doc-tooltip.bs-popover-auto[x-placement^=bottom]:after,.doc-tooltip.bs-popover-bottom:after{-webkit-box-shadow:-5px -5px 70px 8px rgba(0,0,0,.15);box-shadow:-5px -5px 70px 8px rgba(0,0,0,.15);top:-20px}.doc-tooltip.doc-tooltip--note:after,.doc-tooltip.doc-tooltip--note:before{content:none}.tooltip__wrap{overflow:hidden;width:330px;padding:2rem;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}.tooltip__title{overflow:hidden;font-style:italic;margin-bottom:.5rem;font-size:1em;letter-spacing:0}.tooltip__content{font-size:14.4px;font-size:.9rem;font-style:italic;margin-bottom:0}.tooltip__close-btn{position:absolute;top:16px;top:1rem;right:16px;right:1rem;width:20px;height:20px;padding:0;background:none;border:0;cursor:pointer}.tooltip__close-btn:after,.tooltip__close-btn:before{content:"";position:absolute;height:20px;width:1px;background-color:#0073e6;top:0;left:50%}.tooltip__close-btn:after{-webkit-transform:rotate(45deg) translateX(-50%);transform:rotate(45deg) translateX(-50%)}.tooltip__close-btn:before{-webkit-transform:rotate(-45deg) translateX(-50%);transform:rotate(-45deg) translateX(-50%)}.tooltip__link{color:#0073e6;font-size:12.8px;font-size:.8rem;font-weight:100;text-transform:uppercase;letter-spacing:0;position:relative;display:inline-block;margin-top:1rem}.tooltip__link:after{content:"";position:absolute;left:100%;top:0;width:30px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAGCAYAAAAVMmT4AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gUPDDQNy1r5IQAAAH5JREFUGNNj+I8HTD704v+ZR1/gfCYGPODNlz8MLv3XGc4+/srAwMDAwHjx6df//jNuYVX84esfhg9f/jAI8LAw3G4yYGD8+vPv/ztvfmBVPP3wK4YZ+14wdIfJM5Q4SzIw/v///z8uZzRsf8rAw8bEUOIsCRHA58EXn36h8AF2435mx6vmAAAAAABJRU5ErkJggg==");background-repeat:no-repeat;bottom:0;background-position:50%}@media (max-width:991.98px){.chapter-nav__list--hidden:not(.show){display:none}}@media (min-width:992px){.chapter-nav__list--hidden{visibility:hidden;opacity:0;-webkit-transition:visibility .35s,opacity .35s;transition:visibility .35s,opacity .35s}.chapter-nav__list--hidden.active{visibility:visible;opacity:1}}@media (max-width:991.98px){.chapter-nav__list-wrap{max-width:300px;margin-left:auto;margin-right:auto;border-radius:4px}}@media (min-width:992px){.chapter-nav__wrap{position:absolute;left:2rem;top:1rem}}.chapter-link{background:none;border:none;color:#0073e6;padding:0;display:inline-block;font-size:.9em;font-weight:400;cursor:pointer;vertical-align:middle}.chapter-link:hover{text-decoration:underline}.chapter-link__title{float:left}.chapter-link__counter{margin-right:.3rem;display:inline-block;float:left}.chapter-nav__list{list-style-type:none;margin-bottom:0;padding:1rem}@media (min-width:992px){.chapter-nav__list{padding:0}}.chapter-nav__title{padding:1rem;color:#000;font-size:12.8px;font-size:.8rem;font-weight:700;border-bottom:1px solid #ccc}.chapter-nav__title .title__chapter{color:#8998a5}@media (min-width:992px){.chapter-nav__title{display:none}}.chapter-nav__item:not(:last-child){margin-bottom:1rem}@media (min-width:992px){.chapter-nav__item:not(:last-child){margin-bottom:0}}.chapter-nav__list--visible{margin-top:1rem}@media (min-width:992px){.chapter-nav__list--visible{margin-top:-.5rem}}.chapter-nav__list--visible .chapter-nav__item{display:inline-block}@media (min-width:992px){.chapter-nav__list--visible .chapter-nav__item{display:block}}#doc-content ::-webkit-scrollbar{width:1em;height:14px}#doc-content ::-webkit-scrollbar-track{background-color:#e6f3fe;border-radius:7px;border:2px solid #fff}#doc-content ::-webkit-scrollbar-thumb{background-color:#0073e6;border-radius:7px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAHCAYAAAABIM1CAAAALUlEQVQoU2N88+m/hggf4w0GLODJp//CLEwMUhI8jJexyT/7/l+OcdSAQRAGABbrTN6F2sNMAAAAAElFTkSuQmCC");background-repeat:no-repeat;background-position:50%}#doc-content table:not(.footnote){border:0}#doc-content table:not(.footnote) td{border-right:0;border-left:0}#doc-content table:not(.footnote):not(.highlighttable) td{min-width:220px}#doc-content table:not(.footnote) thead .head{border-right:0;border-left:0;text-transform:uppercase;color:#000;font-size:12px;font-size:.75rem;vertical-align:top}#doc-content table:not(.footnote) tr{font-size:12px;font-size:.75rem}#doc-content .footnote-reference{color:#193e5e;border:1px solid #193e5e;border-radius:3px;padding:0 .4rem;line-height:1.4}#doc-content .note-action{margin-top:.5rem}#doc-content .note-back-btn,#doc-content .note-close-btn{background:none;border:0;display:inline-block;color:#0073e6;font-size:1.2em;cursor:pointer}#doc-content .note-back-btn{position:relative}#doc-content .note-back-btn:before{content:"";top:0;bottom:0;width:1px;position:absolute;background-color:#0073e6;left:0}#doc-content .note-back-btn:hover{text-decoration:underline}#doc-content .docutils.footnote{color:#000;font-size:12.8px;font-size:.8rem;display:none;margin-bottom:2rem}#doc-content .docutils.footnote td{width:100%;float:left}#doc-content .docutils.footnote .fn-backref{color:#193e5e;border:1px solid #193e5e;border-radius:3px;padding:.2rem;line-height:1;display:inline-block;margin-bottom:.5rem}.block-comments{margin-top:4.4rem;padding-bottom:2rem}.block-comments__body p{font-family:Titillium Web,Geneva,Tahoma,sans-serif}.block-comments__header{border-bottom-color:#ccc!important;border-top-color:#eeeff0!important}.block-comments__header h6{color:#06c}.block-comments__img{width:56px}.block-comments__reply-anchor{margin-top:-5em;padding-top:5em}.block-comments__logout-link{display:none;padding-top:.25em}.block-comments__logout-link--icon{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#d83750;text-shadow:0 0 20px #000}.block-comments__logout-link--icon:hover{color:#fff}.block-comments__logout-link:hover{text-decoration:none}.block-comments__logout-link--visible{display:block;position:relative}.block-comments__input{margin-bottom:1em!important}.block-comments__toggle-btn{background:none;width:32px;width:2rem;height:32px;height:2rem}.block-comments__toggle-btn .docs-icon-minus,.block-comments__toggle-btn .docs-icon-plus{color:#06c;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.block-comments__toggle-btn .docs-icon-plus{display:none}.block-comments__toggle-btn.collapsed .docs-icon-plus{display:block}.block-comments__toggle-btn.collapsed .docs-icon-minus{display:none}.block-comments__item-btn{background:none;width:32px;width:2rem;height:24px;height:1.5rem;border:0}.block-comments__item-btn .it-collapse,.block-comments__item-btn .it-expand{color:#06c}.block-comments__item-btn.collapsed .it-collapse,.block-comments__item-btn .it-expand{display:none}.block-comments__item-btn.collapsed .it-expand{display:inline-block}.block-comments__item{padding-top:1em}.block-comments__item.hidden{opacity:.5}.block-comments__item.is-new{background-color:#e6f3fe;-webkit-animation:background-fade-highlight 2s ease-out 1 forwards;animation:background-fade-highlight 2s ease-out 1 forwards}.block-comments__content{word-wrap:break-word}.block-comments__name{color:#06c;font-weight:400;font-size:16px;font-size:1rem;letter-spacing:0}.block-comments__date,.block-comments__role{font-size:14px;line-height:21px}.block-comments__role{letter-spacing:.88px}.block-comments__paragraph{font-size:14px;line-height:21px}.block-comments__paragraph a{text-decoration:underline}.box-comment{position:relative;width:100%}.box-comment:not(.sending) .loading{display:none}.box-comment.sending .loading{margin-left:1em;display:inline-block!important;position:relative;overflow:visible;width:40px;z-index:1}.box-comment.sending .loading:before{border:5px solid #0073e6!important;top:60%}.box-comment textarea{min-height:5em;font-weight:400;border:1px solid #eeeff0;border-radius:5px}.box-comment textarea:focus{border:1px solid #596771}.box-comment textarea::-webkit-input-placeholder{color:#ccc}.box-comment textarea::-moz-placeholder{color:#ccc}.box-comment textarea::-ms-input-placeholder{color:#ccc}.box-comment textarea::placeholder{color:#ccc}.box-comment__login{display:-webkit-box;display:-ms-flexbox;display:flex;border:1px solid #edf5fc;border-radius:5px;padding:1em}.box-comment__legend{font-size:12px}.box-comment__user-image{border-radius:50%;position:relative;height:56px;width:56px;float:left}.box-comment__user-image--anon{margin:.25em .75em .25em .25em;background-color:#e8f2fc}.box-comment__user-image i{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.box-comment__buttons{float:left}.box-comment__required{float:right}.box-comment__required>span{font-size:.8em}.box-comment__submit{position:relative;overflow:hidden}.box-comment__submit .loading.no-bg{display:none;width:30px;height:0;content:" ";overflow:visible;margin-bottom:5px;margin-left:-15px;margin-right:5px}.box-comment__submit .loading.no-bg:before{left:auto}.box-comment__submit>div:not(.loading){display:inline}.box-comment__suggestions__tooltip .tooltip__content{font-style:normal;padding-left:1.75em;font-size:.95em}.missing_permission{width:100%}.missing_permission__text{border:1px solid #edf5fc;border-radius:5px;padding:1em}@-webkit-keyframes background-fade-highlight{to{background-color:transparent}}@keyframes background-fade-highlight{to{background-color:transparent}}@media (max-width:767.98px){.sidebar-nav{padding-top:5.5rem}}.sidebar-nav a{text-decoration:none;color:#596771;font-size:14.4px;font-size:.9rem;display:block;line-height:1.6;margin-bottom:1rem;margin-top:1rem}.sidebar-nav a.current_item{position:relative;z-index:1;margin-bottom:1rem;margin-top:1rem;-webkit-transition:margin-bottom .3s,margin-top .3s;transition:margin-bottom .3s,margin-top .3s}.sidebar-nav a.current_item:before{content:"";position:absolute;top:-8px;top:-.5rem;bottom:-8px;bottom:-.5rem;left:-8px;left:-.5rem;right:-8px;right:-.5rem;background-color:#bffffd;z-index:-1}.sidebar-nav a:focus,.sidebar-nav a:hover{text-decoration:underline}.sidebar-nav>.sidebar-list--wrapper{padding:1rem}@media (min-width:768px){.sidebar-nav>.sidebar-list--wrapper{padding:0}}.sidebar-nav>.sidebar-list--wrapper>ul>li{padding:.1rem 3rem .1rem 1rem}.sidebar-nav>.sidebar-list--wrapper>ul>li>a{font-weight:700}.sidebar-nav>.sidebar-list--wrapper ul{list-style-type:none;padding-left:0;margin-bottom:0}.sidebar-nav>.sidebar-list--wrapper ul.current>li.current{background-color:#f6fbff}.sidebar-nav>.sidebar-list--wrapper ul.current>li.current a{color:#004e95}.sidebar-nav>.sidebar-list--wrapper ul ul{padding-left:1rem}.sidebar-nav>.sidebar-list--wrapper.figures-index--menu,.sidebar-nav>.sidebar-list--wrapper.glossary-mobile--menu,.sidebar-nav>.sidebar-list--wrapper.table-index--menu{padding-top:1rem}.sidebar-nav>.sidebar-list--wrapper.figures-index--menu>ul>li,.sidebar-nav>.sidebar-list--wrapper.glossary-mobile--menu>ul>li,.sidebar-nav>.sidebar-list--wrapper.table-index--menu>ul>li{padding-bottom:0;padding-top:.5rem}#glossary-page>.chapter-header{display:none}#glossary-page .chapter-header{padding-top:2rem;padding-bottom:2rem;padding-left:.5rem;overflow:hidden}#glossary-page .chapter-header h2{font-size:128px;font-size:8rem;font-family:Lora,serif;line-height:1}#glossary-page .glossary-page__btn{border:0;background:none;cursor:pointer;color:#0073e6;display:block;width:100%;text-align:left;text-transform:uppercase;-webkit-transition:color .3s;transition:color .3s}#glossary-page .glossary-page__btn .docs-icon-minus,#glossary-page .glossary-page__btn .docs-icon-plus{color:#0073e6}#glossary-page .glossary-page__btn .docs-icon-minus{display:inline-block}#glossary-page .glossary-page__btn .docs-icon-plus{display:none}#glossary-page .glossary-page__btn.collapsed{color:#596771}#glossary-page .glossary-page__btn.collapsed .docs-icon-minus{display:none}#glossary-page .glossary-page__btn.collapsed .docs-icon-plus{display:inline-block}#glossary-page .term-content{padding-left:2.3rem}#glossary-page .term-content,#glossary-page .term-content p{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#glossary-page .term-content:last-of-type.show,#glossary-page dt:last-of-type .glossary-page__btn.collapsed{border-bottom:2px solid #eaebed}.glossary-page__copy-link-wrap{color:#0073e6}.glossary-page__copy-link{background:none;border:none;color:#0073e6;cursor:pointer}@media (max-width:767.98px){.return-to-top{bottom:4rem}}.return-to-top i:before{margin:0}@media (max-width:767.98px){.modal.modal-sm-full .modal-dialog{margin:0;max-width:none}.modal.modal-sm-full .modal-dialog .modal-content{margin:0;width:100vw;height:100vh;border-radius:0!important;border:none}}@font-face{font-family:italia-icon-font;src:url(../font/italia-icon-font.eot?94539880);src:url(../font/italia-icon-font.eot?94539880#iefix) format("embedded-opentype"),url(../font/italia-icon-font.woff2?94539880) format("woff2"),url(../font/italia-icon-font.woff?94539880) format("woff"),url(../font/italia-icon-font.ttf?94539880) format("truetype"),url(../font/italia-icon-font.svg?94539880#italia-icon-font) format("svg");font-weight:400;font-style:normal}[class*=" it-"]:before,[class^=it-]:before{font-family:italia-icon-font;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;font-smoothing:antialiased}.it-app:before{content:"\e800"}.it-app-1:before{content:"\e801"}.it-arrow-down:before{content:"\e802"}.it-arrow-left:before{content:"\e803"}.it-arrow-right:before{content:"\e804"}.it-arrow-up:before{content:"\e805"}.it-behance:before{content:"\e806"}.it-calendar:before{content:"\e807"}.it-camera:before{content:"\e808"}.it-cancel:before{content:"\e809"}.it-check:before{content:"\e80a"}.it-chevron-left:before{content:"\e80d"}.it-chevron-right:before{content:"\e80e"}.it-close:before{content:"\e80f"}.it-collapse:before{content:"\e810"}.it-comment:before{content:"\e811"}.it-copy:before{content:"\e812"}.it-download:before{content:"\e813"}.it-drop-down:before{content:"\e814"}.it-drop-up:before{content:"\e815"}.it-help:before{content:"\e816"}.it-expand-media:before{content:"\e817"}.it-expand:before{content:"\e818"}.it-external-link:before{content:"\e819"}.it-facebook:before{content:"\e81a"}.it-favorite:before{content:"\e81b"}.it-file:before{content:"\e81c"}.it-flickr:before{content:"\e81d"}.it-github:before{content:"\e81e"}.it-googleplus:before{content:"\e81f"}.it-no:before{content:"\e820"}.it-instagram:before{content:"\e821"}.it-link:before{content:"\e822"}.it-linkedin:before{content:"\e823"}.it-list:before{content:"\e824"}.it-lock:before{content:"\e825"}.it-mail:before{content:"\e826"}.it-medium:before{content:"\e827"}.it-more-actions:before{content:"\e828"}.it-more-items:before{content:"\e829"}.it-pdf:before{content:"\e82a"}.it-pin:before{content:"\e82b"}.it-print:before{content:"\e82c"}.it-refresh:before{content:"\e82f"}.it-rss:before{content:"\e830"}.it-search:before{content:"\e831"}.it-settings:before{content:"\e832"}.it-share:before{content:"\e833"}.it-slideshare:before{content:"\e834"}.it-twitter:before{content:"\e835"}.it-unlock:before{content:"\e836"}.it-upload:before{content:"\e837"}.it-video:before{content:"\e838"}.it-warning:before{content:"\e839"}.it-whatsapp:before{content:"\e83a"}.it-youtube-text:before{content:"\e83b"}.it-youtube:before{content:"\e83c"}.it-zoom-in:before{content:"\e83d"}.it-zoom-out:before{content:"\e83e"}.it-error:before{content:"\e83f"}.it-info:before{content:"\e840"}.it-paper-plane:before{content:"\e841"} \ No newline at end of file diff --git a/refs/pull/212/merge/en/_static/data/glossary.json b/refs/pull/212/merge/en/_static/data/glossary.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/refs/pull/212/merge/en/_static/data/glossary.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/refs/pull/212/merge/en/_static/doctools.js b/refs/pull/212/merge/en/_static/doctools.js new file mode 100644 index 000000000..c3db08d1c --- /dev/null +++ b/refs/pull/212/merge/en/_static/doctools.js @@ -0,0 +1,264 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + parent.insertBefore( + span, + parent.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.highlightSearchWords(); + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords: () => { + const highlight = + new URLSearchParams(window.location.search).get("highlight") || ""; + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '
" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + const url = new URL(window.location); + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + const blacklistedElements = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", + ]); + document.addEventListener("keydown", (event) => { + if (blacklistedElements.has(document.activeElement.tagName)) return; // bail for input elements + if (event.altKey || event.ctrlKey || event.metaKey) return; // bail with special keys + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + case "Escape": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.hideSearchWords(); + event.preventDefault(); + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/refs/pull/212/merge/en/_static/documentation_options.js b/refs/pull/212/merge/en/_static/documentation_options.js new file mode 100644 index 000000000..860ac2179 --- /dev/null +++ b/refs/pull/212/merge/en/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: 'version: latest', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: false, +}; \ No newline at end of file diff --git a/refs/pull/212/merge/en/_static/file.png b/refs/pull/212/merge/en/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/en/_static/font/docs-italia.eot b/refs/pull/212/merge/en/_static/font/docs-italia.eot new file mode 100644 index 0000000000000000000000000000000000000000..169c6163b35c962c959ee57b2c2257fd4ae9f981 GIT binary patch literal 11192 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 k!RrF@`>@1b^2_9IJhy + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/en/_static/font/docs-italia.ttf b/refs/pull/212/merge/en/_static/font/docs-italia.ttf new file mode 100644 index 0000000000000000000000000000000000000000..96a7767f4dd660a0d79cc2678274189f10fb7ad4 GIT binary patch literal 11012 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 literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/en/_static/font/docs-italia.woff b/refs/pull/212/merge/en/_static/font/docs-italia.woff new file mode 100644 index 0000000000000000000000000000000000000000..cda2cacb9b6c8afb3c845bff87d03a2b034e3dea GIT binary patch literal 11092 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 B(DMKQ literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/en/_static/font/italia-icon-font.eot b/refs/pull/212/merge/en/_static/font/italia-icon-font.eot new file mode 100644 index 0000000000000000000000000000000000000000..5242e53839d7d1643699f0b6fc9a012d4f4d5f56 GIT binary patch literal 23672 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 + + +Copyright (C) 2018 by original authors @ fontello.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/en/_static/font/italia-icon-font.ttf b/refs/pull/212/merge/en/_static/font/italia-icon-font.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f290bd6e060305044fed76427a695f7cf364aa71 GIT binary patch literal 23472 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 QzV+UM@c%$i^b_(w0enpTDF6Tf literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/en/_static/font/italia-icon-font.woff b/refs/pull/212/merge/en/_static/font/italia-icon-font.woff new file mode 100644 index 0000000000000000000000000000000000000000..101f487bc8f60c2e787058058785bbec8f2a43cf GIT binary patch literal 13888 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 Y*7{$1T|uO;#mK-h0I+Vv4*(^b literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/en/_static/font/italia-icon-font.woff2 b/refs/pull/212/merge/en/_static/font/italia-icon-font.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4598d5a9919533a1c6aba2b07bddaec3786da1df GIT binary patch literal 11952 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 CrWaHI literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/en/_static/images/agid-logo.svg b/refs/pull/212/merge/en/_static/images/agid-logo.svg new file mode 100644 index 000000000..a81f5eb84 --- /dev/null +++ b/refs/pull/212/merge/en/_static/images/agid-logo.svg @@ -0,0 +1,25 @@ + + + +Logo dell&Agenzia per l&Italia Digitale +Emblema della Repubblica Italiana con accanto l&acronimo AGID + + + + + + + + + + + + + + + + + diff --git a/refs/pull/212/merge/en/_static/images/may.svg b/refs/pull/212/merge/en/_static/images/may.svg new file mode 100644 index 000000000..53670ba97 --- /dev/null +++ b/refs/pull/212/merge/en/_static/images/may.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/refs/pull/212/merge/en/_static/images/must.svg b/refs/pull/212/merge/en/_static/images/must.svg new file mode 100644 index 000000000..177c3c51e --- /dev/null +++ b/refs/pull/212/merge/en/_static/images/must.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/refs/pull/212/merge/en/_static/images/must_not.svg b/refs/pull/212/merge/en/_static/images/must_not.svg new file mode 100644 index 000000000..8c0c0d852 --- /dev/null +++ b/refs/pull/212/merge/en/_static/images/must_not.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/refs/pull/212/merge/en/_static/images/should.svg b/refs/pull/212/merge/en/_static/images/should.svg new file mode 100644 index 000000000..c1f35d655 --- /dev/null +++ b/refs/pull/212/merge/en/_static/images/should.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/refs/pull/212/merge/en/_static/images/should_not.svg b/refs/pull/212/merge/en/_static/images/should_not.svg new file mode 100644 index 000000000..88e64a64c --- /dev/null +++ b/refs/pull/212/merge/en/_static/images/should_not.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/refs/pull/212/merge/en/_static/images/team-digitale-logo.svg b/refs/pull/212/merge/en/_static/images/team-digitale-logo.svg new file mode 100644 index 000000000..fa557011d --- /dev/null +++ b/refs/pull/212/merge/en/_static/images/team-digitale-logo.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/refs/pull/212/merge/en/_static/jquery-3.6.0.js b/refs/pull/212/merge/en/_static/jquery-3.6.0.js new file mode 100644 index 000000000..fc6c299b7 --- /dev/null +++ b/refs/pull/212/merge/en/_static/jquery-3.6.0.js @@ -0,0 +1,10881 @@ +/*! + * jQuery JavaScript Library v3.6.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2021-03-02T17:08Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.6.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.6 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2021-02-16 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the primary Deferred + primary = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + primary.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( primary.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return primary.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); + } + + return primary.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + + // Support: Chrome 86+ + // In Chrome, if an element having a focusout handler is blurred by + // clicking outside of it, it invokes the handler synchronously. If + // that handler calls `.remove()` on the element, the data is cleared, + // leaving `result` undefined. We need to guard against this. + return result && result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + which: true +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + // Suppress native focus or blur as it's already being fired + // in leverageNative. + _default: function() { + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. + tr.style.height = "1px"; + trChild.style.height = "9px"; + + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is display: block + // gets around this issue. + trChild.style.display = "block"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ).filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ).map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + +originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

Cryptographic algorithms

+

The following algorithms MUST be supported:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Algorithm

Operations

References

RS256

Signature

RFC 7518.

RS512

Signature

RFC 7518.

RSA-OAEP

Key Encryption

RFC 7518.

RSA-OAEP-256

Key Encryption

RFC 7516.

A128CBC-HS256

Content Encryption

RFC 7516.

A256CBC-HS512

Content Encryption

RFC 7516.

+

The following algorithms are RECOMMENDED to be supported:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Algorithm

Operations

References

ES256

Signature

RFC 7518.

ES512

Signature

RFC 7518.

PS256

Signature

RFC 7518.

PS512

Signature

RFC 7518.

ECDH-ES

Key Encryption

RFC 7518.

ECDH-ES+A128KW

Key Encryption

RFC 7518.

ECDH-ES+A256KW

Key Encryption

RFC 7518.

+

The following algorithms MUST NOT be supported:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Algorithm

Operations

References

none

Signature

RFC 7518.

RSA_1_5

Key Encryption

RFC 7516.

HS256

Signature

RFC 7518.

HS384

Signature

RFC 7518.

HS512

Signature

RFC 7518.

+
+

Warning

+

The length of the RSA keys MUST be equal to or greater than 2048 bits. +A length of 4096 bits is RECOMMENDED.

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/en/backup-restore.html b/refs/pull/212/merge/en/backup-restore.html new file mode 100644 index 000000000..645579b91 --- /dev/null +++ b/refs/pull/212/merge/en/backup-restore.html @@ -0,0 +1,1453 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | backup-restore.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

backup-restore.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/en/contribute.html b/refs/pull/212/merge/en/contribute.html new file mode 100644 index 000000000..8a606d920 --- /dev/null +++ b/refs/pull/212/merge/en/contribute.html @@ -0,0 +1,1455 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | How to contribute + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

How to contribute

+

The IT Wallet project, including this document, follows an open development process. This approach ensures the development process is accessible to all, inviting all interested parties to participate.

+

Consequently, stakeholders, national and international community members are not only encouraged but also heartily welcomed to contribute to the refinement of these technical rules.

+

Below are several methods available for contributing to this project:

+
    +
  • GitHub issues. By opening an issue, you can seek clarification, propose enhancements, or report editorial typos. If you are working on an issue, we encourage you to open a draft pull request and link it.

  • +
  • Pull requests. Pull requests represent active contributions to the project, typically, but not always following issue-based discussions. Once a pull request is initiated, it facilitates discussion and review of the proposed changes before they are merged into the main branch (versione-corrente).

  • +
  • Developers Italia Slack channel. Slack is a messaging application designed for businesses, connecting people to the information they need. Developers Italia is an open community based on contributions and participation from public administrations, developers, technicians, students, and citizens. Developers Italia has initiated a Slack channel that [everyone can join for free](https://slack.developers.italia.it/), where you can learn about all their activities and partake in discussions.

  • +
+
+

Acknowledgements

+

We would like to thank the following individuals for their comments, +concerns, ideas, contributions, some of which substantial, to this +implementation profile and to the initial set of implementations.

+
    +
  • Alen Horvat

  • +
  • Amir Sharif

  • +
  • Andrea Prosseda

  • +
  • Emanuele De Cupis

  • +
  • Emiliano Vernini

  • +
  • Francesco Grauso

  • +
  • Francesco Marino

  • +
  • Francesco Ventola

  • +
  • Giada Sciarretta

  • +
  • Giuseppe De Marco

  • +
  • Klaas Wierenga

  • +
  • Kristina Yasuda

  • +
  • Leif Johansson

  • +
  • Lorenzo Cerini

  • +
  • Marta Sciunnach

  • +
  • Michele Silletti

  • +
  • Nicola Saitto

  • +
  • Niels van Dijk

  • +
  • Paul Bastien

  • +
  • Pasquale De Rose

  • +
  • Peter Altmann

  • +
  • Riccardo Iaconelli

  • +
  • Roland Hedberg

  • +
  • Salvatore Laiso

  • +
  • Salvatore Manfredi

  • +
  • Stefano Alifuoco

  • +
  • Takahiko Kawasaki

  • +
  • Torsten Lodderstedt

  • +
  • Vladimir Duzhinov

  • +
+

If anyone has been forgotten, please accept our apologies with the +request to propose the modification of this page via a [Pull Request](https://github.com/italia/eudi-wallet-it-docs) +with a brief description of the contribution offered, during which +event or channel, and during which period. We will then have the opportunity +to apologize again and make amends as soon as possible, including you in the list.

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/en/defined-terms.html b/refs/pull/212/merge/en/defined-terms.html new file mode 100644 index 000000000..86f493c89 --- /dev/null +++ b/refs/pull/212/merge/en/defined-terms.html @@ -0,0 +1,1512 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Normative Language and Conventions + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

Normative Language and Conventions

+

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

+
+
+

Defined Terms

+

The terms User, Trust Service, Trust Model, Trusted List, Trust Framework, Attribute, Electronic Attestations of Attributes Provider or Trust Service Provider (TSP), Person Identification Data (PID), Revocation List, Qualified Electronic Attestations of Attributes Provider or Qualified Trust Service Provider (QTSP), Electronic Attestation of Attributes (EAA), are defined in the EIDAS-ARF.

+

Below are the description of acronyms and definitions which are useful for further insights into topics that complement the it-wallet and the interacting components.

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Accreditation Body

An entity accredited by the Federation Authority, responsible for managing the process of verification and certification of accreditation requirements for ecosystem roles.

Digital Identity Provider

An entity, recognized and accredited by the State, responsible for identifying citizens for the issuance of an Electronic Identity Certificate.

Electronic Attestation of Identity

Electronic attestation of attributes referring to master data already present in Italian digital identity systems.

Digital Credential

An signed Credential whose integrity can be cryptographically verified using the public keys of its Issuer. It is also known as Credential.

Federation Authority

A public governance entity that issues guidelines and technical rules, and administers - directly or through its intermediary - Trusted Lists, services, and accreditation processes, the status of participants, and their eligibility evaluation. It also performs oversight functions.

Wallet Instance

An instance of the Wallet Solution, installed on a personal mobile device and controlled by a specific User who is its sole owner. It is the application that enables citizens to fully and autonomously manage their digital identity and EAAs.

Wallet Provider

All public and/or private entities, conforming to a technical profile and accredited by the Federation Authority, that provide citizens with an IT Wallet Instance.

Wallet Attestation

Verifiable Attestation, issued by the Wallet Provider, that proves the security compliace of the Wallet Instance.

Wallet Attestation Service

Device manufacturer service that allows you to certify the authenticity of the mobile app (Wallet Instance).

Qualified Electronic Attestation of Attributes (QEAA)

A digitally verifiable attestation in electronic form, issued by a QTSP, that substantiates a person's possession of attributes.

Qualified Electronic Signature Provider

The Electronic Trust Service Provider responsible for the issuing of Qualified Electronic Signature certificates to the User.

Relying Party

A natural or legal person that implements an authentication system requiring electronic attribute attestation submissions as an authentication mechanism.

Verifier

See Relying Party.

Trust Attestation

Electronic attestation of an entity's compliance with the national regulatory framework, which is cryptographically verifiable and cannot be repudiated over time by the entity that issued it. A Trust Attestation is always related to a particular Trust Framework.

Trust Layer

An architectural component that enables IT Wallet system participants to establish trust, in terms of reliability and compliance of all participants with the regulatory framework governing the digital identity system.

Trust Model

System defining how the participants of the ecosystem establish and maintain trust in their interactions. The Trust Model outlines the rules and the procedures for the entities (like users, systems, or applications) should validate each other's identities, authenticate, and establish the level of trust before exchanging information.

Level of Assurance

The degree of confidence in the vetting process used to establish the identity of the User and the degree of confidence that the User who presents the credential is the same User to whom the Digital Credential was issued.

Holder Key Binding

Ability of the Holder to prove legitimate possession of the private part, related to the public part attested by a Trusted Third Party.

+
+

Acronyms

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + +

Acronym

Description

OID4VP

OpenID for Verifiable Presentation

PID

Person Identification Data

VC

Verifiable Credential

VP

Verifiable Presentation

API

Application Programming Interface

LoA

Level of Assurance

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/en/genindex.html b/refs/pull/212/merge/en/genindex.html new file mode 100644 index 000000000..bb6f16514 --- /dev/null +++ b/refs/pull/212/merge/en/genindex.html @@ -0,0 +1,1472 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Index + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/en/index.html b/refs/pull/212/merge/en/index.html new file mode 100644 index 000000000..239b8d853 --- /dev/null +++ b/refs/pull/212/merge/en/index.html @@ -0,0 +1,1610 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | The Italian EUDI Wallet implementation profile + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + +
+

The Italian EUDI Wallet implementation profile

+
+

Introduction

+

The European Council requested the update of the +eIDAS Regulation on electronic identification and trust services by +implementing a new tool: the European Digital Identity Wallet.

+

Italy responded to the input received from the European community by creating the National digital identity Wallet solution, called IT Wallet, to be fully interoperable with all the other solutions made available by other European Member States and in full compliance to the European regulation.

+

The current Italian scenario counts 3 coexisting digital identity tools that are partially overlapping, sometimes competing, and based on different technologies. This points to a highly fragmented system which yields difficulties for users and service providers. Therefore, the IT Wallet proposes to rationalise the digital identity ecosystem in Italy in order to simplify the experience of citizens, public administrations, and businesses in accessing digital services.

+

To achieve these objectives and enhance the already active and eIDAS-notified digital identity schemes, the IT Wallet project entails a technological and governance evolution that envisages the progressive migration of the current threefold digital identification solution towards IT Wallet.

+

The purpose of the following technical rules is to define the technical architecture and reference framework to be used as a guideline by all the parties involved in the development of the IT Wallet project.

+

This documentation defines the national implementation profile of EUDI Wallet, containing the technical details about components of the Wallet ecosystem, as listed below:

+
+
    +
  • Entities of the ecosystem according to EIDAS-ARF.

  • +
  • Infrastructure of trust attesting realiability and eligibility of the participants.

  • +
  • PID and EAAs data schemes and attribute sets.

  • +
  • PID/EAA in MDL CBOR format.

  • +
  • PID/EAA in SD-JWT format.

  • +
  • Wallet Solution general architecture.

  • +
  • Wallet Attestation.

  • +
  • Issuance of PID/EAA according to OpenID4VCI.

  • +
  • Presentation of PID/EAA according to OpenID4VP.

  • +
  • Presentation of pseudonyms according to SIOPv2.

  • +
  • PID/EAA backup and restore mechanisms.

  • +
  • PID/EAA revocation lists.

  • +
+
+
+
+

Index of content

+
+ +
+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/en/objects.inv b/refs/pull/212/merge/en/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..119378aca062005f4c67ab59e30f825c9cc3cb86 GIT binary patch literal 1325 zcmV+|1=9K>AX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkZXk{Qt zbYX01VQwHrRYXZ3S7B^yWpp5EZE$R5ZDnqBVRUJ4ZXj@SZ)Rz1WeOu8R%LQ?X>V>i zAa-SPb7^mGIv{LebY*jN3L_v?Xk{RBWo=<;Ze(S0Aa78b#rNMXCQiPX<{x4c-o~`OLN;c5WeeIU`9D42c(m0ZyMWeG?R2x$8C=s zm|TiTK!O24IqI+P;z1JN!)DxrN9I1h{jk^t7EGL_;-;!K(WdydkU60r2pgpDD^m+{ zqpq!yXT{oz=aF{z$ntMpOBHA%6~qv!#=}fxN}JtWGx#W?*v@|y>rc<;w=7jzC*K*<{@r~#EGG*Ngee@Im`!!JNSvF6;dGZ5Ak z^v14pbVu z=&aoq=2O^@*7B2MbyD&NuWhD(L!amAeUCHtzw?=*z5Vmu-Qn<>oI1`Hd2Q2PMSD9S zmclP{_P1ad7f^VLXJ~j+z>hR~FZI2CwEyl#vv4Xz77rDWqhW%xhTQ#idnErjPK4L3 zfV$sd(kfYE=v^&~g`n+~_6m>sSr(mu5WY`H!3?u@=o4|7Ydu7if?HHsND#Yea+i>j z#4n}NqGV{9*_fG+IXmQ5cJLYbegro!e(s(pF2G52TkLGHbdoUD#~3A*P%H>LT_I&dvDTrw9Ah z$3Rg0wP$_789oJSQc6Yq)k&B!XyQ37h74D1WY-7vpfrF|1f_H1ffAO5=9J^ajm@4< zTY9SN3q_RJYFHP*&kZ>ieoUPq&Fgg$Z$Fi~dR+}-aIRshNSbO8hRYxFs=;Ej{aqpe z=0opv*S1m_C^CF+O)72jKHCqr)Y+~+*9?0UKx<@Slj|QXn~Rvn?)cZ)u|&TfC>tLJ zSf;*mGuKyJs?~Fe-WENCZ_W5QQ5n;cUQMu%(?KzxqAdPo(UO~;a9Y#Uk`_kY`cXNk$g)4CV2!9ym3qbQFzrZdz j714J+%F@s?Q6)r&X=G}&Mll_3rrC?g4aoliuU);m(G`4s literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/en/pid-eaa-data-model.html b/refs/pull/212/merge/en/pid-eaa-data-model.html new file mode 100644 index 000000000..40dd0f85e --- /dev/null +++ b/refs/pull/212/merge/en/pid-eaa-data-model.html @@ -0,0 +1,2664 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | PID/(Q)EAA Data Model + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

PID/(Q)EAA Data Model

+

The Person Identification Data (PID) is issued by the PID Provider according to national laws. The main scope of the PID is allowing natural persons to be authenticated for the access to a service or to a protected resource. +The User attributes provided within the Italian PID are the ones listed below:

+
+
    +
  • Current Family Name

  • +
  • Current First Name

  • +
  • Date of Birth

  • +
  • Unique Identifier

  • +
  • Taxpayer identification number

  • +
+
+

The Italian digital Credentials, like the PID and the (Q)EAA, contains additional claims and according to the OpenID Identity Assurance Profile [OIDC.IDA], these carries the national trust framework and the identity proofing procedures underlying the issuance. In particular, these carries some relevant information about the Authentic Sources of the subject's attributes.

+

The (Q)EAAs are issued by (Q)EAA Issuers to a Wallet Instance and MUST be provided in SD-JWT-VC or MDOC-CBOR data format.

+

The PID/(Q)EAA data format and the mechanism through which a digital credential is issued to the Wallet Instance and presented to a Relying Party are described in the following sections.

+
+

SD-JWT

+

The PID/(Q)EAA is issued in the form of a digital credential. The digital credential format is Selective Disclosure JWT format as specified in [draft-terbu-sd-jwt-vc-latest].

+

An SD-JWT is a JWT that MUST be signed using the Issuer's private key. The SD-JWT payload of the MUST contain the _sd_alg claim described in [SD-JWT]. Section 5.1.2. and other claims specified in this section, some of them may be selectively disclosable claims.

+

The claim _sd_alg indicates the hash algorithm used by the Issuer to generate the digests over the salts and the claim values. The _sd_alg claim MUST be set to one of the specified algorithms in Section Cryptographic Algorithms.

+

Selectively disclosable claims are omitted from the SD-JWT. Instead, the digests of the respective disclosures and decoy digests are contained as an array in a new JWT claim, _sd.

+

Each digest value ensures the integrity of, and maps to, the respective Disclosure. Digest values are calculated using a hash function over the disclosures, each of which contains

+
+
    +
  • a random salt,

  • +
  • the claim name (only when the claim is an object property),

  • +
  • the claim value.

  • +
+
+

The Disclosures are sent to the Holder together with the SD-JWT in the Combined Format for Issuance that MUST be an ordered series of base64url-encoded values, each separated from the next by a single tilde ('~') character as follows:

+
<Issuer-Signed-JWT>~<Disclosure 1>~<Disclosure 2>~...~<Disclosure N>
+
+
+

See [draft-terbu-sd-jwt-vc-latest] and [SD-JWT] for more details.

+
+

PID/(Q)EAA SD-JWT parameters

+

The JOSE header contains the following mandatory parameters:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

typ

MUST be set to vc+sd-jwt as defined in [draft-terbu-sd-jwt-vc-latest].

[RFC7515, Section 4.1.9].

alg

Signature Algorithm.

[RFC7515, Section 4.1.1].

kid

Unique identifier of the public key.

[RFC7515, Section 4.1.8].

trust_chain

JSON array containing the trust chain that proves the reliability of the issuer of the JWT.

[OIDC-FED, Section 3.2.1].

+

The following claims MUST be in the JWT payload. Some of these claims can be disclosed, these are listed in the following tables that specify whether a claim is selectively disclosable [SD] or not [NSD].

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

iss

[NSD].URL string representing the PID/(Q)EAA Issuer unique identifier.

[RFC7519, Section 4.1.1].

sub

[NSD].Thumbprint of the JWK in the cnf parameter.

[RFC7519, Section 4.1.2].

jti

[NSD].Unique Token ID identifier of this JWT. It SHOULD be a String in uuid4 format.

[RFC7519, Section 4.1.7].

iat

[SD].UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in RFC 7519.

[RFC7519, Section 4.1.6].

exp

[NSD].UNIX Timestamp with the expiry time of the JWT, coded as NumericDate as indicated in RFC 7519.

[RFC7519, Section 4.1.4].

status

[NSD].HTTPS URL where the credential validity status is available.

[SD-JWT-VC. Section 4.2.2.2].

cnf

[NSD].JSON object containing the proof-of-possession key materials. By including a cnf (confirmation) claim in a JWT, the issuer of the JWT declares that the Holder is in control of the private key related to the public one defined in the cnf parameter. The recipient MUST cryptographically verify that the Holder is in control of that key.

[RFC7800, Section 3.1].

vct

[NSD].Credential type as a string, MUST be set in accordance to the type obtained from the PID/(Q)EAA Issuer metadata. For example, in the case of the PID, it MUST be set to PersonIdentificationData.

[draft-terbu-sd-jwt-vc-latest. Section Type Claim].

verified_claims

[NSD].JSON object containing the following sub-elements:

+
+
    +
  • verification;

  • +
  • claims.

  • +
+
+

[OIDC.IDA. Section 5].

+
+
+

PID/(Q)EAA Verification field

+

The verification claim contains the information regarding the trust framework used by the PID/(Q)EAA Issuer to provide the User attributes (claims).

+

The verification claim is a JSON structure with all the following mandatory sub-claims.

+ +++++ + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

trust_framework

[NSD]. It MUST be set to eidas.

[OID.IDA. Section 5.1]

assurance_level

[NSD]. MUST be set according to the LoA required. For PID credential it MUST be set to high.

[OID.IDA. Section 5.1]

evidence

[SD]. JSON Array. Each element is the electronic evidence of the User identification during the PID issuance or, in the case of (Q)EAA, with this evidence the Authentic Source assures the authenticity of the data conveyed in the (Q)EAA. It MUST contain at least the following claims:

+
+
    +
  • type: MUST be set to electronic_record

  • +
  • record: JSON object (see the table below)

  • +
+
+

[OID.IDA. Section 5.1]

+

The record MUST have at least the following sub parameters:

+ +++++ + + + + + + + + + + + + + + + + +

Claim

Description

Reference

type

It uniquely identifies the trust framework used for the provisioning of the credential. For example, in case of PID, the value https://eudi.wallet.cie.gov.it means that the CIE id identification scheme is used.

[OID.IDA. Section 5.1.1.2]

source

JSON Object cointaining the following mandatory claims:

+
    +
  • organization_name: Name of the Organization acting as Authentic Source.

  • +
  • organization_id: Identification code for the Organization. For public Organization, it MUST be set to the IPA Code, following the URN namespace urn:eudi:it:organization_id:ipa_code:<that-value>.

  • +
  • country_code: String representing country in [ISO3166-1] Alpha-2 (e.g., IT) or [ISO3166-3] syntax.

  • +
+

[OID.IDA. Section 5.1.1.2]

+
+

Warning

+

Note that the sub-claims of the evidence parameter are not selectively disclosable separately, thus, for example, the User cannot give only the record type without the disclosure of the record source value (organization name, identifier and country).

+
+
+
+

PID Claims field

+

The claims parameter contains the User attributes with the following mandatory fields:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

given_name

[SD]. Current First Name.

[OpenID Connect Core 1.0, Section 5.1]

family_name

[SD]. Current Family Name.

[OpenID Connect Core 1.0, Section 5.1]

birth_date

[SD]. Date of Birth.

unique_id

[SD]. Unique citizen identifier (ID ANPR) given by the National Register of the Resident Population (ANPR). It MUST be set according to ANPR rules

tax_id_code

[SD]. National tax identification code of natural person as a String format. It MUST be set according to ETSI EN 319 412-1. For example TINIT-<ItalianTaxIdentificationNumber>

+
+
+

PID Non-normative Examples

+

In the following, the non-normative example of a PID in JSON format.

+
{
+  "iss": "https://issuer.example.org",
+  "sub": "NzbLsXh8uDCcd7noWXFZAfHkxZsRGC9Xs",
+  "jti": "urn:uuid:6c5c0a49-b589-431d-bae7-219122a9ec2c",
+  "iat": 1683000000,
+  "exp": 1883000000,
+  "status": "https://pidprovider.example.org/status",
+  "vct": "PidIdentificationData",
+  "verified_claims": {
+    "verification": {
+      "trust_framework": "eidas",
+      "assurance_level": "high",
+      "evidence": [
+        {
+          "type": "electronic_record",
+          "record": {
+            "type": "https://eudi.wallet.cie.gov.it",
+            "source": {
+              "organization_name": "Ministero dell'Interno",
+              "organization_id":
+                "urn:eudi:it:organization_id:ipa_code:m_it",
+              "country_code": "IT"
+            }
+          }
+        }
+      ]
+    },
+    "claims": {
+      "unique_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
+      "given_name": "Mario",
+      "family_name": "Rossi",
+      "birth_date": "1980-01-10",
+      "tax_id_code": "TINIT-XXXXXXXXXXXXXXXX"
+    }
+  }
+}
+
+
+

The corresponding SD-JWT verson for PID is given by

+
{
+   "typ":"vc+sd-jwt",
+   "alg":"RS512",
+   "kid":"dB67gL7ck3TFiIAf7N6_7SHvqk0MDYMEQcoGGlkUAAw",
+   "trust_chain" : [
+    "NEhRdERpYnlHY3M5WldWTWZ2aUhm ...",
+    "eyJhbGciOiJSUzI1NiIsImtpZCI6 ...",
+    "IkJYdmZybG5oQU11SFIwN2FqVW1B ..."
+   ]
+}
+
+
+
{
+  "_sd": [
+    "7WG4nT6K26_R3975zcwnVwgoHA7b988_3-vJzbZf6Yc"
+  ],
+  "iss": "https://issuer.example.org",
+  "exp": 1883000000,
+  "sub": "NzbLsXh8uDCcd7noWXFZAfHkxZsRGC9Xs",
+  "jti": "urn:uuid:6c5c0a49-b589-431d-bae7-219122a9ec2c",
+  "status": "https://pidprovider.example.org/status",
+  "vct": "PidIdentificationData",
+  "verified_claims": {
+    "verification": {
+      "_sd": [
+        "gd8gRxKT1hg8ptnvR5fPGhae0VXllDblsiJT9adxiS8"
+      ],
+      "trust_framework": "eidas",
+      "assurance_level": "high"
+    },
+    "claims": {
+      "_sd": [
+        "4g9lBt38U1EeTA1zlvvGfFgPPcoe3zmbQ_zSRDgHQaE",
+        "EYgzJ1hTYWJjhBK2V3b8HV3e_fEf-Udffc5ymY77WtQ",
+        "IcYHQydT_C3U1IqaJlFicxLlaHTHvElyFZ6Jxia27qQ",
+        "KxIG8rWXmtR884xTV7eXuHICfPYPw6gFvfr07v-d5oc",
+        "lXgxEDAuPeUvmkcNGr9FZuqodwFqUT01gJj7xd4yEPA"
+      ]
+    }
+  },
+  "_sd_alg": "sha-256",
+  "cnf": {
+    "jwk": {
+      "kty": "EC",
+      "crv": "P-256",
+      "x": "TCAER19Zvu3OHF4j4W4vfSVoHIP1ILilDls7vCeGemc",
+      "y": "ZxjiWWbZMQGHVWKVQ4hbSIirsVfuecCE6t4jT9F2HZQ"
+    }
+  }
+}
+
+
+

In the following the disclosure list is given

+

Claim iat:

+
    +
  • SHA-256 Hash: 7WG4nT6K26_R3975zcwnVwgoHA7b988_3-vJzbZf6Yc

  • +
  • Disclosure: +WyI1N212eWNUaDV5WkNyS0xaNXhuZlV3IiwgImlhdCIsIDE2ODMwMDAwMDBd

  • +
  • Contents: ["57mvycTh5yZCrKLZ5xnfUw", "iat", 1683000000]

  • +
+

Claim source:

+
    +
  • SHA-256 Hash: ZMHbFH9SeT9CZQaOMVrXDMGWIouzXRKspKp9fDhvJ3I

  • +
  • Disclosure: +WyJrdWNyQm1sb19oTWFJRkY1ODVSemFRIiwgInNvdXJjZSIsIHsib3JnYW5p +emF0aW9uX25hbWUiOiAiTWluaXN0ZXJvIGRlbGwnSW50ZXJubyIsICJvcmdh +bml6YXRpb25faWQiOiAidXJuOmV1ZGk6aXQ6b3JnYW5pemF0aW9uX2lkOmlw +YV9jb2RlOm1faXQiLCAiY291bnRyeV9jb2RlIjogIklUIn1d

  • +
  • Contents: +["kucrBmlo_hMaIFF585RzaQ", "source", {"organization_name": +"Ministero dell'Interno", "organization_id": +"urn:eudi:it:organization_id:ipa_code:m_it", "country_code": +"IT"}]

  • +
+

Claim evidence:

+
    +
  • SHA-256 Hash: gd8gRxKT1hg8ptnvR5fPGhae0VXllDblsiJT9adxiS8

  • +
  • Disclosure: +WyJOVE5Sb09pdVZWUnRGNkNFenRkOVp3IiwgImV2aWRlbmNlIiwgW3sidHlw +ZSI6ICJlbGVjdHJvbmljX3JlY29yZCIsICJyZWNvcmQiOiB7Il9zZCI6IFsi +Wk1IYkZIOVNlVDlDWlFhT01WclhETUdXSW91elhSS3NwS3A5ZkRodkozSSJd +LCAidHlwZSI6ICJodHRwczovL2V1ZGkud2FsbGV0LmNpZS5nb3YuaXQifX1d +XQ

  • +
  • Contents: ["NTNRoOiuVVRtF6CEztd9Zw", "evidence", [{"type": +"electronic_record", "record": {"_sd": +["ZMHbFH9SeT9CZQaOMVrXDMGWIouzXRKspKp9fDhvJ3I"], "type": +"https://eudi.wallet.cie.gov.it"}}]]

  • +
+

Claim unique_id:

+
    +
  • SHA-256 Hash: 4g9lBt38U1EeTA1zlvvGfFgPPcoe3zmbQ_zSRDgHQaE

  • +
  • Disclosure: +WyJGRFNTUGdnekdCVXdRTEhEU0U2d1FRIiwgInVuaXF1ZV9pZCIsICJ4eHh4 +eHh4eC14eHh4LXh4eHgteHh4eC14eHh4eHh4eHh4eHgiXQ

  • +
  • Contents: ["FDSSPggzGBUwQLHDSE6wQQ", "unique_id", +"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]

  • +
+

Claim given_name:

+
    +
  • SHA-256 Hash: lXgxEDAuPeUvmkcNGr9FZuqodwFqUT01gJj7xd4yEPA

  • +
  • Disclosure: +WyJLWjhlNXdWRXREdmIxemlTUEE0RHpBIiwgImdpdmVuX25hbWUiLCAiTWFy +aW8iXQ

  • +
  • Contents: ["KZ8e5wVEtDvb1ziSPA4DzA", "given_name", "Mario"]

  • +
+

Claim family_name:

+
    +
  • SHA-256 Hash: IcYHQydT_C3U1IqaJlFicxLlaHTHvElyFZ6Jxia27qQ

  • +
  • Disclosure: +WyJwWjVNUnlPeHBWV1p1SExvSi15alJnIiwgImZhbWlseV9uYW1lIiwgIlJv +c3NpIl0

  • +
  • Contents: ["pZ5MRyOxpVWZuHLoJ-yjRg", "family_name", "Rossi"]

  • +
+

Claim birth_date:

+
    +
  • SHA-256 Hash: EYgzJ1hTYWJjhBK2V3b8HV3e_fEf-Udffc5ymY77WtQ

  • +
  • Disclosure: +WyJqdFZ1S0NwbjdiVGNIckFnX3NlVWJRIiwgImJpcnRoX2RhdGUiLCAiMTk4 +MC0wMS0xMCJd

  • +
  • Contents: ["jtVuKCpn7bTcHrAg_seUbQ", "birth_date", "1980-01-10"]

  • +
+

Claim tax_id_code:

+
    +
  • SHA-256 Hash: KxIG8rWXmtR884xTV7eXuHICfPYPw6gFvfr07v-d5oc

  • +
  • Disclosure: +WyI0a3NBejZiTVVLeTZadk4xaDhIRHVRIiwgInRheF9pZF9jb2RlIiwgIlRJ +TklULVhYWFhYWFhYWFhYWFhYWFgiXQ

  • +
  • Contents: ["4ksAz6bMUKy6ZvN1h8HDuQ", "tax_id_code", +"TINIT-XXXXXXXXXXXXXXXX"]

  • +
+

The combined format for the PID issuance is given by

+
eyJhbGciOiAiRVMyNTYiLCAidHlwIjogImV4YW1wbGUrc2Qtand0In0.eyJfc2QiOiBb
+IjdXRzRuVDZLMjZfUjM5NzV6Y3duVndnb0hBN2I5ODhfMy12SnpiWmY2WWMiXSwgImlz
+cyI6ICJodHRwczovL3BpZHByb3ZpZGVyLmV4YW1wbGUub3JnIiwgImV4cCI6IDE4ODMw
+MDAwMDAsICJzdWIiOiAiTnpiTHNYaDh1RENjZDdub1dYRlpBZkhreFpzUkdDOVhzIiwg
+Imp0aSI6ICJ1cm46dXVpZDo2YzVjMGE0OS1iNTg5LTQzMWQtYmFlNy0yMTkxMjJhOWVj
+MmMiLCAic3RhdHVzIjogImh0dHBzOi8vcGlkcHJvdmlkZXIuZXhhbXBsZS5vcmcvc3Rh
+dHVzIiwgInZjdCI6ICJQaWRJZGVudGlmaWNhdGlvbkRhdGEiLCAidmVyaWZpZWRfY2xh
+aW1zIjogeyJ2ZXJpZmljYXRpb24iOiB7Il9zZCI6IFsiZ2Q4Z1J4S1QxaGc4cHRudlI1
+ZlBHaGFlMFZYbGxEYmxzaUpUOWFkeGlTOCJdLCAidHJ1c3RfZnJhbWV3b3JrIjogImVp
+ZGFzIiwgImFzc3VyYW5jZV9sZXZlbCI6ICJoaWdoIn0sICJjbGFpbXMiOiB7Il9zZCI6
+IFsiNGc5bEJ0MzhVMUVlVEExemx2dkdmRmdQUGNvZTN6bWJRX3pTUkRnSFFhRSIsICJF
+WWd6SjFoVFlXSmpoQksyVjNiOEhWM2VfZkVmLVVkZmZjNXltWTc3V3RRIiwgIkljWUhR
+eWRUX0MzVTFJcWFKbEZpY3hMbGFIVEh2RWx5Rlo2SnhpYTI3cVEiLCAiS3hJRzhyV1ht
+dFI4ODR4VFY3ZVh1SElDZlBZUHc2Z0Z2ZnIwN3YtZDVvYyIsICJsWGd4RURBdVBlVXZt
+a2NOR3I5Rlp1cW9kd0ZxVVQwMWdKajd4ZDR5RVBBIl19fSwgIl9zZF9hbGciOiAic2hh
+LTI1NiIsICJjbmYiOiB7Imp3ayI6IHsia3R5IjogIkVDIiwgImNydiI6ICJQLTI1NiIs
+ICJ4IjogIlRDQUVSMTladnUzT0hGNGo0VzR2ZlNWb0hJUDFJTGlsRGxzN3ZDZUdlbWMi
+LCAieSI6ICJaeGppV1diWk1RR0hWV0tWUTRoYlNJaXJzVmZ1ZWNDRTZ0NGpUOUYySFpR
+In19fQ.1xdAqLpgMM0bBDQrYv0thRwtgRikZq75JJVhGyfWAsu8SopmhumzsTA4ohJKC
+le1MV3UB6DYMFkEnoal8R1Yrw~WyI1N212eWNUaDV5WkNyS0xaNXhuZlV3IiwgImlhdC
+IsIDE2ODMwMDAwMDBd~WyJrdWNyQm1sb19oTWFJRkY1ODVSemFRIiwgInNvdXJjZSIsI
+Hsib3JnYW5pemF0aW9uX25hbWUiOiAiTWluaXN0ZXJvIGRlbGwnSW50ZXJubyIsICJvc
+mdhbml6YXRpb25faWQiOiAidXJuOmV1ZGk6aXQ6b3JnYW5pemF0aW9uX2lkOmlwYV9jb
+2RlOm1faXQiLCAiY291bnRyeV9jb2RlIjogIklUIn1d~WyJOVE5Sb09pdVZWUnRGNkNF
+enRkOVp3IiwgImV2aWRlbmNlIiwgW3sidHlwZSI6ICJlbGVjdHJvbmljX3JlY29yZCIs
+ICJyZWNvcmQiOiB7Il9zZCI6IFsiWk1IYkZIOVNlVDlDWlFhT01WclhETUdXSW91elhS
+S3NwS3A5ZkRodkozSSJdLCAidHlwZSI6ICJodHRwczovL2V1ZGkud2FsbGV0LmNpZS5n
+b3YuaXQifX1dXQ~WyJGRFNTUGdnekdCVXdRTEhEU0U2d1FRIiwgInVuaXF1ZV9pZCIsI
+CJ4eHh4eHh4eC14eHh4LXh4eHgteHh4eC14eHh4eHh4eHh4eHgiXQ~WyJLWjhlNXdWRX
+REdmIxemlTUEE0RHpBIiwgImdpdmVuX25hbWUiLCAiTWFyaW8iXQ~WyJwWjVNUnlPeHB
+WV1p1SExvSi15alJnIiwgImZhbWlseV9uYW1lIiwgIlJvc3NpIl0~WyJqdFZ1S0Nwbjd
+iVGNIckFnX3NlVWJRIiwgImJpcnRoX2RhdGUiLCAiMTk4MC0wMS0xMCJd~WyJXRGtkNk
+pzTmhERnZMUDRzMWhRZHlBIiwgInRheF9pZF9jb2RlIiwgIlRJTklULVhYWFhYWFhYWF
+hYWFhYWFgiXQ~
+
+
+
+
+

(Q)EAA Non-normative examples

+

In the following, we provide a non-normative example of (Q)EAA in JSON.

+
{
+  "iss": "https://issuer.example.org",
+  "sub": "NzbLsXh8uDCcd7noWXFZAfHkxZsRGC9Xs",
+  "jti": "urn:uuid:6c5c0a49-b589-431d-bae7-219122a9ec2c",
+  "iat": 1683000000,
+  "exp": 1883000000,
+  "status": "https://issuer.example.org/status",
+  "vct": "DisabilityCard",
+  "verified_claims": {
+    "verification": {
+      "trust_framework": "eidas",
+      "assurance_level": "high",
+      "evidence": [
+        {
+          "type": "electronic_record",
+          "record": {
+            "type": "https://eudi.wallet.pdnd.gov.it",
+            "source": {
+              "organization_name": "Istituto Nazionale della Previdenza Sociale",
+              "organization_id":
+                "urn:eudi:it:organization_id:ipa_code:inps",
+              "country_code": "IT"
+            }
+          }
+        }
+      ]
+    },
+    "claims": {
+      "document_number": "XXXXXXXXXX",
+      "given_name": "Mario",
+      "family_name": "Rossi",
+      "birth_date": "1980-01-10",
+      "expiry_date": "2024-01-01",
+      "tax_id_code": "TINIT-XXXXXXXXXXXXXXXX",
+      "constant_attendance_allowance": true
+    }
+  }
+}
+
+
+

The corresponding SD-JWT for the previous data is represented as follow, as decoded JSON for both header and payload.

+
{
+   "typ":"vc+sd-jwt",
+   "alg":"RS512",
+   "kid":"d126a6a856f7724560484fa9dc59d195",
+   "trust_chain" : [
+    "NEhRdERpYnlHY3M5WldWTWZ2aUhm ...",
+    "eyJhbGciOiJSUzI1NiIsImtpZCI6 ...",
+    "IkJYdmZybG5oQU11SFIwN2FqVW1B ..."
+   ]
+}
+
+
+
{
+  "_sd": [
+    "7WG4nT6K26_R3975zcwnVwgoHA7b988_3-vJzbZf6Yc"
+  ],
+  "iss": "https://issuer.example.org",
+  "exp": 1883000000,
+  "sub": "NzbLsXh8uDCcd7noWXFZAfHkxZsRGC9Xs",
+  "jti": "urn:uuid:6c5c0a49-b589-431d-bae7-219122a9ec2c",
+  "status": "https://issuer.example.org/status",
+  "vct": "DisabilityCard",
+  "verified_claims": {
+    "verification": {
+      "_sd": [
+        "sTskq0yFy31ZH3YP2nN_nFnd7H9q18dU3oEa1DC5LRc"
+      ],
+      "trust_framework": "eidas",
+      "assurance_level": "high"
+    },
+    "claims": {
+      "_sd": [
+        "3humFjiCYHdHzjL-OEd1vKnQa10ivaYEd1dCCkfRuaA",
+        "EYgzJ1hTYWJjhBK2V3b8HV3e_fEf-Udffc5ymY77WtQ",
+        "F90SKK9nIQcHIElkHY_ult_9FGqYe-RydvY3E0qR96s",
+        "IcYHQydT_C3U1IqaJlFicxLlaHTHvElyFZ6Jxia27qQ",
+        "dfrmUvonZDgealZCGwk3ufmc_4ept3y9N7xhWZlCyxo",
+        "ji86HS1v3D41tU5JqW4oWCwTJDuTUwp1ewqoCUzzEXk",
+        "lXgxEDAuPeUvmkcNGr9FZuqodwFqUT01gJj7xd4yEPA"
+      ]
+    }
+  },
+  "_sd_alg": "sha-256",
+  "cnf": {
+    "jwk": {
+      "kty": "EC",
+      "crv": "P-256",
+      "x": "TCAER19Zvu3OHF4j4W4vfSVoHIP1ILilDls7vCeGemc",
+      "y": "ZxjiWWbZMQGHVWKVQ4hbSIirsVfuecCE6t4jT9F2HZQ"
+    }
+  }
+}
+
+
+

In the following the disclosure list is given:

+

Claim iat:

+
    +
  • SHA-256 Hash: 7WG4nT6K26_R3975zcwnVwgoHA7b988_3-vJzbZf6Yc

  • +
  • Disclosure: +WyI1N212eWNUaDV5WkNyS0xaNXhuZlV3IiwgImlhdCIsIDE2ODMwMDAwMDBd

  • +
  • Contents: ["57mvycTh5yZCrKLZ5xnfUw", "iat", 1683000000]

  • +
+

Claim source:

+
    +
  • SHA-256 Hash: qfuzrQuGcbBBKaE4Q9eqVCSznzJ2rNndLG8q606RLsM

  • +
  • Disclosure: +WyJrdWNyQm1sb19oTWFJRkY1ODVSemFRIiwgInNvdXJjZSIsIHsib3JnYW5p +emF0aW9uX25hbWUiOiAiSXN0aXR1dG8gTmF6aW9uYWxlIGRlbGxhIFByZXZp +ZGVuemEgU29jaWFsZSIsICJvcmdhbml6YXRpb25faWQiOiAidXJuOmV1ZGk6 +aXQ6b3JnYW5pemF0aW9uX2lkOmlwYV9jb2RlOmlucHMiLCAiY291bnRyeV9j +b2RlIjogIklUIn1d

  • +
  • Contents: +["kucrBmlo_hMaIFF585RzaQ", "source", {"organization_name": +"Istituto Nazionale della Previdenza Sociale", +"organization_id": +"urn:eudi:it:organization_id:ipa_code:inps", "country_code": +"IT"}]

  • +
+

Claim evidence:

+
    +
  • SHA-256 Hash: sTskq0yFy31ZH3YP2nN_nFnd7H9q18dU3oEa1DC5LRc

  • +
  • Disclosure: +WyJOVE5Sb09pdVZWUnRGNkNFenRkOVp3IiwgImV2aWRlbmNlIiwgW3sidHlw +ZSI6ICJlbGVjdHJvbmljX3JlY29yZCIsICJyZWNvcmQiOiB7Il9zZCI6IFsi +cWZ1enJRdUdjYkJCS2FFNFE5ZXFWQ1N6bnpKMnJObmRMRzhxNjA2UkxzTSJd +LCAidHlwZSI6ICJodHRwczovL2V1ZGkud2FsbGV0LnBkbmQuZ292Lml0In19 +XV0

  • +
  • Contents: ["NTNRoOiuVVRtF6CEztd9Zw", "evidence", [{"type": +"electronic_record", "record": {"_sd": +["qfuzrQuGcbBBKaE4Q9eqVCSznzJ2rNndLG8q606RLsM"], "type": +"https://eudi.wallet.pdnd.gov.it"}}]]

  • +
+

Claim document_number:

+
    +
  • SHA-256 Hash: 3humFjiCYHdHzjL-OEd1vKnQa10ivaYEd1dCCkfRuaA

  • +
  • Disclosure: +WyJGRFNTUGdnekdCVXdRTEhEU0U2d1FRIiwgImRvY3VtZW50X251bWJlciIs +ICJYWFhYWFhYWFhYIl0

  • +
  • Contents: +["FDSSPggzGBUwQLHDSE6wQQ", "document_number", "XXXXXXXXXX"]

  • +
+

Claim given_name:

+
    +
  • SHA-256 Hash: lXgxEDAuPeUvmkcNGr9FZuqodwFqUT01gJj7xd4yEPA

  • +
  • Disclosure: +WyJLWjhlNXdWRXREdmIxemlTUEE0RHpBIiwgImdpdmVuX25hbWUiLCAiTWFy +aW8iXQ

  • +
  • Contents: ["KZ8e5wVEtDvb1ziSPA4DzA", "given_name", "Mario"]

  • +
+

Claim family_name:

+
    +
  • SHA-256 Hash: IcYHQydT_C3U1IqaJlFicxLlaHTHvElyFZ6Jxia27qQ

  • +
  • Disclosure: +WyJwWjVNUnlPeHBWV1p1SExvSi15alJnIiwgImZhbWlseV9uYW1lIiwgIlJv +c3NpIl0

  • +
  • Contents: ["pZ5MRyOxpVWZuHLoJ-yjRg", "family_name", "Rossi"]

  • +
+

Claim birth_date:

+
    +
  • SHA-256 Hash: EYgzJ1hTYWJjhBK2V3b8HV3e_fEf-Udffc5ymY77WtQ

  • +
  • Disclosure: +WyJqdFZ1S0NwbjdiVGNIckFnX3NlVWJRIiwgImJpcnRoX2RhdGUiLCAiMTk4 +MC0wMS0xMCJd

  • +
  • Contents: ["jtVuKCpn7bTcHrAg_seUbQ", "birth_date", "1980-01-10"]

  • +
+

Claim expiry_date:

+
    +
  • SHA-256 Hash: dfrmUvonZDgealZCGwk3ufmc_4ept3y9N7xhWZlCyxo

  • +
  • Disclosure: +WyJXRGtkNkpzTmhERnZMUDRzMWhRZHlBIiwgImV4cGlyeV9kYXRlIiwgIjIw +MjQtMDEtMDEiXQ

  • +
  • Contents: ["WDkd6JsNhDFvLP4s1hQdyA", "expiry_date", "2024-01-01"]

  • +
+

Claim tax_id_code:

+
    +
  • SHA-256 Hash: F90SKK9nIQcHIElkHY_ult_9FGqYe-RydvY3E0qR96s

  • +
  • Disclosure: +WyI0a3NBejZiTVVLeTZadk4xaDhIRHVRIiwgInRheF9pZF9jb2RlIiwgIlRJ +TklULVhYWFhYWFhYWFhYWFhYWFgiXQ

  • +
  • Contents: ["4ksAz6bMUKy6ZvN1h8HDuQ", "tax_id_code", +"TINIT-XXXXXXXXXXXXXXXX"]

  • +
+

Claim constant_attendance_allowance:

+
    +
  • SHA-256 Hash: ji86HS1v3D41tU5JqW4oWCwTJDuTUwp1ewqoCUzzEXk

  • +
  • Disclosure: +WyJEZFdxS2g3d2RJNVZBeEtTdnhzWFZRIiwgImNvbnN0YW50X2F0dGVuZGFu +Y2VfYWxsb3dhbmNlIiwgdHJ1ZV0

  • +
  • Contents: +["DdWqKh7wdI5VAxKSvxsXVQ", "constant_attendance_allowance", +true]

  • +
+

The combined format for the PID issuance is represented below:

+
eyJhbGciOiAiRVMyNTYiLCAidHlwIjogImV4YW1wbGUrc2Qtand0In0.eyJfc2QiOiBb
+IjdXRzRuVDZLMjZfUjM5NzV6Y3duVndnb0hBN2I5ODhfMy12SnpiWmY2WWMiXSwgImlz
+cyI6ICJodHRwczovL2lzc3Vlci5leGFtcGxlLm9yZyIsICJleHAiOiAxODgzMDAwMDAw
+LCAic3ViIjogIk56YkxzWGg4dURDY2Q3bm9XWEZaQWZIa3hac1JHQzlYcyIsICJqdGki
+OiAidXJuOnV1aWQ6NmM1YzBhNDktYjU4OS00MzFkLWJhZTctMjE5MTIyYTllYzJjIiwg
+InN0YXR1cyI6ICJodHRwczovL2lzc3Vlci5leGFtcGxlLm9yZy9zdGF0dXMiLCAidmN0
+IjogIkRpc2FiaWxpdHlDYXJkIiwgInZlcmlmaWVkX2NsYWltcyI6IHsidmVyaWZpY2F0
+aW9uIjogeyJfc2QiOiBbInNUc2txMHlGeTMxWkgzWVAybk5fbkZuZDdIOXExOGRVM29F
+YTFEQzVMUmMiXSwgInRydXN0X2ZyYW1ld29yayI6ICJlaWRhcyIsICJhc3N1cmFuY2Vf
+bGV2ZWwiOiAiaGlnaCJ9LCAiY2xhaW1zIjogeyJfc2QiOiBbIjNodW1GamlDWUhkSHpq
+TC1PRWQxdktuUWExMGl2YVlFZDFkQ0NrZlJ1YUEiLCAiRVlnekoxaFRZV0pqaEJLMlYz
+YjhIVjNlX2ZFZi1VZGZmYzV5bVk3N1d0USIsICJGOTBTS0s5bklRY0hJRWxrSFlfdWx0
+XzlGR3FZZS1SeWR2WTNFMHFSOTZzIiwgIkljWUhReWRUX0MzVTFJcWFKbEZpY3hMbGFI
+VEh2RWx5Rlo2SnhpYTI3cVEiLCAiZGZybVV2b25aRGdlYWxaQ0d3azN1Zm1jXzRlcHQz
+eTlON3hoV1psQ3l4byIsICJqaTg2SFMxdjNENDF0VTVKcVc0b1dDd1RKRHVUVXdwMWV3
+cW9DVXp6RVhrIiwgImxYZ3hFREF1UGVVdm1rY05HcjlGWnVxb2R3RnFVVDAxZ0pqN3hk
+NHlFUEEiXX19LCAiX3NkX2FsZyI6ICJzaGEtMjU2IiwgImNuZiI6IHsiandrIjogeyJr
+dHkiOiAiRUMiLCAiY3J2IjogIlAtMjU2IiwgIngiOiAiVENBRVIxOVp2dTNPSEY0ajRX
+NHZmU1ZvSElQMUlMaWxEbHM3dkNlR2VtYyIsICJ5IjogIlp4amlXV2JaTVFHSFZXS1ZR
+NGhiU0lpcnNWZnVlY0NFNnQ0alQ5RjJIWlEifX19.hbgWxBoQtLVpTfygYVDhrgnoCkw
+aw_hqY9GpxG4oXixejLEMvTOAwYFtqiNnYSuNaaGD6aemJW7jLSHDm9NOGA~WyI1N212
+eWNUaDV5WkNyS0xaNXhuZlV3IiwgImlhdCIsIDE2ODMwMDAwMDBd~WyJrdWNyQm1sb19
+oTWFJRkY1ODVSemFRIiwgInNvdXJjZSIsIHsib3JnYW5pemF0aW9uX25hbWUiOiAiSXN
+0aXR1dG8gTmF6aW9uYWxlIGRlbGxhIFByZXZpZGVuemEgU29jaWFsZSIsICJvcmdhbml
+6YXRpb25faWQiOiAidXJuOmV1ZGk6aXQ6b3JnYW5pemF0aW9uX2lkOmlwYV9jb2RlOml
+ucHMiLCAiY291bnRyeV9jb2RlIjogIklUIn1d~WyJOVE5Sb09pdVZWUnRGNkNFenRkOV
+p3IiwgImV2aWRlbmNlIiwgW3sidHlwZSI6ICJlbGVjdHJvbmljX3JlY29yZCIsICJyZW
+NvcmQiOiB7Il9zZCI6IFsicWZ1enJRdUdjYkJCS2FFNFE5ZXFWQ1N6bnpKMnJObmRMRz
+hxNjA2UkxzTSJdLCAidHlwZSI6ICJodHRwczovL2V1ZGkud2FsbGV0LnBkbmQuZ292Lm
+l0In19XV0~WyJGRFNTUGdnekdCVXdRTEhEU0U2d1FRIiwgImRvY3VtZW50X251bWJlci
+IsICJYWFhYWFhYWFhYIl0~WyJLWjhlNXdWRXREdmIxemlTUEE0RHpBIiwgImdpdmVuX2
+5hbWUiLCAiTWFyaW8iXQ~WyJwWjVNUnlPeHBWV1p1SExvSi15alJnIiwgImZhbWlseV9
+uYW1lIiwgIlJvc3NpIl0~WyJqdFZ1S0NwbjdiVGNIckFnX3NlVWJRIiwgImJpcnRoX2R
+hdGUiLCAiMTk4MC0wMS0xMCJd~WyJXRGtkNkpzTmhERnZMUDRzMWhRZHlBIiwgImV4cG
+lyeV9kYXRlIiwgIjIwMjQtMDEtMDEiXQ~WyI0a3NBejZiTVVLeTZadk4xaDhIRHVRIiw
+gInRheF9pZF9jb2RlIiwgIlRJTklULVhYWFhYWFhYWFhYWFhYWFgiXQ~WyJEZFdxS2g3
+d2RJNVZBeEtTdnhzWFZRIiwgImNvbnN0YW50X2F0dGVuZGFuY2VfYWxsb3dhbmNlIiwg
+dHJ1ZV0~
+
+
+
+
+
+

MDOC-CBOR

+

The PID/(Q)EAA MDOC-CBOR data model is defined in ISO/IEC 18013-5, the standard born for the the mobile driving license (mDL) use case.

+

The MDOC data elements MUST be encoded as defined in RFC 8949 - Concise Binary Object Representation (CBOR).

+

The PID encoded in MDOC-CBOR format uses the document type set to eu.europa.ec.eudiw.pid.1, according to the reverse domain approach defined in the +EIDAS-ARF and ISO/IEC 18013-5.

+

The document's data elements utilize a consistent namespace for the mandatory Mobile Driving License attributes, while the national PID attributes use the domestic namespace eu.europa.ec.eudiw.pid.it.1, as outlined in this implementation profile.

+

In compliance with ISO/IEC 18013-5, the MDOC data model in the domestic namespace eu.europa.ec.eudiw.pid.it.1, requires the following attributes:

+ +++++ + + + + + + + + + + + + + + + + + + + + +

Attribute name

Description

Reference

version

tstr (text string). Version of the data structure being used. It's a way to track changes and updates to the standard or to a specific implementation profile. This allows for backward compatibility and understanding of the data if the standard or implementation evolves over time.

[ISO 18013-5#8.3.2.1.2]

status

uint (unsigned int). Status code. For example "status":0 means OK (normal processing).

[ISO 18013-5#8.3.2.1.2.3]

documents

bstr (byte string). The collection of digital documents. Each document in this collection represents a specific type of data or information related to the Digital Credential.

[ISO 18013-5#8.3.2.1.2]

+

Each document within the documents collection MUST have the following structure:

+ +++++ + + + + + + + + + + + + + + + + +

Attribute name

Description

Reference

docType

tstr (text string). Document type. For the PID, the value MUST be set to eu.europa.ec.eudiw.pid.1. For an mDL, the value MUST be org.iso.18013-5.1.mDL.

[ISO 18013-5#8.3.2.1.2]

issuerSigned

bstr (byte string). It MUST contain the Mobile Security Object for Issuer data authentication and the data elements protected by Issuer data authentication.

[ISO 18013-5#8.3.2.1.2]

+

The issuerSigned object MUST have the following structure:

+ +++++ + + + + + + + + + + + + + + + + +

Attribute name

Description

Reference

nameSpaces

bstr (byte string) with tag 24 and major type 6. Returned data elements for the namespaces. It MAY be possible to have one or more namespaces. The nameSpaces MUST use the same value for the document type. However, it MAY have a domestic namespace to include attributes defined in this implementation profile. The value MUST be set to eu.europa.ec.eudiw.pid.it.1.

[ISO 18013-5#8.3.2.1.2]

issuerAuth

bstr (byte string). Contains Mobile Security Object (MSO), a COSE Sign1 Document, issued by the Credential Issuer.

[ISO 18013-5#9.1.2.4]

+

During the presentation of the MDOC-CBOR credential, in addition to the objects in the table above, a deviceSigned object MUST also be added. deviceSigned MUST NOT be included in the issued credential provided by the PID/(Q)EAA Issuer.

+ +++++ + + + + + + + + + + + + +

Attribute name

Description

Reference

deviceSigned

bstr (byte string). Data elements signed by the Wallet Instance during the presentation phase.

[ISO 18013-5#8.3.2.1.2]

+

Where the deviceSigned MUST have the following structure:

+ +++++ + + + + + + + + + + + + + + + + +

Attribute name

Description

Reference

nameSpaces

tstr (text string). Returned data elements for the namespaces. It MAY be possible to have one or more namespaces. It MAY be used for self-attested claims.

[ISO 18013-5#8.3.2.1.2]

deviceAuth

bstr (byte string). It MUST contain either the DeviceSignature or the DeviceMac element.

[ISO 18013-5#8.3.2.1.2]

+
+

Note

+

A deviceSigned object given during the presentation phase has two purposes:

+
+
    +
  1. It provides optional self-attested attributes in the nameSpaces object. If no self-attested attributes are provided by the Wallet Instance, the nameSpaces object MUST be included with an empty structure.

  2. +
  3. Provide a cryptographic proof attesting that the Holder is the legitimate owner of the Credential, by means of a deviceAuth object.

  4. +
+
+
+
+

Note

+

The issuerSigned and the deviceSigned objects contain the nameSpaces object and the Mobile Security Object. The latter is the only signed object, while the nameSpaces object is not signed.

+
+
+

nameSpaces

+

The nameSpaces object contains one or more IssuerSignedItemBytes that are encoded using CBOR bitsring 24 tag (#6.24(bstr .cbor), marked with the CBOR Tag 24(<<... >>) and represented in the example using the diagnostic format). It represents the disclosure information for each digest within the Mobile Security Object and MUST contain the following attributes:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Encoding

Description

digestID

integer

Reference value to one of the ValueDigests provided in the Mobile Security Object (issuerAuth).

random

bstr (byte string)

Random byte value used as salt for the hash function. This value SHALL be different for each IssuerSignedItem and it SHALL have a minimum length of 16 bytes.

elementIdentifier

tstr (text string)

Data element identifier.

elementValue

depends by the value, see the next table.

Data element value.

+

The elementIdentifier data that MUST be included in a PID/(Q)EAA are:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Namespace

Element identifier

Description

eu.europa.ec.eudiw.pid.1

issue_date

full-date (CBORTag 1004). Date when the PID/(Q)EAA was issued.

eu.europa.ec.eudiw.pid.1

expiry_date

full-date (CBORTag 1004). Date when the PID/(Q)EAA will expire.

eu.europa.ec.eudiw.pid.1

issuing_authority

tstr (text string). Name of administrative authority that has issued the PID/(Q)EAA.

eu.europa.ec.eudiw.pid.1

issuing_country

tstr (text string). Alpha-2 country code as defined in [ISO 3166].

eu.europa.ec.eudiw.pid.it.1

verification.evidence

bstr (byte string). As defined in the PID/(Q)EAA Verification field Section.

eu.europa.ec.eudiw.pid.it.1

verification.trust_framework

tstr (text string). As defined in the PID/(Q)EAA Verification field Section.

eu.europa.ec.eudiw.pid.it.1

verification.assurance_level

tstr (text string). As defined in the PID/(Q)EAA Verification field Section.

eu.europa.ec.eudiw.pid.it.1

status

tstr (text string). HTTPS URL where the credential validity status is available.

+

Depending on the Digital Credential type, additional elementIdentifier data MAY be added. The PID MUST support the following data:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Namespace

Element identifier

Description

eu.europa.ec.eudiw.pid.1

given_name

tstr (text string). See PID Claims fields Section.

eu.europa.ec.eudiw.pid.1

family_name

tstr (text string). See PID Claims fields Section.

eu.europa.ec.eudiw.pid.1

birth_date

full-date (CBORTag 1004). See PID Claims fields Section.

eu.europa.ec.eudiw.pid.1

unique_id

tstr (text string). See PID Claims fields Section.

eu.europa.ec.eudiw.pid.it.1

tax_id_code

tstr (text string). See PID Claims fields Section.

+
+
+

Mobile Security Object

+

The issuerAuth represents the Mobile Security Object which is a COSE Sign1 Document defined in RFC 9052 - CBOR Object Signing and Encryption (COSE): Structures and Process. It has the following data structure:

+
    +
  • protected header

  • +
  • unprotected header

  • +
  • payload

  • +
  • signature.

  • +
+

The protected header MUST contain the following parameter encoded in CBOR format:

+ +++++ + + + + + + + + + + + + +

Element

Description

Reference

Signature algorithm

-7 means ES256, SHA-256.

RFC8152

+
+

Note

+

Only the Signature Algorithm MUST be present in the protected headers, other elements SHOULD not be present in the protected header.

+
+

The unprotected header MUST contain the following parameter:

+ +++++ + + + + + + + + + + + + +

Element

Description

Reference

x5chain

Identified with the label 33

RFC 9360 CBOR Object Signing and Encryption (COSE) - Header Parameters for Carrying and Referencing X.509 Certificates.

+
+

Note

+

The x5chain is included in the unprotected header with the aim to make the Holder able to update the X.509 certificate chain, related to the Mobile Security Object issuer, without invalidating the signature.

+
+

The payload MUST contain the MobileSecurityObject, without the content-type COSE Sign header parameter and encoded as a byte string (bstr) using the CBOR Tag 24.

+

The MobileSecurityObjectBytes MUST have the following attributes:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Element

Description

Reference

docType

See Table.

[ISO 18013-5#9.1.2.4]

version

See Table.

[ISO 18013-5#9.1.2.4]

validityInfo.

Object containing issuance and expiration datetimes. It MUST contain the following sub-value:

+
+
    +
  • signed

  • +
  • validFrom

  • +
  • validUntil

  • +
+
+

[ISO 18013-5#9.1.2.4]

digestAlgorithm

According to the algorithm defined in the protected header.

[ISO 18013-5#9.1.2.4]

valueDigests

Mapped digest by unique id, grouped by namespace.

[ISO 18013-5#9.1.2.4]

deviceKeyInfo

It MUST contain the Wallet Instance's public key containing the following sub-values.

+
+
    +
  • deviceKey (REQUIRED).

  • +
  • keyAuthorizations (OPTIONAL).

  • +
  • keyInfo (OPTIONAL).

  • +
+
+

[ISO 18013-5#9.1.2.4]

+
+

Note

+

The private key related to the public key stored in the deviceKey object is used to sign the DeviceSignedItems object and proof the possession of the PID during the presentation phase (see the presentation phase with MDOC-CBOR).

+
+
+
+

MDOC-CBOR Examples

+

A non-normative example of a PID in MDOC-CBOR format is represented below using the AF Binary encoding:

+
a366737461747573006776657273696f6e63312e3069646f63756d656e747381a267646f6354797065781865752e6575726f70612e65632e65756469772e7069642e316c6973737565725369676e6564a26a697373756572417574688443a10126a1182159021930820215308201bca003020102021404ad06a30c1a6dc6e93be0e2e8f78dcafa7907c2300a06082a8648ce3d040302305b310b3009060355040613025a45312e302c060355040a0c25465053204d6f62696c69747920616e64205472616e73706f7274206f66205a65746f706961311c301a06035504030c1349414341205a65746573436f6e666964656e73301e170d3231303932393033333034355a170d3232313130333033333034345a3050311a301806035504030c114453205a65746573436f6e666964656e7331253023060355040a0c1c5a65746f70696120436974792044657074206f662054726166666963310b3009060355040613025a453059301306072a8648ce3d020106082a8648ce3d030107034200047c5545e9a0b15f4ff3ce5015121e8ad3257c28d541c1cd0d604fc9d1e352ccc38adef5f7902d44b7a6fc1f99f06eedf7b0018fd9da716aec2f1ffac173356c7da3693067301f0603551d23041830168014bba2a53201700d3c97542ef42889556d15b7ac4630150603551d250101ff040b3009060728818c5d050102301d0603551d0e04160414ce5fd758a8e88563e625cf056bfe9f692f4296fd300e0603551d0f0101ff040403020780300a06082a8648ce3d0403020347003044022012b06a3813ffec5679f3b8cddb51eaa4b95b0cbb1786b09405e2000e9c46618c02202c1f778ad252285ed05d9b55469f1cb78d773671f30fe7ab815371942328317c59032ad818590325a667646f6354797065781865752e6575726f70612e65632e65756469772e7069642e316776657273696f6e63312e306c76616c6964697479496e666fa3667369676e6564c074323032332d30322d32325430363a32333a35365a6976616c696446726f6dc074323032332d30322d32325430363a32333a35365a6a76616c6964556e74696cc074323032342d30322d32325430303a30303a30305a6c76616c756544696765737473a2781865752e6575726f70612e65632e65756469772e7069642e31ac015820a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a025820cd372fb85148700fa88095e3492d3f9f5beb43e555e5ff26d95f5a6adc36f8e6035820e67e72111b363d80c8124d28193926000980e1211c7986cacbd26aacc5528d48045820f7d062d662826ed95869851db06bb539b402047baee53a00e0aa35bfbe98265d0658202a132dbfe4784627b86aa3807cd19cfeff487aab3dd7a60d0ab119a72e736936075820bdca9e8dbca354e824e67bfe1533fa4a238b9ea832f23fb4271ebeb3a5a8f7200858202c0eaec2f05b6c7fe7982683e3773b5d8d7a01e33d04dfcb162add8bd99bee9a095820bfe220d85657ccec3c67e7db1df747e9148a152334bb6d4b65b273279bcc36ec0a582018e38144f5044301d6a0b4ec9d5f98d4cd950e6ea2c29b849cbd457da29b6ad30b58203c71d2f0efa09d9e3fbbdffd29204f6b292c9f79570aef72dd86c91f7a3aa5c50c582065743d58d89d45e52044758f546034fd13a4f994bc270cdfa7844f74eb3f4b6e0d5820b4a8eb5d523bffa17b41bda12ddc7da32ae1e5f7ff3dcc394a35401f16919bbf781b65752e6575726f70612e65632e65756469772e7069642e69742e31a10e58209d6c11644651126c94acdaf0803e86d4c71d15d3b2712a14295416734efd514d6d6465766963654b6579496e666fa1696465766963654b6579a401022001215820ba01aea44eee1e338eb2f04e279dbd51b34655783ee185150838c9a7a7c4db7122582025ba0044439a3871a7b975a0994a85e79b705a9ac263b3fe899b0a93412ee8c96f646967657374416c676f726974686d675348412d32353658400813c28fd62f2602cbc14724e5865733c44a0fca589b55c085ec9d5c725d6cce25ba0044439a3871a7b975a0994a85e79b705a9ac263b3fe899b0a93412ee8c96a6e616d65537061636573a2781865752e6575726f70612e65632e65756469772e7069642e318cd818586da4686469676573744944016672616e646f6d5820156df9227ad341eaa61aabd301106fd21bdc18820e01dfc16bcf5fecc447111b71656c656d656e744964656e7469666965726b6578706972795f646174656c656c656d656e7456616c7565d903ec6a323032342d30322d3232d818586fa4686469676573744944026672616e646f6d5820a3a1f13f05544d03a5b50b5fdb78465808393bcf3b7953a345fe28f820c7be0d71656c656d656e744964656e7469666965726d69737375616e63655f646174656c656c656d656e7456616c7565d903ec6a323032332d30322d3232d8185866a4686469676573744944036672616e646f6d5820852591f90f2c9ded57a03632e2c1322ab52a082a431e71a4149a6830c8f1ad0c71656c656d656e744964656e7469666965726f69737375696e675f636f756e7472796c656c656d656e7456616c7565624954d818587ca4686469676573744944046672616e646f6d5820d1d587b3512acce15c4f6b20944ceb002a464e4a158389788563408873c3fce571656c656d656e744964656e7469666965727169737375696e675f617574686f726974796c656c656d656e7456616c7565764d696e69737465726f2064656c6c27496e7465726e6fd8185864a4686469676573744944056672616e646f6d582094fdd7609c0e73dc8589b5cab11e1d9058cf8bff8a336da5f81fcba055396a0f71656c656d656e744964656e7469666965726a676976656e5f6e616d656c656c656d656e7456616c7565654d6172696fd8185865a4686469676573744944066672616e646f6d5820660c0a7bf79e0e0261ca1547a4294fb808aa70738f424b13ab1b9440b566ae1371656c656d656e744964656e7469666965726b66616d696c795f6e616d656c656c656d656e7456616c756565526f737369d818586ba4686469676573744944076672616e646f6d5820315c53491286488fa07f5c2ce67135ef5c9959c3469c99a14e9b6dc924f9eba571656c656d656e744964656e746966696572696269727468646174656c656c656d656e7456616c7565d903ec6a313935362d30312d3132d818587da4686469676573744944086672616e646f6d5820764ef39c9d01f3aa6a87f441603cfe853fba3cee3bc2c168bcc9e96271d6e06371656c656d656e744964656e74696669657269756e697175655f69646c656c656d656e7456616c7565781e78787878787878782d7878782d787878782d787878787878787878787878d81858e8a4686469676573744944096672616e646f6d5820ad20b3b9c67aed8089ff33ecdc108781c3b49b81cd7a3f059d2fe236977037b271656c656d656e744964656e74696669657275766572696669636174696f6e2e65766964656e63656c656c656d656e7456616c756581a2647479706571656c656374726f6e69635f7265636f7264667265636f7264a264747970656c65696461732e69742e63696566736f75726365a3716f7267616e697a6174696f6e5f6e616d656c65696461732e69742e6369656f6f7267616e697a6174696f6e5f6964646d5f69746c636f756e7472795f636f6465626974d8185879a46864696765737449440a6672616e646f6d5820c12314b3695d1401505187e2113115e2f7b4a14b135dee320f5e6df81275f17671656c656d656e744964656e746966696572667374617475736c656c656d656e7456616c7565781d68747470733a2f2f70696470726f76696465722e69742f737461747573d8185877a46864696765737449440b6672616e646f6d5820a7b6a9027ed97f25df96dd0eab8093b264a3bd6a1d5b24228f3fc5b18ef835fb71656c656d656e744964656e746966696572781c766572696669636174696f6e2e74727573745f6672616d65776f726b6c656c656d656e7456616c7565656569646173d8185876a46864696765737449440c6672616e646f6d5820c76ce2ae4e9be1db07a5cb397b54ace3eccc786d3f85e4348b923dee059783db71656c656d656e744964656e746966696572781c766572696669636174696f6e2e6173737572616e63655f6c6576656c6c656c656d656e7456616c75656468696768781b65752e6575726f70612e65632e65756469772e7069642e69742e3181d8185877a46864696765737449440d6672616e646f6d5820717df3f583b1484366c33a1f869f2b5d201d466a8b589c79ab1a2d85e595432571656c656d656e744964656e7469666965726d7461785f69645f6e756d6265726c656c656d656e7456616c75657554494e49542d585858585858585858585858585858
+
+
+

The Diagnostic Notation of the above MDOC-CBOR is given below:

+
{
+  "status": 0,
+  "version": "1.0",
+  "documents": [
+    {
+    "docType": "eu.europa.ec.eudiw.pid.1",
+    "issuerSigned": {
+        "issuerAuth": [
+        << {1: -7} >>, % protected header with the value alg:ES256
+        {
+            33: h'30820215308201BCA003020102021404AD30C…'% 33->X5chain:COSE X_509
+        },
+        <<
+            24(<<
+                {
+                "docType": "eu.europa.ec.eudiw.pid.1",
+                "version": "1.0",
+                "validityInfo": {
+                    "signed": 0("2023-02-22T06:23:56Z"),
+                    "validFrom": 0("2023-02-22T06:23:56Z"),
+                    "validUntil": 0("2024-02-22T00:00:00Z")
+                },
+                "valueDigests": {
+                    "eu.europa.ec.eudiw.pid.1": {
+                        1:h'0F1571A97FFB799CC8FCDF2BA4FC2909929…',
+                        2: h'0CDFE077400432C055A2B69596C90…',
+                        3: h'E2382149255AE8E955AF9B8984395…',
+                        4: h'BBC77E6CCA981A3AD0C3E544EDF86…',
+                        6: h'BB6E6C68D1B4B4EC5A2AE9206F5t4…',
+                        7: h'F8A5966E6DAC9970E0334D8F75E25…',
+                        8: h'DEFDF1AA746718016EF1B94BFE5R6…'
+                    },
+                    "eu.europa.ec.eudiw.pid.it.1": {
+                        9: h'AFC5A127BE44753172844B13491D8…',
+                        10: h'AFC5A127BE44753172844B13492H4…',
+                        11: h'DJA5A127BE44753172844B13492H4…',
+                        12: h'KDL5A127BE44753172844B13492H4…',
+                        13: h'F9EE4D36F67DBD75E23311AC1C29…'
+                    }
+                },
+                "deviceKeyInfo": {
+                    "deviceKey": {
+                        1: 2, % kty:EC2 (Eliptic curves with x and y coordinate pairs)
+                        -1: 1, % crv:p256
+                        -2: h'B820963964E53AF064686DD9218303494A…', % x-coordiantes
+                        -3: h'0A6DA0AF437E2943F1836F31C678D89298E9…'% y-ccordiantes
+                    }
+                },
+                "digestAlgorithm": "SHA-256"
+                }
+            >>)
+        >>,
+        h'1AD0D6A7313EFDC38FCD765852FA2BD43DEBF48BF5A580D'
+        ],
+        "nameSpaces": {
+            "eu.europa.ec.eudiw.pid.1": [
+            24(<<
+                {
+                "digestID": 1,
+                "random": h'E0B70BCEFBD43686F345C9ED429343AA',
+                "elementIdentifier": "expiry_date",
+                "elementValue": 1004("2024-02-22")
+                }
+            >>),
+            24(<<
+                {
+                "digestID": 2,
+                "random": h'AE84834F389EE69888665B90A3E4FCCE',
+                "elementIdentifier": "issue_date",
+                "elementValue": 1004("2023-02-22")
+                }
+            >>),
+            24(<<
+                {
+                "digestID": 3,
+                "random": h'960CB15A2EA9B68E5233CE902807AA95',
+                "elementIdentifier": "issuing_country",
+                "elementValue": "IT"
+                }
+            >>),
+            24(<<
+                {
+                "digestID": 4,
+                "random": h'9D3774BD5994CCFED248674B32A4F76A',
+                "elementIdentifier": "issuing_authority",
+                "elementValue": "Ministero dell'Interno"
+                }
+            >>),
+            24(<<
+                {
+                "digestID": 5,
+                "random": h'EB12193DC66C6174530CDC29B274381F',
+                "elementIdentifier": "given_name",
+                "elementValue": "Mario"
+                }
+            >>)),
+            24(<<
+                {
+                "digestID": 6,
+                "random": h'DB143143538F3C8D41DC024F9CB25C9D',
+                "elementIdentifier": "family_name",
+                "elementValue": "Rossi"
+                }
+            >>),
+            24(<<
+                {
+                "digestID": 7,
+                "random": h'6059FF1CE27B4997B4ADE1DE7B01DC60',
+                "elementIdentifier": "birth_date",
+                "elementValue": 1004("1956-01-12")% the tag 1004 defines the value
+                                                    is a full date
+                }
+            >>),
+            24(<<
+                {
+                "digestID": 8,
+                "random": h'53C15C57B3B076E788795829190220B4',
+                "elementIdentifier": "unique_id",
+                "elementValue": "xxxxxxxx-xxx-xxxx-xxxxxxxxxxxx"
+                }
+            >>)
+            ],
+            "eu.europa.ec.eudiw.pid.it.1": [
+                24(<<
+                    {
+                    "digestID": 9,
+                    "random": h'CAD1F6A38F603451F1FA653F81FF309D',
+                    "elementIdentifier": "verification.evidence",
+                    "elementValue": [
+                        {
+                        "type": "electronic_record",
+                        "record": {
+                            "type": "eidas.it.cie",
+                            "source": {
+                                "organization_name": "eidas.it.cie",
+                                "organization_id":  "m_it",
+                                "country_code": "it",
+                            }
+                        }
+                        }
+                    ]
+                    }
+                >>),
+                24(<<
+                    {
+                    "digestID": 10,
+                    "random": h'CAD1F6A38F603451F1FA653F81FF309D,
+                    "elementIdentifier": "status",
+                    "elementValue": "https://pidprovider.example.it/status"
+                    }
+                >>),
+                24(<<
+                    {
+                    "digestID": 11,
+                    "random": h'564E3C65D46D06FEDEB0E7293A86GF',
+                    "elementIdentifier": "verification.trust_framework",
+                    "elementValue": "eidas"
+                    }
+                >>),
+                24(<<
+                    {
+                    "digestID": 12,
+                    "random": h'D884E5D5EF4CFC93FDB1E4EE8F3923',
+                    "elementIdentifier": "verification.assurance_level",
+                    "elementValue": "high"
+                    }
+                >>)
+                24(<<
+                    {
+                    "digestID": 13,
+                    "random": h'11aa7273a2d2daa973f5951f0c34c2fbae',
+                    "elementIdentifier": "tax_id_number",
+                    "elementValue": "TINIT-XXXXXXXXXXXXXXX"
+                    }
+                >>)
+            ]
+        }
+    }
+    }
+  ]
+}
+
+
+
+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/en/pid-eaa-issuance.html b/refs/pull/212/merge/en/pid-eaa-issuance.html new file mode 100644 index 000000000..b8ea13a90 --- /dev/null +++ b/refs/pull/212/merge/en/pid-eaa-issuance.html @@ -0,0 +1,2647 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | PID/(Q)EAA Issuance + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

PID/(Q)EAA Issuance

+

This section describes the PID and (Q)EAAs issuance flow with an high level of security. +The relevant entities and interfaces involved in the issuance flow are:

+
+
    +
  • Wallet Provider: The entity responsible for releasing an EUDI Wallet Solution. The Wallet Provider issues the Wallet Attestations to its Wallet Instances through an Attestation Service. The Wallet Attestation certifies the genuinity and authenticity of the Wallet Instance and its compliance with the security and privacy requirements.

  • +
  • Wallet Solution: Entire product and service owned by a Wallet Provider, offered to all the Users and certified as EUDI-compliant by a Conformity Assessment Body (CAB).

  • +
  • Wallet Instance: Instance of a Wallet Solution, installed on the User device. The Wallet Instance provides graphical interfaces for User interaction with Relying Parties, PID, (Q)EAA Providers and the Wallet Provider.

  • +
  • PID Provider: The entity that issues the eIDAS Person Identification Data (PID). It is composed of:

    +
    +
      +
    • OpenID4VCI Component: based on the "OpenID for Verifiable Credential Issuance" specification ` [OIDC4VCI. Draft 13] <https://openid.bitbucket.io/connect/openid-4-verifiable-credential-issuance-1_0.html>`_ to release the PID.

    • +
    • National eID Relying Party: The component to authenticate the User with the national Digital Identity Providers, based on OpenID Connect Core 1.0 or SAML2.

    • +
    • National Identity Provider: It represents preexisting identity systems based on SAML2 or OpenID Connect Core 1.0, already in production in each Member State (eg: the Italian SPID and CIE id schemes notified eIDAS with LoA High, see SPID/CIE OpenID Connect Specifications).

    • +
    +
    +
  • +
  • (Q)EAA Provider: It represents the Issuer of (Q)EAAs. It is composed of:

    +
      +
    • OpenID4VCI Component: based on the "OpenID for Verifiable Credential Issuance" specification to release (Q)EAAs.

    • +
    • Relying Party: Component to authenticate the User with the PID. The (Q)EAA Provider acts as a Verifier by sending a presentation request to the Wallet Instance, according to [OpenID4VP]. The Wallet Instance MUST have a valid PID, obtained in a previous time, to get authenticated with the (Q)EAA Provider.

    • +
    +
  • +
+
+
+

High-Level PID flow

+

The Fig. 2 shows a general architecture and highlights the main operations involved in the issuance of a PID.

+
+_images/High-Level-Flow-ITWallet-PID-Issuance.svg
+

Fig. 2 PID Issuance - General architecture and high level flow.

+
+
+

Below the description of the steps represented in the previous picture:

+
+
    +
  1. Wallet Instance Setup: the first time the Wallet Instance is started a preliminary setup phase is carried out. It consists of the release of the Wallet Attestation issued by Wallet Attestation Service asserting the genuineness and the compliance of the Wallet Instance with the shared trust framework. The Wallet Attestation binds the public key provided by the Wallet Instance, related to one of the private keys generated by the Wallet Instance.

  2. +
  3. PID/(Q)EAA Provider Discovery: the Wallet Instance discovers the trusted Digital Credential Issuers using the Federation API (e.g.: using the Subordinate Listing Endpoint of the Trust Anchor and its Intermediates), inspecting the Credential Issuer metadata and Trust Marks for filtering the PID Provider.

  4. +
  5. PID Provider Metadata: the Wallet Instance establishes the trust to the PID Provider according to the Trust Model and obtains the Metadata that discloses the formats of the PID, the algorithms supported, and any other parameter required for interoperability needs.

  6. +
  7. PID Request: using the Authorization Code Flow defined in [OIDC4VCI. Draft 13] the Wallet Instance requests the PID to the PID Provider.

  8. +
  9. User Authentication: the PID Provider authenticates the User with LoA High, acting as an Identity and Access Management Proxy to the National eID system.

  10. +
  11. PID Issuance: the User is authenticated with LoA High and the PID Provider releases a PID bound to the key material held by the requesting Wallet Instance.

  12. +
+
+

In the following sections the steps from 1 to 5 are further expanded into more technical details.

+
+
+

High-Level (Q)EAA flow

+

The Fig. 3 shows a general architecture and highlights the main operations involved in the issuance of a (Q)EAA, following the assumptions listed below:

+
+
    +
  • the User has a valid PID stored in their own Wallet Instance;

  • +
  • the (Q)EAA requires a high security implementation profile.

  • +
+
+
+_images/High-Level-Flow-ITWallet-QEAA-Issuance.svg
+

Fig. 3 (Q)EAA Issuance - General architecture and high level flow

+
+
+

Below the description of the most relevant operations involved in the (Q)EAA issuance:

+
+
    +
  1. Discovery of the trusted (Q)EAA Provider: the Wallet Instance obtains the list of the trusted (Q)EAA Provider using the Federation API (e.g.: using the Subordinate Listing Endpoint of the Trust Anchor and its Intermediates), then inspects the metadata and Trust Mark looking for the Digital Credential capabilities of each (Q)EAA Provider.

  2. +
  3. (Q)EAA Provider Metadata: the Wallet Instance establishes the trust to the (Q)EAA Provider according to the Trust Model, obtaining the Metadata that discloses the formats of the (Q)EAA, the algorithms supported, and any other parameter required for interoperability needs.

  4. +
  5. (Q)EAA Request: using the Authorization Code Flow , defined in [OIDC4VCI. Draft 13], the Wallet Instance requests a (Q)EAA to the (Q)EAA Provider.

  6. +
  7. User Authentication: the (Q)EAA Provider, acting as a Verifier (Relying Party), authenticates the User evaluating the presentation of the PID.

  8. +
  9. (Q)EAA Issuance: the User is authenticated with a valid PID and the (Q)EAA Provider releases a (Q)EAA bound to the key material held by the requesting Wallet Instance.

  10. +
+
+
+
+

Detailed Flow

+

The PID/(Q)EAA Issuance phase uses the Authorization Code Flow with the following specifications:

+ +

In this section a Wallet Initiated Flow is outlined, where the User receives the PID/(Q)EAA directly in response to the Credential Request.

+
+

Warning

+

All the non-normative examples are referred to the PID Provider issuance flow.

+
+
+_images/Low-Level-Flow-ITWallet-PID-QEAA-Issuance.svg +
+

Fig. 4 PID/(Q)EAA Issuance - Detailed flow

+
+
+

Steps 1-4 (Discovery): The User selects the PID/(Q)EAA Provider using the Wallet Instance, the Metadata for the selected PID/(Q)EAA Provider are processed by the Wallet Instance.

+
+

Note

+

Federation Check: The Wallet Instance needs to check if the PID/(Q)EAA Provider is part of the Federation, obtaining its protocol specific Metadata. A non-normative example of a response from the endpoint .well-known/openid-federation with the Entity Configuration and the Metadata of the PID/(Q)EAA Provider is represented within the section Entity Configuration Credential Issuer.

+
+

Steps 5-6 (PAR Request): The Wallet Instance:

+
+
    +
  • creates a fresh PKCE code verifier, Wallet Attestation Proof of Possession, and state parameter for the Pushed Authorization Request.

  • +
  • provides to the PID/(Q)EAA Provider PAR endpoint the parameters previously listed above, using the request parameter (hereafter Request Object) according to RFC 9126 Section 3 to prevent Request URI swapping attack.

  • +
  • MUST create the code_verifier with enough entropy random string using the unreserved characters with a minimum length of 43 characters and a maximum length of 128 characters, making it impractical for an attacker to guess its value. The value MUST be generated following the recommendation in Section 4.1 of RFC 7636.

  • +
  • signs this request using the private key that is created during the setup phase to obtain the Wallet Attestation. The related public key that is attested by the Wallet Provider is provided within the Wallet Attestation cnf claim.

  • +
  • MUST create the value of the client_assertion parameter according to OAuth 2.0 Attestation-based Client Authentication [oauth-attestation-draft], since in this flow the Pushed Authorization Endpoint is a protected endpoint. The client_assertion value MUST NOT contain more or less than precisely two JWTs separated with the ~ character. The first JWT MUST be the Wallet Attestation JWT and the second JWT MUST be the Wallet Attestation Proof of Possession.

  • +
  • specifies the types of the requested credentials using the authorization_details [RAR RFC 9396] parameter.

  • +
+
+

The PID/(Q)EAA Provider performs the following checks upon the receipt of the PAR request:

+
+
    +
  1. It MUST validate the signature of the Request Object using the algorithm specified in the alg header parameter (RFC 9126, RFC 9101) and the public key retrieved from the Wallet Attestation (cnf.jwk) referenced in the Request Object, using the kid JWS header parameter.

  2. +
  3. It MUST check that the used algorithm for signing the request in the alg header is one of the listed within the Section Cryptographic Algorithms.

  4. +
  5. It MUST check that the client_id in the request body of the PAR request matches the client_id claim included in the Request Object.

  6. +
  7. It MUST check that the iss claim in the Request Object matches the client_id claim in the Request Object (RFC 9126, RFC 9101).

  8. +
  9. It MUST check that the aud claim in the Request Object is equal to the PID/(Q)EAA Provider authorization endpoint uri (RFC 9126, RFC 9101).

  10. +
  11. It MUST reject the PAR request, if it contains the request_uri parameter (RFC 9126).

  12. +
  13. It MUST check that the Request Object contains all the mandatory parameters which values are validated according to Table of the HTTP parameters [derived from RFC 9126].

  14. +
  15. It MUST check that the Request Object is not expired, checking the exp claim (RFC 9126).

  16. +
  17. It MUST check that the Request Object was issued in a previous time than the value exposed in the iat claim. It SHOULD reject the request if the iat claim is far from the current time (RFC 9126) of more than 5 minutes.

  18. +
  19. It MUST check that the jti claim in the Request Object has not been used before by the Wallet Instance identified by the client_id. This allows the PID/(Q)EAA Provider to mitigate replay attacks (RFC 7519).

  20. +
  21. It MUST validate the client_assertion parameter based on Sections 4.1 and 4.2 of [oauth-attestation-draft].

  22. +
+
+

Below a non-normative example of the PAR.

+
POST /as/par HTTP/1.1
+Host: pid-provider.example.org
+Content-Type: application/x-www-form-urlencoded
+
+response_type=code
+&client_id=$thumprint-of-the-jwk-in-the-cnf-wallet-attestation$
+&code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
+&code_challenge_method=S256
+&request=eyJhbGciOiJSUzI1NiIsImtpZCI6ImsyYmRjIn0.ew0KIC Jpc3MiOiAiczZCaGRSa3F0MyIsDQogImF1ZCI6ICJodHRwczovL3NlcnZlci5leGFtcGxlLmNvbSIsDQo gInJlc3BvbnNlX3R5cGUiOiAiY29kZSBpZF90b2tlbiIsDQogImNsaWVudF9pZCI6ICJzNkJoZFJrcXQz IiwNCiAicmVkaXJlY3RfdXJpIjogImh0dHBzOi8vY2xpZW50LmV4YW1...
+&client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation
+&client_assertion=$WIA~WIA-PoP
+
+
+

Below an non-normative example of the Wallet Attestation Proof of Possession without encoding and signature applied:

+
{
+  "alg": "ES256",
+  "kid": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c",
+  "typ": "jwt-client-attestation-pop",
+}
+.
+{
+  "iss": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c",
+  "aud": "https://pid-provider.example.org/par-endpoint",
+  "jti": "ad25868c-8377-479b-8094-46fb1e797625",
+  "iat": 1686645115,
+  "exp": 1686652315
+}
+
+
+

Below an non-normative example of the signed Request Object without encoding and signature applied:

+
{
+  "alg": "ES256",
+  "kid": "FifYx03bnosD8m6gYQIfNHNP9cM_Sam9Tc5nLloIIrc",
+}
+.
+{
+"iss":"$thumprint-of-the-jwk-in-the-cnf-wallet-attestation$",
+"aud":"https://pid-provider.example.org",
+"exp":1672422065,
+"iat": 1672418465,
+"jti":"ac80df576e7109686717bf50b869e882",
+"response_type":"code",
+"client_id":"$thumprint-of-the-jwk-in-the-cnf-wallet-attestation$",
+"state":"fyZiOL9Lf2CeKuNT2JzxiLRDink0uPcd",
+"code_challenge":"E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM",
+"code_challenge_method":"S256",
+"authorization_details":[
+  {
+    "type": "openid_credential",
+    "credential_configuration_id": "PersonIdentificationData"
+  }
+],
+"redirect_uri":"eudiw://start.wallet.example.org",
+}
+
+
+
+

Note

+

Federation Check: The PID/(Q)EAA Provider MUST check that the Wallet Provider is part of the federation.

+
+
+

Note

+

The PID/(Q)EAA Provider MUST validate the signature of the the Wallet Attestation and that it is not expired.

+
+

Step 7 (PAR Response): The PID/(Q)EAA Provider provides a one-time use request_uri value. The issued request_uri value must be bound to the client identifier (client_id) that was provided in the Request Object.

+
+

Note

+

The entropy of the request_uri MUST be sufficiently large. The adequate shortness of the validity and the entropy of the request_uri depends on the risk calculation based on the value of the resource being protected. The validity time SHOULD be less than a minute, and the request_uri MUST include a cryptographic random value of 128 bits or more (RFC 9101). The entire request_uri SHOULD NOT exceed 512 ASCII characters due to the following two main reasons (RFC 9101):

+
+
    +
  1. Many phones on the market still do not accept large payloads. The restriction is typically either 512 or 1024 ASCII characters.

  2. +
  3. On a slow connection such as a 2G mobile connection, a large URL would cause a slow response; therefore, the use of such is not advisable from the user-experience point of view.

  4. +
+
+
+

The PID/(Q)EAA Provider returns the issued request_uri to the Wallet Instance. A non-normative example of the response is shown below.

+
HTTP/1.1 201 Created
+Cache-Control: no-cache, no-store
+Content-Type: application/json
+
+{
+    "request_uri":"urn:ietf:params:oauth:request_uri:bwc4JK-ESC0w8acc191e-Y1LTC2",
+    "expires_in": 60
+}
+
+
+

Steps 8-9 (Authorization Request): The Wallet Instance sends an authorization request to the PID/(Q)EAA Provider Authorization Endpoint. Since parts of this Authorization Request content, e.g., the code_challenge parameter value, are unique to a particular Authorization Request, the Wallet Instance MUST only use a request_uri value once (RFC 9126); The PID/(Q)EAA Provider performs the following checks upon the receipt of the Authorization Request:

+
+
    +
  1. It MUST treat request_uri values as one-time use and MUST reject an expired request. However, it MAY allow for duplicate requests due to a user reloading/refreshing their user-agent (derived from RFC 9126).

  2. +
  3. It MUST identify the request as a result of the submitted PAR (derived from RFC 9126).

  4. +
  5. It MUST reject all the Authorization Requests that do not contain the request_uri parameter as the PAR is the only way to pass the Authorization Request from the Wallet Instance (derived from RFC 9126).

  6. +
+
+
GET /authorize?client_id=$thumprint-of-the-jwk-in-the-cnf-wallet-attestation$&request_uri=urn%3Aietf%3Aparams%3Aoauth%3Arequest_uri%3Abwc4JK-ESC0w8acc191e-Y1LTC2 HTTP/1.1
+Host: pid-provider.example.org
+
+
+
+

Note

+

User Authentication and Consent: The PID Provider performs the User authentication based on the requirements of eIDAS LoA High by means of national notified eIDAS scheme and requires the User consent for the PID issuance. +The (Q)EAA Provider performs the User authentication requesting a valid PID to the Wallet Instance. The (Q)EAA Provider MUST use [OpenID4VP] to dynamically request the presentation of the PID. From a protocol perspective, the (Q)EAA Provider acts as a Relying Party, providing the presentation request to the Wallet Instance. The Wallet Instance MUST have a valid PID obtained prior to start the transaction with the (Q)EAA Provider.

+
+

Steps 10-11 (Authorization Response): The PID/(Q)EAA Provider sends an authorization code together with state and iss parameters to the Wallet Instance. The Wallet Instance performs the following checks on the Authorization Response:

+
+
    +
  1. It MUST check the Authorization Response contains all the defined parameters according to Table of the HTTP Response parameters.

  2. +
  3. It MUST check the returned value by the PID/(Q)EAA Provider for state parameter is equal to the value sent by Wallet Instance in the Request Object (RFC 6749).

  4. +
  5. It MUST check that the URL of PID/(Q)EAA Provider in iss parameter is equal to the URL identifier of intended PID/(Q)EAA Provider that the Wallet Instance start the communication with (RFC 9027).

  6. +
+
+
+

Note

+

The Wallet Instance redirect URI is a universal or app link registered with the local operating system, so this latter will resolve it and pass the response to the Wallet Instance.

+
+
HTTP/1.1 302 Found
+Location: https://start.wallet.example.org?code=SplxlOBeZQQYbYS6WxSbIA&state=fyZiOL9Lf2CeKuNT2JzxiLRDink0uPcd&iss=https%3A%2F%2Fpid-provider.example.org
+
+
+

Steps 12-13 (DPoP Proof for Token Endpoint): The Wallet Instance MUST create a new key pair for the DPoP and a fresh DPoP Proof JWT following the instruction provided in Section 4 of (RFC 9449) for the token request to the PID/(Q)EAA Provider. The DPoP Proof JWT is signed using the private key for DPoP created by Wallet Instance for this scope. DPoP binds the Access Token to a certain Wallet Instance (RFC 9449) and mitigates the misuse of leaked or stolen Access Tokens at the Credential Endpoint.

+

Step 14 (Token Request): The Wallet Instance sends a token request to the PID/(Q)EAA Provider Token Endpoint with a DPoP Proof JWT and the parameters: code, code_verifier, and OAuth 2.0 Attestation based Client Authentication (client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation and client_assertion=WIA~WIA-PoP). +The client_assertion is signed using the private key that is created during the setup phase to obtain the Wallet Attestation. The related public key that is attested by the Wallet Provider is provided within the Wallet Attestation (cnf claim). The PID/(Q)EAA Provider performs the following checks on the Token Request:

+
+
    +
  1. It MUST ensure that the Authorization code is issued to the authenticated Wallet Instance (RFC 6749) and was not replied.

  2. +
  3. It MUST ensure the Authorization code is valid and has not been previously used (RFC 6749).

  4. +
  5. It MUST ensure the redirect_uri matches the value included in the previous Request Object OpenID.Core#TokenRequest.

  6. +
  7. It MUST validate the DPoP Proof JWT, according to (RFC 9449) Section 4.3.

  8. +
+
+
POST /token HTTP/1.1
+Host: pid-provider.example.org
+Content-Type: application/x-www-form-urlencoded
+DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik
+    VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR
+    nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R1JE
+    QSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiItQndDM0VTYzZhY2MybFRjIiwiaHRtIj
+    oiUE9TVCIsImh0dSI6Imh0dHBzOi8vc2VydmVyLmV4YW1wbGUuY29tL3Rva2VuIiwia
+    WF0IjoxNTYyMjYyNjE2fQ.2-GxA6T8lP4vfrg8v-FdWP0A0zdrj8igiMLvqRMUvwnQg
+    4PtFLbdLXiOSsX0x7NVY-FNyJK70nfbV37xRZT3Lg
+
+grant_type=authorization_code
+&code=SplxlOBeZQQYbYS6WxSbIA
+&code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
+&redirect_uri=https://start.wallet.example.org/cb
+&client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation
+&client_assertion=$WIA~WIA-PoP
+
+
+

Step 15 (Token Response): The PID/(Q)EAA Provider validates the request, if successful an Access Token (bound to the DPoP key) and a fresh c_nonce are provided by the Issuer to the Wallet Instance. The parameter c_nonce is a string value, which MUST be unpredictable and is used later by the Wallet Instance in Step 18 to create the proof of possession of the key (proof claim) and it is the primary countermeasure against key proof replay attack. Note that, the received c_nonce value can be used to create the proof as long as the Issuer provides the Wallet Instance with a new c_nonce value.

+
HTTP/1.1 200 OK
+Content-Type: application/json
+Cache-Control: no-store
+
+{
+    "access_token": "Kz~8mXK1EalYznwH-LC-1fBAo.4Ljp~zsPE_NeO.gxU ...",
+    "token_type": "DPoP",
+    "expires_in": 2677,
+    "c_nonce": "tZign[...]snFbp",
+    "c_nonce_expires_in": 86400,
+    "authorization_details": [
+      {
+          "type": "openid_credential",
+          "credential_configuration_id: "PersonIdentificationData"
+          }
+      }
+    ]
+}
+
+
+

Steps 16-17 (DPoP Proof for Credential Endpoint): The Wallet Instance for requesting the Digital Credential creates a proof of possession with c_nonce obtained in Step 15 and using the private key used for the DPoP, signing a DPoP Proof JWT according to (RFC 9449) Section 4. The jwk value in the proof parameter MUST be equal to the public key referenced in the DPoP.

+

Step 18 (Credential Request): The Wallet Instance sends a request for the Digital Credential to the PID/(Q)EAA Credential endpoint. This request MUST include the Access Token, DPoP Proof JWT, credential type, proof (which demonstrates possession of the key), and format parameters. The proof parameter MUST be an object that contains evidence of possession of the cryptographic key material to which the issued PID/(Q)EAA Digital Credential will be bound. To verify the proof, the PID/(Q)EAA Provider conducts the following checks at the Credential endpoint:

+
+
    +
  1. the JWT proof MUST include all required claims as specified in the table of Section Token Request;

  2. +
  3. The key proof MUST be explicitly typed using header parameters as defined for the respective proof type;

  4. +
  5. The header parameter alg MUST indicate a registered asymmetric digital signature algorithm, and MUST NOT be set to none;

  6. +
  7. The signature on the key proof MUST be verified using the public key specified in the header parameter.

  8. +
  9. The header parameter MUST NOT contain a private key.

  10. +
  11. If a c_nonce value was previously provided by the server, the nonce claim in the JWT MUST match this c_nonce value. Furthermore, the creation time of the JWT, as indicated by the iat claim or a server-managed timestamp via the nonce claim, MUST be within an acceptable window of time as determined by the server.

  12. +
+
+
+

Note

+

PID/(Q)EAA Credential Schema and Status registration: The PID/(Q)EAA Provider MUST register all the issued Credentials for their later revocation, if needed.

+
+
POST /credential HTTP/1.1
+Host: pid-provider.example.org
+Content-Type: application/json
+Authorization: DPoP Kz~8mXK1EalYznwH-LC-1fBAo.4Ljp~zsPE_NeO.gxU
+DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik
+    VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR
+    nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R
+    1JEQSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiJlMWozVl9iS2ljOC1MQUVCIiwiaHRtIj
+    oiR0VUIiwiaHR1IjoiaHR0cHM6Ly9yZXNvdXJjZS5leGFtcGxlLm9yZy9wcm90ZWN0Z
+    WRyZXNvdXJjZSIsImlhdCI6MTU2MjI2MjYxOCwiYXRoIjoiZlVIeU8ycjJaM0RaNTNF
+    c05yV0JiMHhXWG9hTnk1OUlpS0NBcWtzbVFFbyJ9.2oW9RP35yRqzhrtNP86L-Ey71E
+    OptxRimPPToA1plemAgR6pxHF8y6-yqyVnmcw6Fy1dqd-jfxSYoMxhAJpLjA
+{
+  "format": "vc+sd-jwt"
+  "credential_definition":{
+    "type": ["PersonIdentificationData"]
+  },
+  "proof": {
+    "proof_type": "jwt",
+    "jwt": "eyJraWQiOiJkaWQ6ZXhhbXBsZTplYm"
+  }
+}
+
+
+

Where a non-normative example of the decoded content of the jwt parameter is represented below, +without encoding and signature. The JWS header:

+
{
+  "alg": "ES256",
+  "typ": "openid4vci-proof+jwt",
+  "jwk": {
+    "kty": "EC",
+    "x": "l8tFrhx-34tV3hRICRDY9zCkDlpBhF42UQUfWVAWBFs",
+    "y": "9VE4jf_Ok_o64zbTTlcuNJajHmt6v9TDVrU0CdvGRDA",
+    "crv": "P-256"
+  }
+
+}
+
+
+

And the JWS payload:

+
{
+    "iss": "0b434530-e151-4c40-98b7-74c75a5ef760",
+    "aud": "https://pid-provider.example.org/credential",
+    "iat": 1504699136,
+    "nonce": "tZign...snFbp"
+}
+
+
+

Steps 19-21 (Credential Response): The PID/(Q)EAA Provider MUST validate the DPoP JWT Proof based on the steps defined in Section 4.3 of (RFC 9449) and whether the Access Token is valid and suitable for the requested PID/(Q)EAA. It also MUST validate the proof of possession for the key material the new credential SHALL be bound to, according to OPENID4VCI Section 7.2.2. If all checks succeed, the PID/(Q)EAA Provider creates a new Credential bound to the key material and provide it to the Wallet Instance. The Wallet Instance MUST perform the following checks before proceeding with the secure storage of the PID/(Q)EAA:

+
+
    +
  1. It MUST check that the PID Credential Response contains all the mandatory parameters and values are validated according to Table of the credential response parameters.

  2. +
  3. It MUST check the PID integrity by verifying the signature using the algorithm specified in the alg header parameter of SD-JWT (PID/(Q)EAA Data Model) and the public key that is identified using using the kid header of the SD-JWT.

  4. +
  5. It MUST check that the received PID (in credential claim) matches the schema defined in PID/(Q)EAA Data Model.

  6. +
  7. It MUST process and verify the PID in SD-JWT VC format (according to SD.JWT#Verification Section 6.) or MDOC CBOR format.

  8. +
  9. It MUST verify the Trust Chain in the header of SD-JWT VC to verify that the PID Provider is trusted.

  10. +
+
+

If the checks defined above are successful the Wallet Instance proceeds with the secure storage of the PID/(Q)EAA.

+
HTTP/1.1 200 OK
+Content-Type: application/json
+Cache-Control: no-store
+Pragma: no-cache
+
+{
+    "format": "vc+sd-jwt"
+    "credential" : "LUpixVCWJk0eOt4CXQe1NXK[...]WZwmhmn9OQp6YxX0a2L",
+    "c_nonce": "fGFF7[...]UkhLa",
+    "c_nonce_expires_in": 86400
+}
+
+
+
+
+

Pushed Authorization Request Endpoint

+
+

Pushed Authorization Request (PAR) Request

+

The requests to the PID/(Q)EAA authorization endpoint MUST use the HTTP POST method with the parameters in the message body encoded in application/x-www-form-urlencoded format. The Pushed Authorization Endpoint is protected with OAuth 2.0 Attestation-based Client Authentication [oauth-attestation-draft] and the following parameters MUST be provided:

+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1 PAR http request parameters

Claim

Description

Reference

response_type

MUST be set to code.

RFC 6749

client_id

MUST be set to the thumbprint of the jwk value in the cnf parameter inside the Wallet Attestation.

RFC 6749

code_challenge

A challenge derived from the code verifier that is sent in the authorization request.

RFC 7636#section-4.2.

code_challenge_method

A method that was used to derive code challenge. It MUST be set to S256.

RFC 7636#section-4.3.

request

It MUST be a signed JWT. The private key corresponding to the public one in the cnf parameter inside the Wallet Attestation MUST be used for signing the Request Object.

OpenID Connect Core. Section 6

client_assertion_type

It MUST be set to urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation.

oauth-attestation-draft.

client_assertion

It MUST be set to a value containing the Wallet Attestation JWT and the Proof of Possession, separated with the ~ character.

oauth-attestation-draft.

+

The JWT Request Object has the following JOSE header parameters:

+ +++++ + + + + + + + + + + + + + + + + +

JOSE header

Description

Reference

alg

A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms listed in the Section Cryptographic Algorithms and MUST NOT be set to none or any symmetric algorithm (MAC) identifier.

RFC 7516#section-4.1.1.

kid

Unique identifier of the jwk inside the cnf claim of Wallet Attestation as base64url-encoded JWK Thumbprint value.

RFC 7638#section_3.

+
+

Note

+

The parameter typ, if omitted, assumes the implicit value JWT.

+
+

The JWT payload is given by the following parameters:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

iss

It MUST be set to the client_id.

RFC 9126 and RFC 7519.

aud

It MUST be set to the identifier of the PID/(Q)EAA Provider.

RFC 9126 and RFC 7519.

exp

UNIX Timestamp with the expiry time of the JWT.

RFC 9126 and RFC 7519.

iat

UNIX Timestamp with the time of JWT issuance.

RFC 9126 and RFC 7519.

response_type

It MUST be set as in the Table of the HTTP parameters.

See Table of the HTTP parameters.

client_id

It MUST be set as in the Table of the HTTP parameters.

See Table of the HTTP parameters.

state

Unique session identifier at the client side. This value will be returned to the client in the response, at the end of the authentication. It MUST be a random string composed by alphanumeric characters and with a minimum length of 32 digits.

See OpenID.Core#AuthRequest.

code_challenge

It MUST be set as in the Table of the HTTP parameters.

See Table of the HTTP parameters.

code_challenge_method

It MUST be set as in the Table of the HTTP parameters.

See Table of the HTTP parameters.

authorization_details

Array of JSON Objects. Each JSON Object MUST include the following claims:

+
+
    +
  • type: it MUST be set to openid_credential,

  • +
  • credential_configuration_id: JSON String. String specifying a unique identifier of the Credential being described in the credential_configurations_supported map in the Credential Issuer Metadata. For example, in the case of the PID, it MUST be set to PersonIdentificationData.

  • +
+
+

See [RAR RFC 9396] and [OIDC4VCI. Draft 13].

redirect_uri

Redirection URI to which the response is intended to be sent. It MUST be an universal or app link registered with the local operating system, so this latter will provide the response to the Wallet Instance.

See OpenID.Core#AuthRequest.

client_assertion_type

It MUST be set as in the Table of the HTTP parameters.

See Table of the HTTP parameters.

client_assertion

It MUST be set as in the Table of the HTTP parameters.

See Table of the HTTP parameters.

jti

Unique identifier of the JWT that, together with the value contained in the iss claim, prevents the reuse of the JWT (replay attack). Since the jti value alone is not collision resistant, it MUST be identified uniquely together with its issuer.

[RFC 7519].

+

The JOSE header of the Wallet Attestation proof of possession MUST contain:

+ +++++ + + + + + + + + + + + + + + + + + + + + +

JOSE header

Description

Reference

alg

A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms listed in the Section Cryptographic Algorithms and MUST NOT be set to none or any symmetric algorithm (MAC) identifier.

RFC 7516#section-4.1.1.

kid

Unique identifier of the jwk inside the cnf claim of Wallet Attestation as base64url-encoded JWK Thumbprint value.

RFC 7638#section_3.

typ

It MUST be set to jwt-client-attestation-pop

Currently under discussion in [oauth-attestation-draft].

+

The body of the Wallet Attestation proof of possession JWT MUST contain:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

iss

Thumbprint of the JWK in the cnf parameter.

RFC 9126 and RFC 7519.

aud

It MUST be set to the identifier of the PID/(Q)EAA Provider.

RFC 9126 and RFC 7519.

exp

UNIX Timestamp with the expiry time of the JWT.

RFC 9126 and RFC 7519.

iat

UNIX Timestamp with the time of JWT issuance.

RFC 9126 and RFC 7519.

jti

Unique identifier for the DPoP proof JWT. The value SHOULD be set using a UUID v4 value according to [RFC 4122].

[RFC 7519. Section 4.1.7].

+
+
+

Pushed Authorization Request (PAR) Response

+

If the verification is successful, the PID/(Q)EAA Issuer MUST provide the response with a 201 HTTP status code. The following parameters are included as top-level members in the HTTP response message body, using the application/json media type as defined in [RFC 8259].

+ +++++ + + + + + + + + + + + + + + + + +

Claim

Description

Reference

request_uri

The request URI corresponding to the authorization request posted. This URI MUST be a single-use reference to the respective authorization request. It MUST contain some part generated using a cryptographically strong pseudorandom algorithm. The value format MUST be urn:ietf:params:oauth:request_uri:<reference-value> with <reference-value> as the random part of the URI that references the respective authorization request data.

[RFC 9126].

expires_in

A JSON number that represents the lifetime of the request URI in seconds as a positive integer.

[RFC 9126].

+
+
+
+

Authorization endpoint

+

The authorization endpoint is used to interact with the PID/(Q)EAA Issuer and obtain an authorization grant. +The authorization server MUST first verify the identity of the User that own the credential.

+
+

Authorization Request

+

The Authorization request is issued by the Web Browser in use by the Wallet Instance, the HTTP methods POST or GET are used. When the method POST is used, the parameters MUST be sent using the Form Serialization. When the method GET is used, the parameters MUST be sent using the Query String Serialization. For more details see OpenID.Core#Serializations.

+

The mandatory parameters in the HTTP authentication request are specified in the following table.

+ +++++ + + + + + + + + + + + + + + + + +

Claim

Description

Reference

client_id

It MUST be set as in the Table of the HTTP parameters.

See Table of the HTTP parameters.

request_uri

It MUST be set to the same value as obtained by PAR Response. See Table of the HTTP PAR Response parameters.

[RFC 9126].

+
+
+

Authorization Response

+

The authentication response is returned by the PID/(Q)EAA authorization endpoint at the end of the authentication flow.

+

If the authentication is successful the PID/(Q)EAA Issuer redirects the User by adding the following query parameters as required to the redirect_uri. The redirect URI MUST be an universal or app link registered with the local operating system, so this latter is able to provide the response to the Wallet Instance.

+ +++++ + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

code

Unique Authorization Code that the Wallet Instance submits to the Token Endpoint.

[RFC 6749#section-4.1.2], Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants

state

The Wallet Instance MUST check the correspondence with the state parameter value in the Request Object. It is defined as in the Table of the JWT Request parameters.

[RFC 6749#section-4.1.2].

iss

Unique identifier of the PID/(Q)EAA Issuer who created the Authentication Response. The Wallet Instance MUST validate this parameter.

OAuth 2.0 Authorization Server Issuer Identifier in Authorization Response, [RFC7519, Section 4.1.1].

+
+
+
+

Token endpoint

+

The token endpoint is used by the Wallet Instance to obtain an Access Token by presenting an authorization grant, as +defined in RFC 6749. The Token Endpoint is a protected endpoint with a client authentication based on the model defined in OAuth 2.0 Attestation-based Client Authentication [oauth-attestation-draft].

+
+

Token Request

+

The request to the PID/(Q)EAA Token endpoint MUST be an HTTP request with method POST, with the body message encoded in application/x-www-form-urlencoded format. The Wallet Instance sends the Token endpoint request with client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation and client_assertion=WIA~WIA-PoP.

+

The Token endpoint MUST accept and validate the DPoP proof sent in the DPoP HTTP header. The Token endpoint MUST validate the DPoP proof according to Section 4.3 of the DPoP specifications (RFC 9449). This mitigates the misuse of leaked or stolen Access Tokens at the credential endpoint. If the DPoP proof is invalid, the Token endpoint returns an error response, according to Section 5.2 of [RFC 6749] with invalid_dpop_proof as the value of the error parameter.

+

All the parameters listed below are REQUIRED:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

grant_type

It MUST be set to authorization_code.

Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants.

code

Authorization code returned in the Authentication Response.

Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants.

redirect_uri

It MUST be set as in the Request Object Table of the JWT Request parameters.

Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants.

code_verifier

Verification code of the code_challenge.

Proof Key for Code Exchange by OAuth Public Clients.

client_assertion_type

It MUST be set to urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation.

oauth-attestation-draft.

client_assertion

It MUST be set to a value containing the Wallet Attestation JWT and the Proof of Possession JWT, separated with the ~ character (WIA~WIA-PoP). The Wallet Attestation Proof of Possession MUST contain the claims as defined in Table of the JWT Wallet Attestation PoP, Section Pushed Authorization Request (PAR) Response.

oauth-attestation-draft.

+

A DPoP Proof JWT is included in the HTTP request using the DPoP header parameter containing a DPoP JWS.

+

The JOSE header of a DPoP JWT MUST contain at least the following parameters:

+ +++++ + + + + + + + + + + + + + + + + + + + + +

JOSE header

Description

Reference

typ

It MUST be equal to dpop+jwt.

[RFC 7515] and [RFC 8725. Section 3.11].

alg

A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms in Section Cryptographic Algorithms and MUST NOT be set to none or with a symmetric algorithm (MAC) identifier.

[RFC 7515].

jwk

It represents the public key chosen by the Wallet Instance, in JSON Web Key (JWK) [RFC 7517] format that the Access Token MUST be bound to, as defined in [RFC 7515] Section 4.1.3. It MUST NOT contain a private key.

[RFC 7517] and [RFC 7515].

+

The payload of a DPoP JWT Proof MUST contain at least the following claims:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

jti

Unique identifier for the DPoP proof JWT. The value SHOULD be set using a UUID v4 value according to [RFC 4122].

[RFC 7519. Section 4.1.7].

htm

The value of the HTTP method of the request to which the JWT is attached.

[RFC 9110. Section 9.1].

htu

The HTTP target URI, without query and fragment parts, of the request to which the JWT is attached.

[RFC 9110. Section 7.1].

iat

UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in RFC 7519.

[RFC 7519. Section 4.1.6].

+
+
+

Token Response

+

Token endpoint response MUST contain the following mandatory claims.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

access_token

The DPoP-bound Access Token, in signed JWT format, allows accessing the PID/(Q)EAA Credential Endpoint for obtaining the credential.

RFC 6749.

token_type

Type of Access Token returned. It MUST be equal to DPoP.

RFC 6749.

expires_in

Expiry time of the Access Token in seconds.

RFC 6749.

c_nonce

JSON string containing a nonce value to be used to create a proof of possession of key material when requesting a Credential.

[OIDC4VCI. Draft 13].

c_nonce_expires_in

JSON integer, it represents the lifetime in seconds of the c_nonce.

[OIDC4VCI. Draft 13].

authorization_details

JSON object, used to identify Credentials with the same metadata but different claimset/claim values and/or simplify the Credential request even when only one Credential is being issued.

[OIDC4VCI. Draft 13].

+
+
+

Access Token

+

A DPoP-bound Access Token is provided by the PID/(Q)EAA Token endpoint as a result of a successful token request. The Access Token is encoded in JWT format, according to [RFC 7519]. The Access Token MUST have at least the following mandatory claims and it MUST be bound to the public key that is provided by the DPoP proof. This binding can be accomplished based on the methodology defined in Section 6 of (RFC 9449).

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

iss

It MUST be an HTTPS URL that uniquely identifies the PID/(Q)EAA Issuer. The Wallet Instance MUST verify that this value matches the PID/(Q)EAA Issuer where it has requested the credential.

[RFC 9068], [RFC7519, Section 4.1.1].

sub

It identifies the subject of the JWT. It MUST be set to the value of the sub field in the PID/(Q)EAA SD-JWT-VC.

[RFC 9068], [RFC 7519] and [OpenID.Core#SubjectIDTypes].

aud

It MUST be set to the URL of Credential Endpoint of the PID/(Q)EAA Provider.

[RFC 9068].

iat

UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in RFC 7519.

[RFC 9068], [RFC 7519. Section 4.1.6].

exp

UNIX Timestamp with the expiry time of the JWT, coded as NumericDate as indicated in RFC 7519.

[RFC 9068], [RFC 7519].

jti

It MUST be a String in uuid4 format. Unique Token ID identifier that the RP MAY use to prevent reuse by rejecting the Token ID if already processed.

[RFC 9068], [RFC 7519].

jkt

JWK SHA-256 Thumbprint Confirmation Method. The value of the jkt member MUST be the base64url encoding (as defined in [RFC7515]) of the JWK SHA-256 Thumbprint of the DPoP public key (in JWK format) to which the Access Token is bound.

[RFC 9449. Section 6.1] and [RFC 7638].

+
+
+
+

Credential endpoint

+

The Credential Endpoint issues a Credential upon the presentation of a valid Access Token, as defined in OPENID4VCI.

+
+

Credential Request

+

The Wallet Instance when requests the PID/(Q)EAA to the PID/(Q)EAA Credential endpoint, MUST use the following parameters in the message body of the HTTP POST request, using the application/json media type.

+

The Credential endpoint MUST accept and validate the DPoP proof sent in the DPoP HTTP Header parameter, according to the steps defined in (RFC 9449) Section 4.3. The DPoP proof in addition to the values that are defined in the Token Endpoint section MUST contain the following claim:

+
+
    +
  • ath: hash value of the Access Token encoded in ASCII. The value MUST use the base64url encoding (as defined in Section 2 of RFC 7515) with the SHA-256 algorithm.

  • +
+
+

If the DPoP proof is invalid, the Credential endpoint returns an error response per Section 5.2 of [RFC 6749] with invalid_dpop_proof as the value of the error parameter.

+
+

Warning

+

The Wallet Instance MUST create a new DPoP proof for the Credential request and MUST NOT use the previously created proof for the Token Endpoint.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

credential_definition

JSON object containing the detailed description of the Credential type. It MUST have at least the type sub claims which is a JSON array containing the type values the Wallet SHALL request in the Credential Request. It MUST be set in accordance to the type of the requested PID/(Q)EAA that is obtained from the PID/(Q)EAA Issuer metadata. In the case of the PID it MUST be set to PersonIdentificationData.

[OIDC4VCI. Draft 13].

format

Format of the Credential to be issued. This MUST be vc+sd-jwt.

[OIDC4VCI. Draft 13].

proof

JSON object containing proof of possession of the key material the issued credential shall be bound to. The proof object MUST contain the following mandatory claims:

+
    +
  • proof_type: JSON string denoting the proof type. It MUST be jwt.

  • +
  • jwt: the JWT used as proof of possession.

  • +
+

[OIDC4VCI. Draft 13].

+
+

Note

+

If the format value is mso_mdoc, the credential request MUST contain the doctype claim which is a JSON string identifying the credential type according to EIDAS-ARF . See Appendix E.2. of [OIDC4VCI. Draft 13] for more details.

+
+

The JWT proof type MUST contain the following parameters for the JOSE header and the JWT body:

+ +++++ + + + + + + + + + + + + + + + + + + + + +

JOSE Header

Description

Reference

alg

A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms in Section Cryptographic Algorithms and MUST NOT be set to none or to a symmetric algorithm (MAC) identifier.

[OIDC4VCI. Draft 13], [RFC 7515], [RFC 7517].

typ

It MUST be set to openid4vci-proof+jwt.

[OIDC4VCI. Draft 13], [RFC 7515], [RFC 7517].

jwk

Representing the public key chosen by the Wallet Instance, in JSON Web Key (JWK) [RFC 7517] format that the PID/(Q)EAA shall be bound to, as defined in Section 4.1.3 of [RFC 7515]. The jwk value MUST be equal to the same public key that is generated for the DPoP.

[OIDC4VCI. Draft 13], [RFC 7515], [RFC 7517].

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

iss

The value of this claim MUST be the client_id of the Wallet Instance.

[OIDC4VCI. Draft 13], [RFC7519, Section 4.1.1].

aud

The value of this claim MUST be the identifier URL of the PID/(Q)EAA Issuer.

[OIDC4VCI. Draft 13].

iat

UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in RFC 7519.

[OIDC4VCI. Draft 13], [RFC 7519. Section 4.1.6].

nonce

The value type of this claim MUST be a string, where the value is a c_nonce provided by the PID/(Q)EAA Issuer in the Token response.

[OIDC4VCI. Draft 13].

+
+
+

Credential Response

+

Credential Response to the Wallet Instance MUST be sent using application/json media type. The response MUST contain the following mandatory claims:

+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Credential http response parameters

Claim

Description

Reference

format

Format of the Credential to be issued. This MUST be set to vc+sd-jwt when the credential type is SD-JWT.

[OIDC4VCI. Draft 13].

credential

Contains the issued PID/(Q)EAA. When the credential type is SD-JWT, it MUST be an SD-JWT JSON Object (see Section PID/(Q)EAA Data Model).

Appendix E in [OIDC4VCI. Draft 13].

c_nonce

JSON string containing a nonce value to be used to create a proof of possession of the key material when requesting a further Credential or for the renewal of a credential.

[OIDC4VCI. Draft 13].

c_nonce_expires_in

JSON integer corresponding to the c_nonce lifetime in seconds.

[OIDC4VCI. Draft 13].

+
+

Note

+

If the format value is mso_mdoc, the credential value MUST be a base64url-encoded JSON string according to Appendix E of [OIDC4VCI. Draft 13].

+
+
+
+

Entity Configuration Credential Issuer

+

Below is a non-normative example of an Entity Configuration containing an openid_credential_issuer metadata.

+
HTTP/1.1 200 OK
+Content-Type: application/entity-statement+jwt
+
+{
+
+  "alg": "RS256",
+  "kid": "FANFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs",
+  "typ": "entity-statement+jwt"
+
+}
+.
+{
+  "exp": "1649610249",
+  "iat": "1649437449",
+  "iss": "https://pid-provider.example.org",
+  "sub": "https://pid-provider.example.org",
+  "jwks": {
+    "keys": [{
+      "kty": "RSA",
+      "use": "sig",
+      "n": "1Ta-sE ...",
+      "e": "AQAB",
+      "kid": "FANFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs"
+    }]
+  },
+  "authority_hints": ["https://superior-entity.example.org/federation"],
+  "metadata": {
+    "openid_credential_issuer": {
+      "credential_issuer": "https://pid-provider.example.org",
+      "authorization_servers": ["https://pid-provider.example.org"],
+      "authorization_endpoint": "https://pid-provider.example.org/connect/authorize",
+      "token_endpoint": "https://pid-provider.example.org/connect/token",
+      "pushed_authorization_request_endpoint": "https://pid-provider.example.org/connect/par",
+      "dpop_signing_alg_values_supported": ["RS256", "RS512", "ES256", "ES512"],
+      "credential_endpoint": "https://pid-provider.example.org/credential",
+      "display": [
+        {
+          "name": "PID Provider Italiano di esempio",
+          "locale": "it-IT"
+        },
+        {
+          "name": "Example PID Provider",
+          "locale": "en-US",
+          "logo": {
+             "url": "https://pid-provider example.org/public/logo.svg",
+             "alt_text": "logo di questo PID Provider"
+          },
+        }
+      ],
+      "jwks": {
+         "keys": [
+           {
+            "crv": "P-256",
+            "kty": "EC",
+            "x": "newK5qDYMekrCPPO-yEYTdJVWJMTzasMavt2vm1Mb-A",
+            "y": "VizXaLO6dzeesZPxfpGZabTK3cTXtBUbIiQpmiYRtSE",
+            "kid": "ff0bded045fe63fe5d1d64dd83b567e0"
+           }
+         ]
+      },
+      "credential_configurations_supported": [
+        {
+          "format": "vc+sd-jwt",
+          "cryptographic_binding_methods_supported": ["jwk"],
+          "credential_signing_alg_values_supported": ["ES256", "ES384", "ES512"],
+          "proof_types_supported": {
+            "jwt": {
+                "proof_signing_alg_values_supported": [
+                    "ES256"
+                ]
+            }
+          },
+          "display": [{
+              "name": "PID Italiano di esempio",
+              "locale": "it-IT",
+              "logo": {
+                "url": "https://pid-provider example.org/public/logo.svg",
+                "alt_text": "logo di questa Credenziale"
+              },
+              "background_color": "#12107c",
+              "text_color": "#FFFFFF"
+            },
+            {
+              "name": "Example Italian PID",
+              "locale": "en-US",
+              "logo": {
+                "url": "https://pid-provider.example.org/public/logo.svg",
+                "alt_text": "The logo of this credential"
+              },
+              "background_color": "#12107c",
+              "text_color": "#FFFFFF"
+            }
+          ],
+          "credential_definition": {
+            "type": ["PersonIdentificationData"],
+            "credentialSubject": {
+              "given_name": {
+                "mandatory": true,
+                "display": [{
+                    "name": "Current First Name",
+                    "locale": "en-US"
+                  },
+                  {
+                    "name": "Nome",
+                    "locale": "it-IT"
+                  }
+                ]
+              },
+              "family_name": {
+                "mandatory": true,
+                "display": [{
+                    "name": "Current Family Name",
+                    "locale": "en-US"
+                  },
+                  {
+                    "name": "Cognome",
+                    "locale": "it-IT"
+                  }
+                ]
+              },
+              "birthdate": {
+                "mandatory": true,
+                "display": [{
+                    "name": "Date of Birth",
+                    "locale": "en-US"
+                  },
+                  {
+                    "name": "Data di Nascita",
+                    "locale": "it-IT"
+                  }
+                ]
+              },
+              "place_of_birth": {
+                "mandatory": true,
+                "display": [{
+                    "name": "Place of Birth",
+                    "locale": "en-US"
+                  },
+                  {
+                    "name": "Luogo di Nascita",
+                    "locale": "it-IT"
+                  }
+                ]
+              },
+              "unique_id": {
+                "mandatory": true,
+                "display": [{
+                    "name": "Unique Identifier",
+                    "locale": "en-US"
+                  },
+                  {
+                    "name": "Identificativo univoco",
+                    "locale": "it-IT"
+                  }
+                ]
+              },
+              "tax_id_code": {
+                "mandatory": true,
+                "display": [{
+                    "name": "Tax Id Number",
+                    "locale": "en-US"
+                  },
+                  {
+                    "name": "Codice Fiscale",
+                    "locale": "it-IT"
+                  }
+                ]
+              }
+            }
+          }
+        }
+      }
+    },
+
+    "federation_entity": {
+      "organization_name": "PID Provider Organization Example",
+      "homepage_uri": "https://pid-provider.example.org",
+      "policy_uri": "https://pid-provider.example.org/privacy_policy",
+      "tos_uri": "https://pid-provider.example.org/info_policy",
+      "logo_uri": "https://pid-provider.example.org/logo.svg"
+    },
+
+    "openid_relying_party": {
+      <This is the metadata of the PID Provider acting as a Relying Party in the national digital identity framework (CIE/SPID). See spid-cie-oidc-docs for details.>
+    }
+  }
+}
+
+
+
+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/en/proximity-flow.html b/refs/pull/212/merge/en/proximity-flow.html new file mode 100644 index 000000000..79dd16264 --- /dev/null +++ b/refs/pull/212/merge/en/proximity-flow.html @@ -0,0 +1,1816 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Proximity Flow + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + +
+

Proximity Flow

+

This section describes how a Verifier requests the presentation of an mDoc-CBOR Credential to a Wallet Instance according to the ISO 18013-5 Specification. Only Supervised Device Retrieval flow is supported in this technical implementation profile.

+

The presentation phase is divided into three sub-phases:

+
+

1. Device Engagement: This subphase begins when the User is prompted to disclose certain attributes from the mDoc(s). The objective of this subphase is to establish a secure communication channel between the Wallet Instance and the Verifier App, so that the mDoc requests and responses can be exchanged during the communication subphase. +The messages exchanged in this subphase are transmitted through short-range technologies to limit the possibility of interception and eavesdropping. +This technical implementation profile exclusively supports QR code for Device Engagement.

+

2. Session establishment: During the session establishment phase, the Verifier App sets up a secure connection. All data transmitted over this connection is encrypted using a session key, which is known to both the Wallet Instance and the Verifier at this stage. +The established session MAY be terminated based on the conditions as detailed in [ISO18013-5#9.1.1.4].

+

3. Communication - Device Retrieval: The Verifier App encrypts the mDoc request with the appropriate session key and sends it to the Wallet Instance together with its public key in a session establishment message. The mDoc uses the data from the session establishment message to derive the session key and decrypt the mDoc request. +During the communication subphase, the Verifier App has the option to request information from the Wallet using mDoc requests and responses. The primary mode of communication is the secure channel established during the session setup. The Wallet Instance encrypts the mDoc response using the session key and transmits it to the Verifier App via a session data message. This technical implementation profile only supports Bluetooth Low Energy (BLE) for the communication sub-phase.

+
+

The following figure illustrates the flow diagram compliant with ISO 18013-5 for proximity flow.

+
+_images/High-Level-Flow-ITWallet-Presentation-ISO.svg +
+

High-Level Proximity Flow

+
+
+

Step 1-3: The Verifier requests the User to reveal certain attributes from their mDoc(s) stored in the Wallet Instance. The User initiates the Wallet Instance. The Wallet Instance MUST create a new temporary key pair (EDeviceKey.Priv, EDeviceKey.Pub), and incorporate the cipher suite identifier, the identifier of the elliptic curve for key agreement, and the EDeviceKey public point into the device engagement structure (refer to [ISO18013-5#9.1.1.4]). This key pair is temporary and MUST be invalidated immediately after the secure channel is established. Finally, the Wallet Instance displays the QR Code for Device Engagement.

+

Below an example of a device engagement structure that utilizes QR for device engagement and Bluetooth Low Energy (BLE) for data retrieval.

+

CBOR data:

+
a30063312e30018201d818584ba4010220012158205a88d182bce5f42efa59943f33359d2e8a968ff289d93e5fa444b624343167fe225820b16e8cf858ddc7690407ba61d4c338237a8cfcf3de6aa672fc60a557aa32fc670281830201a300f401f50b5045efef742b2c4837a9a3b0e1d05a6917
+
+
+

In diagnostic notation:

+
{
+  0: "1.0", % Version
+
+  1:        % Security
+  [
+      1,     % defines the cipher suite 1 which contains only EC curves
+      24(<<  % embedded CBOR data item
+        {
+          1: 2, % kty:EC2 (Elliptic curves with x and y coordinate pairs)
+        -1: 1, % crv:p256
+-2:h'5A88D182BCE5F42EFA59943F33359D2E8A968FF289D93E5FA444B624343  167FE',% x-coordinate
+-3:h'B16E8CF858DDC7690407BA61D4C338237A8CFCF3DE6AA672FC60A557AA32FC67' % y-coordinate
+        }
+      >>)
+    ],
+
+    2: %DeviceRetrievalMethods(Device engagement using QR code)
+    [
+      [
+        2, %BLE
+        1, % Version
+      {    %BLE options
+          0: false, % no support for mdoc peripheral server mode
+          1: true, % support mdoc central client mode
+          11: h'45EFEF742B2C4837A9A3B0E1D05A6917' % UUID of mdoc client central mode
+        }
+      ]
+    ]
+}
+
+
+

Step 4-6: The Verifier App scans the QR Code and generates its own ephemeral key pair (EReaderKey.Priv, EReaderKey.Pub). It then calculates the session key, using the public key received in the Engagement Structure and its newly-generated private key, as outlined in [ISO18013-5#9.1.1.5]. Finally, it generates its session key, which must be independently derived by both the Wallet Instance and the Verifier App.

+

Step 7: The Verifier App creates an mDoc request that MUST be encrypted using the relevant session key, and transmits it to the Wallet Instance along with EReaderKey.Pub within a session establishment message. The mDoc request MUST be encoded in CBOR, as demonstrated in the following non-normative example.

+

CBOR data: +.. code-block:

+
a26776657273696f6e63312e306b646f63526571756573747381a26c6974656d7352657175657374d818590152a267646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6a6e616d65537061636573a2746f72672e69736f2e31383031332e352e312e4954a375766572696669636174696f6e2e65766964656e6365f4781c766572696669636174696f6e2e6173737572616e63655f6c6576656cf4781c766572696669636174696f6e2e74727573745f6672616d65776f726bf4716f72672e69736f2e31383031332e352e31ab76756e5f64697374696e6775697368696e675f7369676ef47264726976696e675f70726976696c65676573f46f646f63756d656e745f6e756d626572f46a69737375655f64617465f46f69737375696e675f636f756e747279f47169737375696e675f617574686f72697479f46a62697274685f64617465f46b6578706972795f64617465f46a676976656e5f6e616d65f468706f727472616974f46b66616d696c795f6e616d65f46a726561646572417574688443a10126a11821590129308201253081cda00302010202012a300a06082a8648ce3d0403023020311e301c06035504030c15536f6d652052656164657220417574686f72697479301e170d3233313132343130323832325a170d3238313132323130323832325a301a3118301606035504030c0f536f6d6520526561646572204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004aa1092fb59e26ddd182cfdbc85f1aa8217a4f0fae6a6a5536b57c5ef7be2fb6d0dfd319839e6c24d087cd26499ec4f87c8c766200ba4c6218c74de50cd1243b1300a06082a8648ce3d0403020347003044022048466e92226e042add073b8cdc43df5a19401e1d95ab226e142947e435af9db30220043af7a8e7d31646a424e02ea0c853ec9c293791f930bf589bee557370a4c97bf6584058a0d421a7e53b7db0412a196fea50ca6d4c8a530a47dd84d88588ab145374bd0ab2a724cf2ed2facf32c7184591c5969efd53f5aba63194105440bc1904e1b9
+
+
+

The above CBOR data is represented in diagnostic notation as follows: +.. code-block:

+
{
+  "version": "1.0",
+  "docRequests": [
+  {
+    "itemsRequest": 24(<< {
+      "docType": "org.iso.18013.5.1.mDL",
+      "nameSpaces": {
+        "org.iso.18013.5.1.IT": {
+          "verification.evidence": false,
+          "verification.assurance_level": false,
+          "verification.trust_framework": false
+        },
+        "org.iso.18013.5.1": {
+          "un_distinguishing_sign": false,
+          "driving_privileges": false,
+          "document_number": false,
+          "issue_date": false,
+          "issuing_country": false,
+          "issuing_authority": false,
+          "birth_date": false,
+          "expiry_date": false,
+          "given_name": false,
+          "portrait": false,
+          "family_name": false
+        }
+      }
+    } >>),
+    "readerAuth": [
+      h'a10126',
+      {
+        33: h'308201253081cda00302010202012a300a06082a8648ce3d0403023020311e301c06035504030c15536f6d652052656164657220417574686f72697479301e170d3233313132343130323832325a170d3238313132323130323832325a301a3118301606035504030c0f536f6d6520526561646572204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004aa1092fb59e26ddd182cfdbc85f1aa8217a4f0fae6a6a5536b57c5ef7be2fb6d0dfd319839e6c24d087cd26499ec4f87c8c766200ba4c6218c74de50cd1243b1300a06082a8648ce3d0403020347003044022048466e92226e042add073b8cdc43df5a19401e1d95ab226e142947e435af9db30220043af7a8e7d31646a424e02ea0c853ec9c293791f930bf589bee557370a4c97b'
+      },
+      null,
+      h'58a0d421a7e53b7db0412a196fea50ca6d4c8a530a47dd84d88588ab145374bd0ab2a724cf2ed2facf32c7184591c5969efd53f5aba63194105440bc1904e1b9'
+    ]
+  }
+  ]
+}
+
+
+

Step 8: The Wallet Instance uses the session establishment message to derive the session keys and decrypt the mDoc request. It computes the session key using the public key received from the Verifier App and its private key.

+

Step 9-10: When the Wallet Instance receives the mDoc request, it locates the documents that contain the requested attributes and asks the User for permission to provide this information to the Verifier. If the User agrees, the Wallet generates an mDoc response and transmits it to the Verifier App through the secure channel.

+

Step 11-12: If the User gives consent, the Wallet Instance creates an mDoc response and transmits it to the Verifier App via the secure channel. The mDoc response MUST be encoded in CBOR, with its structure outlined in [ISO18013-5#8.3.2.1.2.2]. Below is a non-normative example of an mDoc response.

+

CBOR Data: +.. code-block:

+
a36776657273696f6e63312e3069646f63756d656e747381a367646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6c6973737565725369676e6564a26a6e616d65537061636573a2746f72672e69736f2e31383031332e352e312e495483d81858f7a46864696765737449440b6672616e646f6d506d44f21ee875f2c1d502b43198e5a15271656c656d656e744964656e74696669657275766572696669636174696f6e2e65766964656e63656c656c656d656e7456616c756581a2647479706571656c656374726f6e69635f7265636f7264667265636f7264bf6474797065781f68747470733a2f2f657564692e77616c6c65742e70646e642e676f762e697466736f75726365bf716f7267616e697a6174696f6e5f6e616d65754d6f746f72697a7a617a696f6e6520436976696c656f6f7267616e697a6174696f6e5f6964656d5f696e666c636f756e7472795f636f6465626974ffffd8185866a4686469676573744944046672616e646f6d50185d84dfb71ce9b173010ddd62174fbe71656c656d656e744964656e746966696572781c766572696669636174696f6e2e74727573745f6672616d65776f726b6c656c656d656e7456616c7565656569646173d8185865a4686469676573744944006672616e646f6d50137f903174253c4585358267aae2ea4e71656c656d656e744964656e746966696572781c766572696669636174696f6e2e6173737572616e63655f6c6576656c6c656c656d656e7456616c75656468696768716f72672e69736f2e31383031332e352e318bd8185852a46864696765737449440c6672616e646f6d5053e29d0ddbbc7d2306a32bdbe2e56e5171656c656d656e744964656e7469666965726b66616d696c795f6e616d656c656c656d656e7456616c756563446f65d8185855a4686469676573744944036672616e646f6d50990cba2069fa1b33b8d6ae910b6549dc71656c656d656e744964656e7469666965726a676976656e5f6e616d656c656c656d656e7456616c756567416e746f6e696fd818585ba46864696765737449440a6672616e646f6d504086c1379975f805f1b1f4975e6a126571656c656d656e744964656e7469666965726a69737375655f646174656c656c656d656e7456616c7565d903ec6a323031392d31302d3230d818585ca4686469676573744944016672616e646f6d50ab4ca30c918dd2fd0bf35242c15fa2d871656c656d656e744964656e7469666965726b6578706972795f646174656c656c656d656e7456616c7565d903ec6a323032342d31302d3230d8185855a4686469676573744944076672616e646f6d508d9066f6c8da16619867cd4e2fab0c8871656c656d656e744964656e7469666965726f69737375696e675f636f756e7472796c656c656d656e7456616c7565624954d818587ea4686469676573744944056672616e646f6d5059fe68db795dee4c20976380ea24770571656c656d656e744964656e7469666965727169737375696e675f617574686f726974796c656c656d656e7456616c75657828497374697475746f20506f6c696772616669636f2065205a656363612064656c6c6f20537461746fd818585ba4686469676573744944026672616e646f6d5008b3f1ca5517019767be3dee3bb0614571656c656d656e744964656e7469666965726a62697274685f646174656c656c656d656e7456616c7565d903ec6a313935362d30312d3230d818585ca4686469676573744944096672616e646f6d50a2395ec214350c26066306e23279b3ae71656c656d656e744964656e7469666965726f646f63756d656e745f6e756d6265726c656c656d656e7456616c756569393837363534333231d8185850a4686469676573744944066672616e646f6d50a25e1a5b915d2d6eafee9674e023293971656c656d656e744964656e74696669657268706f7274726169746c656c656d656e7456616c75654420212223d81858eea46864696765737449440d6672616e646f6d50eeed6a3b856563627589a360939d12f771656c656d656e744964656e7469666965727264726976696e675f70726976696c656765736c656c656d656e7456616c756582a37576656869636c655f63617465676f72795f636f646561416a69737375655f64617465d903ec6a323031382d30382d30396b6578706972795f64617465d903ec6a323032342d31302d3230a37576656869636c655f63617465676f72795f636f646561426a69737375655f64617465d903ec6a323031372d30322d32336b6578706972795f64617465d903ec6a323032342d31302d3230d818585ba4686469676573744944086672616e646f6d50c0ef486b2a194ed3cbf7f354fd40092171656c656d656e744964656e74696669657276756e5f64697374696e6775697368696e675f7369676e6c656c656d656e7456616c756561496a697373756572417574688443a10126a118215901423082013e3081e5a00302010202012a300a06082a8648ce3d040302301a3118301606035504030c0f5374617465204f662055746f706961301e170d3233313132343134353430345a170d3238313132323134353430345a30383136303406035504030c2d5374617465204f662055746f7069612049737375696e6720417574686f72697479205369676e696e67204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004c338ec1000b351ce8bcdfc167450aeceb
+
+
+

In diagnostic notation: +.. code-block:

+
{
+  "version": "1.0",
+  "documents": [
+  {
+    "docType": "org.iso.18013.5.1.mDL",
+    "issuerSigned": {
+      "nameSpaces": {
+        "org.iso.18013.5.1.IT": [
+          24(<< {
+            "digestID": 11,
+            "random": h'6d44f21ee875f2c1d502b43198e5a152',
+            "elementIdentifier": "verification.evidence",
+            "elementValue": [
+              {
+                "type": "electronic_record",
+                "record": {
+                  "type": "https://eudi.wallet.pdnd.gov.it",
+                  "source": {
+                    "organization_name": "Motorizzazione Civile",
+                    "organization_id": "m_inf",
+                    "country_code": "it"
+                  }
+                }
+              }
+            ]
+          } >>),
+          24(<< {
+            "digestID": 4,
+            "random": h'185d84dfb71ce9b173010ddd62174fbe',
+            "elementIdentifier": "verification.trust_framework",
+            "elementValue": "eidas"
+          } >>),
+          24(<< {
+            "digestID": 0,
+            "random": h'137f903174253c4585358267aae2ea4e',
+            "elementIdentifier": "verification.assurance_level",
+            "elementValue": "high"
+          } >>)
+        ],
+        "org.iso.18013.5.1": [
+          24(<< {
+            "digestID": 12,
+            "random": h'53e29d0ddbbc7d2306a32bdbe2e56e51',
+            "elementIdentifier": "family_name",
+            "elementValue": "Doe"
+          } >>),
+          24(<< {
+            "digestID": 3,
+            "random": h'990cba2069fa1b33b8d6ae910b6549dc',
+            "elementIdentifier": "given_name",
+            "elementValue": "Antonio"
+          } >>),
+          24(<< {
+            "digestID": 10,
+            "random": h'4086c1379975f805f1b1f4975e6a1265',
+            "elementIdentifier": "issue_date",
+            "elementValue": 1004("2019-10-20")
+          } >>),
+          24(<< {
+            "digestID": 1,
+            "random": h'ab4ca30c918dd2fd0bf35242c15fa2d8',
+            "elementIdentifier": "expiry_date",
+            "elementValue": 1004("2024-10-20")
+          } >>),
+          24(<< {
+            "digestID": 7,
+            "random": h'8d9066f6c8da16619867cd4e2fab0c88',
+            "elementIdentifier": "issuing_country",
+            "elementValue": "IT"
+          } >>),
+          24(<< {
+            "digestID": 5,
+            "random": h'59fe68db795dee4c20976380ea247705',
+            "elementIdentifier": "issuing_authority",
+            "elementValue": "Istituto Poligrafico e Zecca dello Stato"
+          } >>),
+          24(<< {
+            "digestID": 2,
+            "random": h'08b3f1ca5517019767be3dee3bb06145',
+            "elementIdentifier": "birth_date",
+            "elementValue": 1004("1956-01-20")
+          } >>),
+          24(<< {
+            "digestID": 9,
+            "random": h'a2395ec214350c26066306e23279b3ae',
+            "elementIdentifier": "document_number",
+            "elementValue": "987654321"
+          } >>),
+          24(<< {
+            "digestID": 6,
+            "random": h'a25e1a5b915d2d6eafee9674e0232939',
+            "elementIdentifier": "portrait",
+            "elementValue": h'20212223'
+          } >>),
+          24(<< {
+            "digestID": 13,
+            "random": h'eeed6a3b856563627589a360939d12f7',
+            "elementIdentifier": "driving_privileges",
+            "elementValue": [
+              {
+                "vehicle_category_code": "A",
+                "issue_date": 1004("2018-08-09"),
+                "expiry_date": 1004("2024-10-20")
+              },
+              {
+                "vehicle_category_code": "B",
+                "issue_date": 1004("2017-02-23"),
+                "expiry_date": 1004("2024-10-20")
+              }
+            ]
+          } >>),
+          24(<< {
+            "digestID": 8,
+            "random": h'c0ef486b2a194ed3cbf7f354fd400921',
+            "elementIdentifier": "un_distinguishing_sign",
+            "elementValue": "I"
+          } >>)
+        ]
+      },
+      "issuerAuth": [
+        h'a10126',
+        {
+          33: h'3082013e3081e5a00302010202012a300a06082a8648ce3d040302301a3118301606035504030c0f5374617465204f662055746f706961301e170d3233313132343134353430345a170d3238313132323134353430345a30383136303406035504030c2d5374617465204f662055746f7069612049737375696e6720417574686f72697479205369676e696e67204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004c338ec1000b351ce8bcdfc167450aeceb7d518bd9a519583e082d67effff06565804fc09abf0e4a08e699c9dba3796285a15f68e40ac7f9fc7700a15153a4065300a06082a8648ce3d040302034800304502210099b7d62e6bf7b1823db3713df889bf73e70bb4d9c58c21e92c58d2f1beffe932022058d039747a00d70e6d66be4797e6142b3608a014ee09b7b79af2cae2aaf27788'
+        },
+        24(<< {
+      "version": "1.0",
+      "digestAlgorithm": "SHA-256",
+      "docType": "org.iso.18013.5.1.mDL",
+      "valueDigests": {
+        "org.iso.18013.5.1": {
+        1: h'0E5F0B6B33418E508740771E82F893372EAF5B2445BC4C84DCF08B005E9493FC',
+        2: h'DE21BB62FF2897D8B986D2CDA9F9BC5865C02807F7B4D9DD1FA4A79DF4C0D37F',
+        3: h'BC5568239E35CE9FF8798C27FFDCD757B134B679F0FE05729AA3491381912E65',
+        5: h'E6048BDC7FD6454296F1E3F54536107C9C5B24C4064DE46A98121E3630EECCA2',
+        6: h'73690D92DCAA61B0203870F67C6AA9FDFEA889B6F0C720DE757B4B0A8516A206',
+        7: h'E353EA0B0FD92B6BE90C64CC3B2EE1284153A8F0F5066B99AAC599200E6EEEB2',
+        8: h'29227872CEB49923D267B5F4BADE6D387B42AC2DC4B2AE26C9013067FEE7018A',
+        9: h'A6A119F7CACAC0B8C6AACAC747FD3FE7E50B6D9BB8A507FDA79F0DF6646F285D',
+        10: h'6D8025D2F02A5E7E1406FB6AAEB67F9EDE9B07191A53F3E23B77C528223A94E2',
+        12: h'B0D43E4E2EA534E4D5304E64BCF7A0F13E2C8EE8304B9CD23ABA4909652A4647',
+        13: h'FBF4DE318982F2DBAD43C601CAEB22628B301AC18AA8264C5831B2AAAC89C486'
+        },
+        "org.iso.18013.5.1.IT": {
+        0: h'CF57377B675F64F37314739592C1E8A911A7DDAF341CE2902FE877C5A835E4C1',
+        4: h'4A4B4CC64EC9299C1A2501EA449F577005E9F7A60408057C07A7C67FB151E5F5',
+        11: h'78824FBD6FBBA88A2AAB44DF8B6F5E9759126D87D1F4415995E658FD9239E1FE'
+        }
+      },
+      "deviceKeyInfo": {
+        "deviceKey": {
+        1: 2,
+        -1: 1,
+        -2: h'AFD09E720B918CEDC2B8A881950BAB6A1051E18AE16A814D51E609938663D5E1',
+        -3: h'61FBC6C8AD24EC86A78BB4E9AC377DD2B7C711D9F2EB9AFD4AA0963662847AED'}},
+        "validityInfo": {
+          "signed": 0("2023-11-24T14:54:05Z"),
+          "validFrom": 0("2023-11-24T14:54:05Z"),
+          "validUntil": 0("2024-11-24T14:54:05Z")}
+        }  >>),
+        h'f2461e4fab69e9f7bcffe552395424514524d1679440036213173101448d1b1ab4a293859b389ffa8b47aeed10e9b0c1545412ac37c51a76482cd9bbbe110152'
+      ]
+    },
+    "deviceSigned": {
+      "nameSpaces": 24(<< {} >>),
+      "deviceAuth": {
+        "deviceSignature": [
+          h'a10126',
+          {},
+          null,
+          h'1fed7190d2975ab79c072e6f1d9d52436059d1fc959d55baf74f057d89b10fcc0dc77a50d433d4c76ddf26223c5560c4ab123b5cb5eb805a90036aa147493076'
+        ]
+      }
+    }
+  }
+  ],
+  "status": 0
+}
+
+
+

Step 13: The Verifier App is required to validate the signatures in the mDoc's issuerSigned field using the public key of the Credential Issuer specified within the mDoc. Subsequently, the Verifier MUST validate the signature in the deviceSigned field. If these signature checks pass, the Verifier can confidently consider the received information as valid.

+
+

Device Engagement

+

The Device Engagement structure MUST be have at least the following components:

+
+
    +
  • Version: tstr. Version of the data structure being used.

  • +
  • Security: an array that contains two mandatory values

    +
      +
    • the cipher identifier: see Table 22 of [ISO18013-5]

    • +
    • the mDL public ephemeral key generated by the Wallet Instance and required by the Verifier App to derive the Session Key. The mDL public ephemeral key MUST be of a type allowed by the indicated cipher suite.

    • +
    +
  • +
  • transferMethod: an array that contains one or more transferMethod arrays when performing device engagement using the QR code. This array is for offline data retrieval methods. A transferMethod array holds two mandatory values (type and version). Only the BLE option is supported by this technical implementation profile, then the type value MUST be set to 2.

  • +
  • BleOptions: this elements MUST provide options for the BLE connection (support for Peripheral Server or Central Client Mode, and the device UUID).

  • +
+
+
+
+

mDoc Request

+

The messages in the mDoc Request MUST be encoded using CBOR. The resulting CBOR byte string for the mDoc Request MUST be encrypted with the Session Key obtained after the Device Engagement phase and MUST be transmitted using the BLE protocol. +The details on the structure of mDoc Request, including identifier and format of the data elements, are provided below.

+
+
    +
  • version: (tstr). Version of the data structure.

  • +
  • docRequests: Requested DocType, NameSpace and data elements.

    +
      +
    • itemsRequest: #6.24(bstr .cbor ItemsRequest).

      +
        +
      • docType: (tstr). The DocType element contains the type of document requested. See Data Model Section.

      • +
      • nameSpaces: (tstr). See Data Model Section for more details.

        +
          +
        • dataElements: (tstr). Requested data elements with Intent to Retain value for each requested element.

          +
            +
          • IntentToRetain: (bool). It indicates that the Verifier App intends to retain the received data element.

          • +
          +
        • +
        +
      • +
      +
    • +
    • readerAuth: COSE_Sign1. It is required for the Verifier App authentication.

    • +
    +
  • +
+
+
+

Note

+

The domestic data elements MUST not be returned unless specifically requested by the Verifier App.

+
+
+
+

mDoc Response

+

The messages in the mDoc Response MUST be encoded using CBOR and MUST be encrypted with the Session Key obtained after the Device Engagement phase. +The details on the structure of mDoc Response are provided below.

+
+
    +
  • version: (tstr). Version of the data structure.

  • +
  • documents: Returned DocType, and ResponseData.

    +
      +
    • docType: (tstr). The DocType element contains the type of document returned. See Data Model Section.

    • +
    • ResponseData:

      +
        +
      • IssuerSigned: Responded data elements signed by the issuer.

        +
          +
        • nameSpaces: (tstr). See Data Model Section for more details.

          +
            +
          • IssuerSignedItemBytes: #6.24(bstr .cbor).

            +
              +
            • digestID: (uint). Reference value to one of the ValueDigests provided in the Mobile Security Object (issuerAuth).

            • +
            • random: (bstr). Random byte value used as salt for the hash function. This value SHALL be different for each IssuerSignedItem and it SHALL have a minimum length of 16 bytes.

            • +
            • elementIdentifier: (tstr). Identifier of User attribute name contained in the Credential.

            • +
            • elementValue: (any). User attribute value

            • +
            +
          • +
          +
        • +
        +
      • +
      • DeviceSigned: Responded data elements signed by the Wallet Instance.

        +
          +
        • NameSpaces: #6.24(bstr .cbor DeviceNameSpaces). The DeviceNameSpaces structure MAY be an empty structure. DeviceNameSpaces contains the data element identifiers and values. It is returned as part of the corresponding namespace in DeviceNameSpace.

          +
            +
          • DataItemName: (tstr). The identifier of the element.

          • +
          • DataItemValue: (any). The value of the element.

          • +
          +
        • +
        • DeviceAuth: The DeviceAuth structure MUST contain the DeviceSignature elements.

          +
            +
          • DeviceSignature: It MUST contain the device signature for the Wallet Instance authentication.

          • +
          +
        • +
        +
      • +
      +
    • +
    +
  • +
  • status: It contains a status code. For detailed description and action required refer to to Table 8 (ResponseStatus) of the [ISO18013-5]

  • +
+
+
+
+

Session Termination

+

The session MUST be terminated if at least one of the following conditions occur.

+
+
    +
  • After a time-out of no activity of receiving or sending session establishment or session data messages occurs. The time-out for no activity implemented by the Wallet Instance and the Verifier App SHOULD be no less than 300 seconds.

  • +
  • When the Wallet Instance doesn't accept any more requests.

  • +
  • When the Verifier App does not send any further requests.

  • +
+
+

If the Wallet Instance and the Verifier App does not send or receive any further requests, the session termination MUST be initiated as follows.

+
+
    +
  • Send the status code for session termination, or

  • +
  • dispatch the "End" command as outlined in [ISO18013-5#8.3.3.1.1.5].

  • +
+
+

When a session is terminated, the Wallet Instance and the Verifier App MUST perform at least the following actions:

+
+
    +
  • destruction of session keys and related ephemeral key material;

  • +
  • closure of the communication channel used for data retrieval.

  • +
+
+
+
+ + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/en/pseudonyms.html b/refs/pull/212/merge/en/pseudonyms.html new file mode 100644 index 000000000..12c10af30 --- /dev/null +++ b/refs/pull/212/merge/en/pseudonyms.html @@ -0,0 +1,1453 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | pseudonyms.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

pseudonyms.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/en/relying-party-solution.html b/refs/pull/212/merge/en/relying-party-solution.html new file mode 100644 index 000000000..fc1440ca8 --- /dev/null +++ b/refs/pull/212/merge/en/relying-party-solution.html @@ -0,0 +1,2570 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Relying Party Solution + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

Relying Party Solution

+

This section describes how a remote Relying Party or a Verifier App requests to a Wallet Instance the presentation of the PID/EAAs.

+

In this section the following flows are described:

+
    +
  • Remote Flow, where the User presents a Credential to a remote Relying Party according to OPENID4VP. In this scenario the user-agent and the Wallet Instance may be used in the same device (Same Device Flow), or in different devices (Cross Device Flow).

  • +
  • Proximity Flow, where the User presents a Credential to a Verifier App according to ISO 18013-5. The User interacts with a Verifier using proximity connection technologies such as QR Code and Bluetooth Low Energy (BLE).

  • +
+
+

Remote Flow

+

In this scenario the Relying Party MUST provide the URL where the signed presentation Request Object is available for download.

+

Depending on whether the User is using a mobile device or a workstation, the Relying Party MUST support the following remote flows:

+
    +
  • Same Device, the Relying Party MUST provide a HTTP redirect (302) location to the Wallet Instance;

  • +
  • Cross Device, the Relying Party MUST provide a QR Code which the User frames with the Wallet Instance.

  • +
+

Once the Wallet Instance establishes the trust with the Relying Party and evaluates the request, the User gives the consent for the disclosure of the Digital Credentials, in the form of a Verifiable Presentation.

+

A High-Level description of the remote flow, from the User's perspective, is given below:

+
+
    +
  1. the Wallet Instance scans the QR Code and obtains the URL (Cross Device flow) or obtain directly an URL (Same Device flow);

  2. +
  3. the Wallet Instance extracts from the payload the client_id and the request_uri parameters;

  4. +
  5. the Wallet Instance establishes the Trust to the Relying Party by building the Federation Trust Chain. Implementations may evaluate the trust after having obtained the signed Request Object (see point 5);

  6. +
  7. the Wallet fetches the signed Request Object using an HTTP request with method GET to the endpoint provided in the request_uri parameter;

  8. +
  9. the Wallet verifies the signature of the signed Request Object and that its issuer matches the client_id obtained at the step number 2;

  10. +
  11. the Wallet checks the presence in the signed Request Object of the parameter request_uri_method, if this parameter is present and set with the post valueThe Wallet transmits its metadata to the request_uri endpoint of the Relying Party using an HTTP POST method and obtains an updated signed Request Object;

  12. +
  13. The Wallet Instance evaluates the requested PID/EAAs and checks the elegibility of the Relying Party in asking these by applying the policies related to that specific Relying Party;

  14. +
  15. the Wallet Instance asks User disclosure and consent;

  16. +
  17. the Wallet Instance presents the requested disclosure of PID/EAAs to the Relying Party, which validates the Wallet Attestation and checks that the Wallet Provider is trusted;

  18. +
  19. the Wallet Instance informs the User about the successfull authentication with the Relying Party and give a good user experience to let the User continuing its navigation.

  20. +
+
+

Below a sequence diagram that summarizes the interactions between all the involved parties.

+
+_images/cross_device_auth_seq_diagram.svg +
+

Fig. 5 Remote Protocol Flow

+
+
+

The details of each step shown in the previous picture are described in the table below.

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Id

Description

1, 2

The User requests to access to a protected resource, the Relying Party redirects the User to a discovery page in which the User selects the Login with the Wallet button. The Authorization flow starts.

3, 4,

The Relying Party provides the Wallet Instance with a URL where a generic signed Request Object can be downloaded.

5, 6, 7, 8, 9

In the Cross Device Flow: the Request URI is provided in the form of a QR Code that is shown to the User. The User frames the QRCode with the Wallet Instance and extracts client_id, request_uri and state. In the Same Device Flow the Relying Party provides the same information of the Cross-Device flow but in the form of HTTP Redirect Location (302).

10, 11, 12

The Wallet Instance obtains the signed Request Object.

13, 14 and 15

The Wallet Instance checks if the Relying Party has provided the request_uri_method within its signed Request Object. If true, the Wallet provides its metadata in the to the Relying Party. The Relying PArty produces a new signed Request Object compliant to the Wallet technical capabilities.

13, 14, 15, 16, 17, 18

The Request Object JWS is verified by the Wallet Instance. The Wallet processes the Relying Party metadata and applies the policies related to the Relying Party, attesting whose Digital Credentials and User data the Relying Party is granted to request.

19, 20

The Wallet Instance requests the User's consent for the release of the Credentials. The User authorizes and consents the presentation of the Credentials by selecting/deselecting the personal data to release.

21

The Wallet Instance provides the Authorization Response to the Relying Party using an HTTP request with the method POST (response mode "direct_post").

22, 23, 24, 25 and 26

The Relying Party verifies the Authorization Response, extracts the Wallet Attestation to establish the trust with the Wallet Solution. The Relying Party extracts the Digital Credentials and attests the trust to the Credentials Issuer and the proof of possession of the Wallet Instance about the presented Digital Credentials. Finally, the Relying Party verifies the revocation status of the presented Digital Credentials.

27 and 28

The Relying Party provides to the Wallet a redirect URI with a response code to be used by the Wallet to finalize the authentication.

29

The User is informed by the Wallet Instance that the Autentication succeded, then the protected resource is made available to the User.

+
+

Request URI with HTTP POST

+

The Relying Party SHOULD provide the POST method with its request_uri endpoint +allowing the Wallet Instance to inform the Relying Party about its technical capabilities.

+

This feature can be useful when, for example, the Wallet Instance supports +a restricted set of features, supported algorithms or a specific url for +its authorization_endpoint, and any other information that it deems necessary to +provide to the Relying Party the parameters necessary for better interoperability.

+
+

Warning

+

The Wallet Instance, when providing its technical capabilities to the +Relying Party, MUST NOT include any User information or other explicit +information regarding the hardware used or usage preferences of its User.

+
+

If both the Relying Party and the Wallet Instance +supports the request_uri_method with HTTP POST, +the Wallet Instance capabilities MUST +be provided using an HTTP request to the request_uri endpoint of the Relying Party, +with the method POST and content type set to application/json.

+

A non-normative example of the HTTP request is represented below:

+
POST /request-uri HTTP/1.1
+HOST: relying-party.example.org
+Content-Type: application/json
+
+{
+    "authorization_endpoint": "https://wallet-solution.digital-strategy.europa.eu/authorization",
+    "response_types_supported": [
+      "vp_token"
+    ],
+    "response_modes_supported": [
+      "form_post.jwt"
+    ],
+    "vp_formats_supported": {
+      "vc+sd-jwt": {
+          "sd-jwt_alg_values": [
+              "ES256",
+              "ES384"
+          ]
+      }
+    },
+    "request_object_signing_alg_values_supported": [
+      "ES256"
+    ],
+    "presentation_definition_uri_supported": false,
+}
+
+
+

The response of the Relying Party is defined in the section below.

+
+
+

Authorization Request Details

+

The Relying Party MUST create a Request Object in the form of a signed JWT and +it MUST provide it to the Wallet Instance through an HTTP URL (request URI). +The HTTP URL points to the web resource where the signed request object is +available for download. The URL parameters contained in the Relying Party +response, containing the request URI, are described in the Table below.

+ ++++ + + + + + + + + + + + + + +

Name

Description

client_id

Unique identifier of the Relying Party.

request_uri

The HTTPs URL where the Relying Party provides the signed Request Object to the Wallet Instance.

+

Below a non-normative example of the response containing the required parameters previously described.

+
https://wallet-solution.digital-strategy.europa.eu/authorization?client_id=...&request_uri=...
+
+
+

The value corresponding to the request_uri endpoint SHOULD be randomized, according to RFC 9101, The OAuth 2.0 Authorization Framework: JWT-Secured Authorization Request (JAR) Section 5.2.1.

+

In the Same Device Flow the Relying Party uses an HTTP response redirect (with status code set to 302) as represented in the following non-normative example:

+
HTTP/1.1 /authorization Found
+Location: https://wallet-solution.digital-strategy.europa.eu?
+client_id=https%3A%2F%2Frelying-party.example.org%2Fcb
+&request_uri=https%3A%2F%2Frelying-party.example.org%2Frequest_uri
+
+
+

In the Cross Device Flow, a QR Code is shown by the Relying Party to the User in order to provide the Authorization Request. The User frames the QR Code using their Wallet Instance.

+

Below is represented a non-normative example of a QR Code issued by the Relying Party.

+
+_images/verifier_qr_code.svg
+

Below is represented a non-normative example of the QR Code raw payload:

+
https://wallet-solution.digital-strategy.europa.eu/authorization?client_id=https%3A%2F%2Frelying-party.example.org&request_uri=https%3A%2F%2Frelying-party.example.org
+
+
+
+

Note

+

The error correction level chosen for the QR Code MUST be Q (Quartily - up to 25%), since it offers a good balance between error correction capability and data density/space. This level of quality and error correction allows the QR Code to remain readable even if it is damaged or partially obscured.

+
+
+
+

Cross Device Flow Status Checks and Security

+

When the flow is Cross Device, the user-agent needs to check the session status to the endpoint made available by Relying Party (status endpoint). This check MAY be implemented in the form of JavaScript code, within the page that shows the QRCode, then the user-agent checks the status with a polling strategy in seconds or a push strategy (eg: web socket).

+

Since the QRcode page and the status endpoint are implemented by the Relying Party, it is under its responsability the implementation details of this solution, since it is related to the Relying Party's internal API.

+

The Relying Party MUST bind the request of the user-agent, with a Secure and HttpOnly session cookie, with the issued request. The request url SHOULD include a parameter with a random value. The HTTP response returned by this specialized endpoint MAY contain the HTTP status codes listed below:

+
    +
  • 201 Created. The signed Request Object was issued by the Relying Party that waits to be downloaded by the Wallet Instance at the request_uri endpoint.

  • +
  • 202 Accepted. This response is given when the signed Request Object was obtained by the Wallet Instance.

  • +
  • 200 OK. The Wallet Instance has provided the presentation to the Relying Party's response_uri endpoint and the User authentication is successful. The Relying Party updates the session cookie allowing the user-agent to access to the protected resource. An URL is provided carrying the location where the user-agent is intended to navigate.

  • +
  • 401 Unauthorized. The Wallet Instance or its User have rejected the request, or the request is expired. The QRCode page SHOULD be updated with an error message.

  • +
+

Below a non-normative example of the HTTP Request to this specialized endpoint, where the parameter id contains an opaque and random value:

+
GET /session-state?id=3be39b69-6ac1-41aa-921b-3e6c07ddcb03
+HTTP/1.1
+HOST: relying-party.example.org
+
+
+
+
+

Request Object Details

+

Below a non-normative example of HTTP request made by the Wallet Instance to the Relying Party.

+
GET /request_uri HTTP/1.1
+HOST: relying-party.example.org
+
+
+
+
+

Request URI response

+

The Relying Party issues the signed Request Object, where a non-normative example in the form of decoded header and payload is shown below:

+
{
+  "alg": "ES256",
+  "typ": "JWT",
+  "kid": "e0bbf2f1-8c3a-4eab-a8ac-2e8f34db8a47",
+  "trust_chain": [
+    "MIICajCCAdOgAwIBAgIC...awz",
+    "MIICajCCAdOgAwIBAgIC...2w3",
+    "MIICajCCAdOgAwIBAgIC...sf2"
+  ]
+}
+.
+{
+  "scope": "eu.europa.ec.eudiw.pid.it.1 tax_id_number",
+  "client_id_scheme": "entity_id",
+  "client_id": "https://relying-party.example.org",
+  "response_mode": "direct_post.jwt",
+  "response_type": "vp_token",
+  "response_uri": "https://relying-party.example.org/response_uri",
+  "nonce": "2c128e4d-fc91-4cd3-86b8-18bdea0988cb",
+  "state": "3be39b69-6ac1-41aa-921b-3e6c07ddcb03",
+  "iss": "https://relying-party.example.org",
+  "iat": 1672418465,
+  "exp": 1672422065,
+  "request_uri_method": "post"
+}
+
+
+

The JWS header parameters are described below:

+ ++++ + + + + + + + + + + + + + + + + + + + +

Name

Description

alg

Algorithm used to sign the JWT, according to [RFC 7516#section-4.1.1]. It MUST be one of the supported algorithms in Section Cryptographic Algorithms and MUST NOT be set to none or to a symmetric algorithm (MAC) identifier.

typ

Media Type of the JWT, as defined in [RFC 7519].

kid

Key ID of the public key needed to verify the JWS signature, as defined in [RFC 7517]. REQUIRED when trust_chain is used.

trust_chain

Sequence of Entity Statements that composes the Trust Chain related to the Relying Party, as defined in OIDC-FED Section 3.2.1. Trust Chain Header Parameter.

+

The JWS payload parameters are described herein:

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Description

scope

Aliases for well-defined Presentation Definitions IDs. It is used to identify which required credentials and User attributes are requested by the Relying Party, according to the Section "Using scope Parameter to Request Verifiable Credential(s)" of [OID4VP].

client_id_scheme

String identifying the scheme of the value in the client_id. It MUST be set to the value entity_id.

client_id

Unique Identifier of the Relying Party.

response_mode

It MUST be set to direct_post.jwt.

response_type

It MUST be set to``vp_token``.

response_uri

The Response URI to which the Wallet Instance MUST send the Authorization Response using an HTTP request using the method POST.

nonce

Fresh cryptographically random number with sufficient entropy, which length MUST be at least 32 digits.

state

Unique identifier of the Authorization Request.

iss

The entity that has issued the JWT. It will be populated with the Relying Party client id.

iat

Unix Timestamp, representing the time at which the JWT was issued.

exp

Unix Timestamp, representing the expiration time on or after which the JWT MUST NOT be valid anymore.

request_uri_method

String determining the HTTP method to be used with the request_uri endpoint to provide the Wallet metadata to the Relying Party. The value is case-insensitive and can be set to: get or post. The GET method, as defined in [@RFC9101], involves the Wallet sending a GET request to retrieve a Request Object. The POST method involves the Wallet requesting the creation of a new Request Object by sending an HTTP POST request, with its metadata, to the request URI of the Relying Party.

+
+

Warning

+

Using the parameter scope requires that the Relying Party Metadata MUST contain the presentation_definition, where a non-normative example of it is given below:

+
+
{
+  "presentation_definition": {
+    "id": "presentation definitions",
+    "input_descriptors": [
+      {
+        "id": "eu.europa.ec.eudiw.pid.it.1",
+        "name": "Person Identification Data",
+        "purpose": "User authentication",
+        "format": "vc+sd-jwt",
+        "constraints": {
+          "fields": [
+            {
+              "path": [
+                "$.credentialSubject.unique_id",
+                "$.credentialSubject.given_name",
+                "$.credentialSubject.family_name",
+              ]
+            }
+          ],
+          "limit_disclosure": "preferred"
+        }
+      }
+    ]
+  }
+}
+
+
+
+

Note

+

The following parameters, even if defined in [OID4VP], are not mentioned in the previous non-normative example, since their usage is conditional and may change in future release of this documentation.

+
    +
  • presentation_definition: JSON object according to Presentation Exchange. This parameter MUST not be present when presentation_definition_uri or scope are present.

  • +
  • presentation_definition_uri: Not supported. String containing an HTTPS URL pointing to a resource where a Presentation Definition JSON object can be retrieved. This parameter MUST be present when presentation_definition parameter or a scope value representing a Presentation Definition is not present.

  • +
  • client_metadata: A JSON object containing the Relying Party metadata values. The client_metadata parameter MUST NOT be present when client_id_scheme is entity_id. Since the client_metadata is taken from trust_chain, this parameter is intended to not be used.

  • +
  • client_metadata_uri: string containing an HTTPS URL pointing to a resource where a JSON object with the Relying Party metadata can be retrieved. The client_metadata_uri parameter MUST NOT be present when client_id_scheme is entity_id. Since the client_metadata is taken from trust_chain, this parameter is intended to not be used.

  • +
+
+
+
+

Authorization Response Details

+

After getting the User authorization and consent for the presentation of the Credentials, the Wallet sends the Authorization Response to the Relying Party response_uri endpoint, the content SHOULD be encrypted according OPENID4VP Section 6.3, using the Relying Party public key.

+
+

Note

+

Why the response is encrypted?

+

The response sent from the Wallet Instance to the Relying Party is encrypted to prevent a malicious agent from gaining access to the plaintext information transmitted within the Relying Party's network. This is only possible if the network environment of the Relying Party employs TLS termination. Such technique employs a termination proxy that acts as an intermediary between the client and the webserver and handles all TLS-related operations. In this manner, the proxy deciphers the transmission's content and either forwards it in plaintext or by negotiates an internal TLS session with the actual webserver's intended target. In the first scenario, any malicious actor within the network segment could intercept the transmitted data and obtain sensitive information, such as an unencrypted response, by sniffing the transmitted data.

+
+

Below a non-normative example of the request:

+
POST /response_uri HTTP/1.1
+HOST: relying-party.example.org
+Content-Type: application/x-www-form-urlencoded
+
+response=eyJhbGciOiJFUzI1NiIs...9t2LQ
+
+
+

Below is a non-normative example of the decrypted JSON response content:

+
{
+  "state": "3be39b69-6ac1-41aa-921b-3e6c07ddcb03",
+  "vp_token": [
+      "eyJhbGciOiJFUzI1NiIs...PT0iXX0",
+      $WalletInstanceAttestation-JWT
+  ],
+  "presentation_submission": {
+      "definition_id": "32f54163-7166-48f1-93d8-ff217bdb0653",
+      "id": "04a98be3-7fb0-4cf5-af9a-31579c8b0e7d",
+      "descriptor_map": [
+          {
+              "id": "eu.europa.ec.eudiw.pid.it.1",
+              "path": "$.vp_token.verified_claims.claims._sd[0]",
+              "format": "vc+sd-jwt"
+          }
+      ]
+  }
+}
+
+
+

Where the following parameters are used:

+ ++++ + + + + + + + + + + + + + + + + +

Name

Description

vp_token

JSON Array containing the Verifiable Presentation(s). There MUST be at least two signed presentations in this Array: +- The Requested Digital Credential (one or more, if in format SD-JWT VC or MDOC CBOR) +- The Wallet Instance Attestation

presentation_submission

JSON Object containing the mappings between the requested Verifiable Credentials and where to find them within the returned Verifiable Presentation Token.

state

Unique identifier provided by the Relying Party within the Authorization Request.

+

Below is a non-normative example of the vp_token decoded content, represented in the form of JWS header and payload, separated by a period:

+
{
+  "alg": "ES256",
+  "typ": "JWT",
+  "kid": "e0bbf2f1-8c3a-4eab-a8ac-2e8f34db8a47"
+}
+.
+{
+  "iss": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c",
+  "jti": "3978344f-8596-4c3a-a978-8fcaba3903c5",
+  "aud": "https://relying-party.example.org/response_uri",
+  "iat": 1541493724,
+  "exp": 1573029723,
+  "nonce": "2c128e4d-fc91-4cd3-86b8-18bdea0988cb"
+  "vp": "<Issuer-Signed-JWT>~<Disclosure 1>~<Disclosure 2>~...~<Disclosure N>"
+}
+
+
+

Where the following parameters are used:

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Description

vp

The Digital Credential in its original state. The public key contained in the Digital Credential MUST be used to verify the entire VP JWS as Proof of Possession of the private key which the public key is included in the Digital Credential. Eg: for SD-JWT VC the pblic key is provided within the cnf.jwk claim.

jti

JWS unique identifier.

iat

Unix timestamp of the time of issuance of this presentation.

exp

Unix timestamp beyond which this presentation will no longer be considered valid.

aud

Audience of the VP, corresponding to the response_uri within the Authorization request issued by the Relying Party.

nonce

The nonce value provided by the Relying Party within the Authorization Request.

+
+
+

Redirect URI

+

When the Relying Party provides the redirect URI, the Wallet MUST send the user-agent to this redirect URI. The redirect URI allows the Relying Party to continue the interaction with the End-User on the device where the Wallet resides after the Wallet has sent the Authorization Response to the response URI.

+

The Relying Party MUST include a response code withing the redirect URI. The response code is a fresh, cryptographically random number used to ensure only the receiver of the redirect can fetch and process the Authorization Response. The number could be added as a path component, as a parameter or as a fragment to the URL. It is RECOMMENDED to use a cryptographic random value of 128 bits or more at the time of the writing of this specification.

+

The following is a non-normative example of the response from the Relying Party to the Wallet upon receiving the Authorization Response at the Response Endpoint.

+
HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+
+{
+  "redirect_uri": "https://relying-party.example.org/cb#response_code=091535f699ea575c7937fa5f0f454aee"
+}
+
+
+

The redirect_uri value MUST be used with an HTTP method GET by either the Wallet or the user-agent to redirect the User to the Relying Party in order to complete the authentication process. The specific entity that performs this action depends on whether the flow is Same device or Cross device.

+
+
+

Relying Party Entity Configuration

+

According to the Trust Model section, the Relying Party is a Federation Entity and MUST expose a well-known endpoint containing its Entity Configuration.

+

Below a non-normative example of the request made by the Wallet Instance to the openid-federation well-known endpoint to obtain the Relying Party Entity Configuration:

+
GET /.well-known/openid-federation HTTP/1.1
+HOST: relying-party.example.org
+
+
+

Below is a non-normative response example:

+
{
+    "alg": "RS256",
+    "kid": "2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs",
+    "typ": "entity-statement+jwt"
+}
+.
+{
+    "exp": 1649590602,
+    "iat": 1649417862,
+    "iss": "https://rp.example.it",
+    "sub": "https://rp.example.it",
+    "jwks": {
+        "keys": [
+            {
+                "kty": "RSA",
+                "n": "5s4qi ...",
+                "e": "AQAB",
+                "kid": "2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs"
+            }
+        ]
+    },
+    "metadata": {
+        "wallet_relying_party": {
+            "application_type": "web",
+            "client_id": "https://rp.example.it",
+            "client_name": "Name of an example organization",
+            "jwks": {
+                "keys": [
+                    {
+                        "kty": "RSA",
+                        "use": "sig",
+                        "n": "1Ta-sE ...",
+                        "e": "AQAB",
+                        "kid": "YhNFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs",
+                        "x5c": [ "..." ]
+                    }
+                ]
+            },
+
+            "contacts": [
+                "ops@relying-party.example.org"
+            ],
+
+            "request_uris": [
+                "https://relying-party.example.org/request_uri"
+            ],
+            "response_uris": [
+                "https://relying-party.example.org/response_uri"
+            ],
+            "default_acr_values": [
+                "https://www.spid.gov.it/SpidL2",
+                "https://www.spid.gov.it/SpidL3"
+            ],
+            "vp_formats": {
+                "vc+sd-jwt": {
+                    "sd-jwt_alg_values": [
+                        "ES256",
+                        "ES384"
+                    ],
+                    "kb-jwt_alg_values": [
+                        "ES256",
+                        "ES384"
+                    ]
+                }
+            },
+              "presentation_definitions": [
+                  {
+                    "id": "eu.europa.ec.eudiw.pid.it.1",
+                    "input_descriptors": [
+                        {
+                            "id": "IdentityCredential",
+                            "format": {
+                                "vc+sd-jwt": {}
+                            },
+                            "constraints": {
+                                "limit_disclosure": "required",
+                                "fields": [
+                                    {
+                                        "path": [
+                                            "$.type"
+                                        ],
+                                        "filter": {
+                                            "type": "string",
+                                            "const": "IdentityCredential"
+                                        }
+                                    },
+                                    {
+                                        "path": [
+                                            "$.family_name"
+                                        ]
+                                    },
+                                    {
+                                        "path": [
+                                            "$.given_name"
+                                        ]
+                                    },
+                                    {
+                                        "path": [
+                                            "$.unique_id"
+                                        ],
+                                        "intent_to_retain": "true"
+                                    }
+                                ]
+                            }
+                        }
+                    ]
+                },
+                  {
+                    "id": "mDL-sample-req",
+                    "input_descriptors": [
+                        {
+                            "id": "mDL",
+                            "format": {
+                                "mso_mdoc": {
+                                    "alg": [
+                                        "EdDSA",
+                                        "ES256"
+                                    ]
+                                },
+                                "constraints": {
+                                    "limit_disclosure": "required",
+                                    "fields": [
+                                        {
+                                            "path": [
+                                                "$.mdoc.doctype"
+                                            ],
+                                            "filter": {
+                                                "type": "string",
+                                                "const": "org.iso.18013.5.1.mDL"
+                                            }
+                                        },
+                                        {
+                                            "path": [
+                                                "$.mdoc.namespace"
+                                            ],
+                                            "filter": {
+                                                "type": "string",
+                                                "const": "org.iso.18013.5.1"
+                                            }
+                                        },
+                                        {
+                                            "path": [
+                                                "$.mdoc.family_name"
+                                            ],
+                                            "intent_to_retain": "false"
+                                        },
+                                        {
+                                            "path": [
+                                                "$.mdoc.portrait"
+                                            ],
+                                            "intent_to_retain": "false"
+                                        },
+                                        {
+                                            "path": [
+                                                "$.mdoc.driving_privileges"
+                                            ],
+                                            "intent_to_retain": "false"
+                                        }
+                                    ]
+                                }
+                            }
+                        }
+                    ]
+                }
+            ],
+
+            "default_max_age": 1111,
+
+            // JARM related
+            "authorization_signed_response_alg": [[
+                "ES256"
+            ],
+            "authorization_encrypted_response_alg": [
+                "RSA-OAEP",
+                "RSA-OAEP-256"
+            ],
+            "authorization_encrypted_response_enc": [
+                "A128CBC-HS256",
+                "A192CBC-HS384",
+                "A256CBC-HS512",
+                "A128GCM",
+                "A192GCM",
+                "A256GCM"
+            ],
+
+            // SIOPv2 related
+            "subject_type": "pairwise",
+            "require_auth_time": true,
+            "id_token_signed_response_alg": [
+                "ES256"
+            ],
+            "id_token_encrypted_response_alg": [
+                "RSA-OAEP",
+                "RSA-OAEP-256"
+            ],
+            "id_token_encrypted_response_enc": [
+                "A128CBC-HS256",
+                "A192CBC-HS384",
+                "A256CBC-HS512",
+                "A128GCM",
+                "A192GCM",
+                "A256GCM"
+            ],
+        },
+        "federation_entity": {
+            "organization_name": "OpenID Wallet Relying Party example",
+            "homepage_uri": "https://relying-party.example.org/home",
+            "policy_uri": "https://relying-party.example.org/policy",
+            "logo_uri": "https://relying-party.example.org/static/logo.svg",
+            "contacts": [
+               "tech@relying-party.example.org"
+             ]
+        }
+    },
+    "authority_hints": [
+        "https://registry.eudi-wallet.example.it"
+    ]
+  }
+}
+
+
+

The Entity Configuration is a JWS, where its header parameters are defined below:

+ ++++ + + + + + + + + + + + + + + + + +

Name

Description

alg

Algorithm used to sign the JWT

typ

Media Type of the JWT

kid

Key ID used identifying the key used to sign the JWS

+
+
+
+

Proximity Flow

+

This section describes how a Verifier requests the presentation of an mDoc-CBOR Credential to a Wallet Instance according to the ISO 18013-5 Specification. Only Supervised Device Retrieval flow is supported in this technical implementation profile.

+

The presentation phase is divided into three sub-phases:

+
+

1. Device Engagement: This subphase begins when the User is prompted to disclose certain attributes from the mDoc(s). The objective of this subphase is to establish a secure communication channel between the Wallet Instance and the Verifier App, so that the mDoc requests and responses can be exchanged during the communication subphase. +The messages exchanged in this subphase are transmitted through short-range technologies to limit the possibility of interception and eavesdropping. +This technical implementation profile exclusively supports QR code for Device Engagement.

+

2. Session establishment: During the session establishment phase, the Verifier App sets up a secure connection. All data transmitted over this connection is encrypted using a session key, which is known to both the Wallet Instance and the Verifier at this stage. +The established session MAY be terminated based on the conditions as detailed in [ISO18013-5#9.1.1.4].

+

3. Communication - Device Retrieval: The Verifier App encrypts the mDoc request with the appropriate session key and sends it to the Wallet Instance together with its public key in a session establishment message. The mDoc uses the data from the session establishment message to derive the session key and decrypt the mDoc request. +During the communication subphase, the Verifier App has the option to request information from the Wallet using mDoc requests and responses. The primary mode of communication is the secure channel established during the session setup. The Wallet Instance encrypts the mDoc response using the session key and transmits it to the Verifier App via a session data message. This technical implementation profile only supports Bluetooth Low Energy (BLE) for the communication sub-phase.

+
+

The following figure illustrates the flow diagram compliant with ISO 18013-5 for proximity flow.

+
+_images/High-Level-Flow-ITWallet-Presentation-ISO.svg +
+

Fig. 6 High-Level Proximity Flow

+
+
+

Step 1-3: The Verifier requests the User to reveal certain attributes from their mDoc(s) stored in the Wallet Instance. The User initiates the Wallet Instance. The Wallet Instance MUST create a new temporary key pair (EDeviceKey.Priv, EDeviceKey.Pub), and incorporate the cipher suite identifier, the identifier of the elliptic curve for key agreement, and the EDeviceKey public point into the device engagement structure (refer to [ISO18013-5#9.1.1.4]). This key pair is temporary and MUST be invalidated immediately after the secure channel is established. Finally, the Wallet Instance displays the QR Code for Device Engagement.

+

Below an example of a device engagement structure that utilizes QR for device engagement and Bluetooth Low Energy (BLE) for data retrieval.

+

CBOR data:

+
a30063312e30018201d818584ba4010220012158205a88d182bce5f42efa59943f33359d2e8a968ff289d93e5fa444b624343167fe225820b16e8cf858ddc7690407ba61d4c338237a8cfcf3de6aa672fc60a557aa32fc670281830201a300f401f50b5045efef742b2c4837a9a3b0e1d05a6917
+
+
+

In diagnostic notation:

+
{
+  0: "1.0", % Version
+
+  1:        % Security
+  [
+      1,     % defines the cipher suite 1 which contains only EC curves
+      24(<<  % embedded CBOR data item
+        {
+          1: 2, % kty:EC2 (Elliptic curves with x and y coordinate pairs)
+        -1: 1, % crv:p256
+-2:h'5A88D182BCE5F42EFA59943F33359D2E8A968FF289D93E5FA444B624343  167FE',% x-coordinate
+-3:h'B16E8CF858DDC7690407BA61D4C338237A8CFCF3DE6AA672FC60A557AA32FC67' % y-coordinate
+        }
+      >>)
+    ],
+
+    2: %DeviceRetrievalMethods(Device engagement using QR code)
+    [
+      [
+        2, %BLE
+        1, % Version
+      {    %BLE options
+          0: false, % no support for mdoc peripheral server mode
+          1: true, % support mdoc central client mode
+          11: h'45EFEF742B2C4837A9A3B0E1D05A6917' % UUID of mdoc client central mode
+        }
+      ]
+    ]
+}
+
+
+

Step 4-6: The Verifier App scans the QR Code and generates its own ephemeral key pair (EReaderKey.Priv, EReaderKey.Pub). It then calculates the session key, using the public key received in the Engagement Structure and its newly-generated private key, as outlined in [ISO18013-5#9.1.1.5]. Finally, it generates its session key, which must be independently derived by both the Wallet Instance and the Verifier App.

+

Step 7: The Verifier App creates an mDoc request that MUST be encrypted using the relevant session key, and transmits it to the Wallet Instance along with EReaderKey.Pub within a session establishment message. The mDoc request MUST be encoded in CBOR, as demonstrated in the following non-normative example.

+

CBOR data: +.. code-block:

+
a26776657273696f6e63312e306b646f63526571756573747381a26c6974656d7352657175657374d818590152a267646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6a6e616d65537061636573a2746f72672e69736f2e31383031332e352e312e4954a375766572696669636174696f6e2e65766964656e6365f4781c766572696669636174696f6e2e6173737572616e63655f6c6576656cf4781c766572696669636174696f6e2e74727573745f6672616d65776f726bf4716f72672e69736f2e31383031332e352e31ab76756e5f64697374696e6775697368696e675f7369676ef47264726976696e675f70726976696c65676573f46f646f63756d656e745f6e756d626572f46a69737375655f64617465f46f69737375696e675f636f756e747279f47169737375696e675f617574686f72697479f46a62697274685f64617465f46b6578706972795f64617465f46a676976656e5f6e616d65f468706f727472616974f46b66616d696c795f6e616d65f46a726561646572417574688443a10126a11821590129308201253081cda00302010202012a300a06082a8648ce3d0403023020311e301c06035504030c15536f6d652052656164657220417574686f72697479301e170d3233313132343130323832325a170d3238313132323130323832325a301a3118301606035504030c0f536f6d6520526561646572204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004aa1092fb59e26ddd182cfdbc85f1aa8217a4f0fae6a6a5536b57c5ef7be2fb6d0dfd319839e6c24d087cd26499ec4f87c8c766200ba4c6218c74de50cd1243b1300a06082a8648ce3d0403020347003044022048466e92226e042add073b8cdc43df5a19401e1d95ab226e142947e435af9db30220043af7a8e7d31646a424e02ea0c853ec9c293791f930bf589bee557370a4c97bf6584058a0d421a7e53b7db0412a196fea50ca6d4c8a530a47dd84d88588ab145374bd0ab2a724cf2ed2facf32c7184591c5969efd53f5aba63194105440bc1904e1b9
+
+
+

The above CBOR data is represented in diagnostic notation as follows: +.. code-block:

+
{
+  "version": "1.0",
+  "docRequests": [
+  {
+    "itemsRequest": 24(<< {
+      "docType": "org.iso.18013.5.1.mDL",
+      "nameSpaces": {
+        "org.iso.18013.5.1.IT": {
+          "verification.evidence": false,
+          "verification.assurance_level": false,
+          "verification.trust_framework": false
+        },
+        "org.iso.18013.5.1": {
+          "un_distinguishing_sign": false,
+          "driving_privileges": false,
+          "document_number": false,
+          "issue_date": false,
+          "issuing_country": false,
+          "issuing_authority": false,
+          "birth_date": false,
+          "expiry_date": false,
+          "given_name": false,
+          "portrait": false,
+          "family_name": false
+        }
+      }
+    } >>),
+    "readerAuth": [
+      h'a10126',
+      {
+        33: h'308201253081cda00302010202012a300a06082a8648ce3d0403023020311e301c06035504030c15536f6d652052656164657220417574686f72697479301e170d3233313132343130323832325a170d3238313132323130323832325a301a3118301606035504030c0f536f6d6520526561646572204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004aa1092fb59e26ddd182cfdbc85f1aa8217a4f0fae6a6a5536b57c5ef7be2fb6d0dfd319839e6c24d087cd26499ec4f87c8c766200ba4c6218c74de50cd1243b1300a06082a8648ce3d0403020347003044022048466e92226e042add073b8cdc43df5a19401e1d95ab226e142947e435af9db30220043af7a8e7d31646a424e02ea0c853ec9c293791f930bf589bee557370a4c97b'
+      },
+      null,
+      h'58a0d421a7e53b7db0412a196fea50ca6d4c8a530a47dd84d88588ab145374bd0ab2a724cf2ed2facf32c7184591c5969efd53f5aba63194105440bc1904e1b9'
+    ]
+  }
+  ]
+}
+
+
+

Step 8: The Wallet Instance uses the session establishment message to derive the session keys and decrypt the mDoc request. It computes the session key using the public key received from the Verifier App and its private key.

+

Step 9-10: When the Wallet Instance receives the mDoc request, it locates the documents that contain the requested attributes and asks the User for permission to provide this information to the Verifier. If the User agrees, the Wallet generates an mDoc response and transmits it to the Verifier App through the secure channel.

+

Step 11-12: If the User gives consent, the Wallet Instance creates an mDoc response and transmits it to the Verifier App via the secure channel. The mDoc response MUST be encoded in CBOR, with its structure outlined in [ISO18013-5#8.3.2.1.2.2]. Below is a non-normative example of an mDoc response.

+

CBOR Data: +.. code-block:

+
a36776657273696f6e63312e3069646f63756d656e747381a367646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6c6973737565725369676e6564a26a6e616d65537061636573a2746f72672e69736f2e31383031332e352e312e495483d81858f7a46864696765737449440b6672616e646f6d506d44f21ee875f2c1d502b43198e5a15271656c656d656e744964656e74696669657275766572696669636174696f6e2e65766964656e63656c656c656d656e7456616c756581a2647479706571656c656374726f6e69635f7265636f7264667265636f7264bf6474797065781f68747470733a2f2f657564692e77616c6c65742e70646e642e676f762e697466736f75726365bf716f7267616e697a6174696f6e5f6e616d65754d6f746f72697a7a617a696f6e6520436976696c656f6f7267616e697a6174696f6e5f6964656d5f696e666c636f756e7472795f636f6465626974ffffd8185866a4686469676573744944046672616e646f6d50185d84dfb71ce9b173010ddd62174fbe71656c656d656e744964656e746966696572781c766572696669636174696f6e2e74727573745f6672616d65776f726b6c656c656d656e7456616c7565656569646173d8185865a4686469676573744944006672616e646f6d50137f903174253c4585358267aae2ea4e71656c656d656e744964656e746966696572781c766572696669636174696f6e2e6173737572616e63655f6c6576656c6c656c656d656e7456616c75656468696768716f72672e69736f2e31383031332e352e318bd8185852a46864696765737449440c6672616e646f6d5053e29d0ddbbc7d2306a32bdbe2e56e5171656c656d656e744964656e7469666965726b66616d696c795f6e616d656c656c656d656e7456616c756563446f65d8185855a4686469676573744944036672616e646f6d50990cba2069fa1b33b8d6ae910b6549dc71656c656d656e744964656e7469666965726a676976656e5f6e616d656c656c656d656e7456616c756567416e746f6e696fd818585ba46864696765737449440a6672616e646f6d504086c1379975f805f1b1f4975e6a126571656c656d656e744964656e7469666965726a69737375655f646174656c656c656d656e7456616c7565d903ec6a323031392d31302d3230d818585ca4686469676573744944016672616e646f6d50ab4ca30c918dd2fd0bf35242c15fa2d871656c656d656e744964656e7469666965726b6578706972795f646174656c656c656d656e7456616c7565d903ec6a323032342d31302d3230d8185855a4686469676573744944076672616e646f6d508d9066f6c8da16619867cd4e2fab0c8871656c656d656e744964656e7469666965726f69737375696e675f636f756e7472796c656c656d656e7456616c7565624954d818587ea4686469676573744944056672616e646f6d5059fe68db795dee4c20976380ea24770571656c656d656e744964656e7469666965727169737375696e675f617574686f726974796c656c656d656e7456616c75657828497374697475746f20506f6c696772616669636f2065205a656363612064656c6c6f20537461746fd818585ba4686469676573744944026672616e646f6d5008b3f1ca5517019767be3dee3bb0614571656c656d656e744964656e7469666965726a62697274685f646174656c656c656d656e7456616c7565d903ec6a313935362d30312d3230d818585ca4686469676573744944096672616e646f6d50a2395ec214350c26066306e23279b3ae71656c656d656e744964656e7469666965726f646f63756d656e745f6e756d6265726c656c656d656e7456616c756569393837363534333231d8185850a4686469676573744944066672616e646f6d50a25e1a5b915d2d6eafee9674e023293971656c656d656e744964656e74696669657268706f7274726169746c656c656d656e7456616c75654420212223d81858eea46864696765737449440d6672616e646f6d50eeed6a3b856563627589a360939d12f771656c656d656e744964656e7469666965727264726976696e675f70726976696c656765736c656c656d656e7456616c756582a37576656869636c655f63617465676f72795f636f646561416a69737375655f64617465d903ec6a323031382d30382d30396b6578706972795f64617465d903ec6a323032342d31302d3230a37576656869636c655f63617465676f72795f636f646561426a69737375655f64617465d903ec6a323031372d30322d32336b6578706972795f64617465d903ec6a323032342d31302d3230d818585ba4686469676573744944086672616e646f6d50c0ef486b2a194ed3cbf7f354fd40092171656c656d656e744964656e74696669657276756e5f64697374696e6775697368696e675f7369676e6c656c656d656e7456616c756561496a697373756572417574688443a10126a118215901423082013e3081e5a00302010202012a300a06082a8648ce3d040302301a3118301606035504030c0f5374617465204f662055746f706961301e170d3233313132343134353430345a170d3238313132323134353430345a30383136303406035504030c2d5374617465204f662055746f7069612049737375696e6720417574686f72697479205369676e696e67204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004c338ec1000b351ce8bcdfc167450aeceb
+
+
+

In diagnostic notation: +.. code-block:

+
{
+  "version": "1.0",
+  "documents": [
+  {
+    "docType": "org.iso.18013.5.1.mDL",
+    "issuerSigned": {
+      "nameSpaces": {
+        "org.iso.18013.5.1.IT": [
+          24(<< {
+            "digestID": 11,
+            "random": h'6d44f21ee875f2c1d502b43198e5a152',
+            "elementIdentifier": "verification.evidence",
+            "elementValue": [
+              {
+                "type": "electronic_record",
+                "record": {
+                  "type": "https://eudi.wallet.pdnd.gov.it",
+                  "source": {
+                    "organization_name": "Motorizzazione Civile",
+                    "organization_id": "m_inf",
+                    "country_code": "it"
+                  }
+                }
+              }
+            ]
+          } >>),
+          24(<< {
+            "digestID": 4,
+            "random": h'185d84dfb71ce9b173010ddd62174fbe',
+            "elementIdentifier": "verification.trust_framework",
+            "elementValue": "eidas"
+          } >>),
+          24(<< {
+            "digestID": 0,
+            "random": h'137f903174253c4585358267aae2ea4e',
+            "elementIdentifier": "verification.assurance_level",
+            "elementValue": "high"
+          } >>)
+        ],
+        "org.iso.18013.5.1": [
+          24(<< {
+            "digestID": 12,
+            "random": h'53e29d0ddbbc7d2306a32bdbe2e56e51',
+            "elementIdentifier": "family_name",
+            "elementValue": "Doe"
+          } >>),
+          24(<< {
+            "digestID": 3,
+            "random": h'990cba2069fa1b33b8d6ae910b6549dc',
+            "elementIdentifier": "given_name",
+            "elementValue": "Antonio"
+          } >>),
+          24(<< {
+            "digestID": 10,
+            "random": h'4086c1379975f805f1b1f4975e6a1265',
+            "elementIdentifier": "issue_date",
+            "elementValue": 1004("2019-10-20")
+          } >>),
+          24(<< {
+            "digestID": 1,
+            "random": h'ab4ca30c918dd2fd0bf35242c15fa2d8',
+            "elementIdentifier": "expiry_date",
+            "elementValue": 1004("2024-10-20")
+          } >>),
+          24(<< {
+            "digestID": 7,
+            "random": h'8d9066f6c8da16619867cd4e2fab0c88',
+            "elementIdentifier": "issuing_country",
+            "elementValue": "IT"
+          } >>),
+          24(<< {
+            "digestID": 5,
+            "random": h'59fe68db795dee4c20976380ea247705',
+            "elementIdentifier": "issuing_authority",
+            "elementValue": "Istituto Poligrafico e Zecca dello Stato"
+          } >>),
+          24(<< {
+            "digestID": 2,
+            "random": h'08b3f1ca5517019767be3dee3bb06145',
+            "elementIdentifier": "birth_date",
+            "elementValue": 1004("1956-01-20")
+          } >>),
+          24(<< {
+            "digestID": 9,
+            "random": h'a2395ec214350c26066306e23279b3ae',
+            "elementIdentifier": "document_number",
+            "elementValue": "987654321"
+          } >>),
+          24(<< {
+            "digestID": 6,
+            "random": h'a25e1a5b915d2d6eafee9674e0232939',
+            "elementIdentifier": "portrait",
+            "elementValue": h'20212223'
+          } >>),
+          24(<< {
+            "digestID": 13,
+            "random": h'eeed6a3b856563627589a360939d12f7',
+            "elementIdentifier": "driving_privileges",
+            "elementValue": [
+              {
+                "vehicle_category_code": "A",
+                "issue_date": 1004("2018-08-09"),
+                "expiry_date": 1004("2024-10-20")
+              },
+              {
+                "vehicle_category_code": "B",
+                "issue_date": 1004("2017-02-23"),
+                "expiry_date": 1004("2024-10-20")
+              }
+            ]
+          } >>),
+          24(<< {
+            "digestID": 8,
+            "random": h'c0ef486b2a194ed3cbf7f354fd400921',
+            "elementIdentifier": "un_distinguishing_sign",
+            "elementValue": "I"
+          } >>)
+        ]
+      },
+      "issuerAuth": [
+        h'a10126',
+        {
+          33: h'3082013e3081e5a00302010202012a300a06082a8648ce3d040302301a3118301606035504030c0f5374617465204f662055746f706961301e170d3233313132343134353430345a170d3238313132323134353430345a30383136303406035504030c2d5374617465204f662055746f7069612049737375696e6720417574686f72697479205369676e696e67204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004c338ec1000b351ce8bcdfc167450aeceb7d518bd9a519583e082d67effff06565804fc09abf0e4a08e699c9dba3796285a15f68e40ac7f9fc7700a15153a4065300a06082a8648ce3d040302034800304502210099b7d62e6bf7b1823db3713df889bf73e70bb4d9c58c21e92c58d2f1beffe932022058d039747a00d70e6d66be4797e6142b3608a014ee09b7b79af2cae2aaf27788'
+        },
+        24(<< {
+      "version": "1.0",
+      "digestAlgorithm": "SHA-256",
+      "docType": "org.iso.18013.5.1.mDL",
+      "valueDigests": {
+        "org.iso.18013.5.1": {
+        1: h'0E5F0B6B33418E508740771E82F893372EAF5B2445BC4C84DCF08B005E9493FC',
+        2: h'DE21BB62FF2897D8B986D2CDA9F9BC5865C02807F7B4D9DD1FA4A79DF4C0D37F',
+        3: h'BC5568239E35CE9FF8798C27FFDCD757B134B679F0FE05729AA3491381912E65',
+        5: h'E6048BDC7FD6454296F1E3F54536107C9C5B24C4064DE46A98121E3630EECCA2',
+        6: h'73690D92DCAA61B0203870F67C6AA9FDFEA889B6F0C720DE757B4B0A8516A206',
+        7: h'E353EA0B0FD92B6BE90C64CC3B2EE1284153A8F0F5066B99AAC599200E6EEEB2',
+        8: h'29227872CEB49923D267B5F4BADE6D387B42AC2DC4B2AE26C9013067FEE7018A',
+        9: h'A6A119F7CACAC0B8C6AACAC747FD3FE7E50B6D9BB8A507FDA79F0DF6646F285D',
+        10: h'6D8025D2F02A5E7E1406FB6AAEB67F9EDE9B07191A53F3E23B77C528223A94E2',
+        12: h'B0D43E4E2EA534E4D5304E64BCF7A0F13E2C8EE8304B9CD23ABA4909652A4647',
+        13: h'FBF4DE318982F2DBAD43C601CAEB22628B301AC18AA8264C5831B2AAAC89C486'
+        },
+        "org.iso.18013.5.1.IT": {
+        0: h'CF57377B675F64F37314739592C1E8A911A7DDAF341CE2902FE877C5A835E4C1',
+        4: h'4A4B4CC64EC9299C1A2501EA449F577005E9F7A60408057C07A7C67FB151E5F5',
+        11: h'78824FBD6FBBA88A2AAB44DF8B6F5E9759126D87D1F4415995E658FD9239E1FE'
+        }
+      },
+      "deviceKeyInfo": {
+        "deviceKey": {
+        1: 2,
+        -1: 1,
+        -2: h'AFD09E720B918CEDC2B8A881950BAB6A1051E18AE16A814D51E609938663D5E1',
+        -3: h'61FBC6C8AD24EC86A78BB4E9AC377DD2B7C711D9F2EB9AFD4AA0963662847AED'}},
+        "validityInfo": {
+          "signed": 0("2023-11-24T14:54:05Z"),
+          "validFrom": 0("2023-11-24T14:54:05Z"),
+          "validUntil": 0("2024-11-24T14:54:05Z")}
+        }  >>),
+        h'f2461e4fab69e9f7bcffe552395424514524d1679440036213173101448d1b1ab4a293859b389ffa8b47aeed10e9b0c1545412ac37c51a76482cd9bbbe110152'
+      ]
+    },
+    "deviceSigned": {
+      "nameSpaces": 24(<< {} >>),
+      "deviceAuth": {
+        "deviceSignature": [
+          h'a10126',
+          {},
+          null,
+          h'1fed7190d2975ab79c072e6f1d9d52436059d1fc959d55baf74f057d89b10fcc0dc77a50d433d4c76ddf26223c5560c4ab123b5cb5eb805a90036aa147493076'
+        ]
+      }
+    }
+  }
+  ],
+  "status": 0
+}
+
+
+

Step 13: The Verifier App is required to validate the signatures in the mDoc's issuerSigned field using the public key of the Credential Issuer specified within the mDoc. Subsequently, the Verifier MUST validate the signature in the deviceSigned field. If these signature checks pass, the Verifier can confidently consider the received information as valid.

+
+

Device Engagement

+

The Device Engagement structure MUST be have at least the following components:

+
+
    +
  • Version: tstr. Version of the data structure being used.

  • +
  • Security: an array that contains two mandatory values

    +
      +
    • the cipher identifier: see Table 22 of [ISO18013-5]

    • +
    • the mDL public ephemeral key generated by the Wallet Instance and required by the Verifier App to derive the Session Key. The mDL public ephemeral key MUST be of a type allowed by the indicated cipher suite.

    • +
    +
  • +
  • transferMethod: an array that contains one or more transferMethod arrays when performing device engagement using the QR code. This array is for offline data retrieval methods. A transferMethod array holds two mandatory values (type and version). Only the BLE option is supported by this technical implementation profile, then the type value MUST be set to 2.

  • +
  • BleOptions: this elements MUST provide options for the BLE connection (support for Peripheral Server or Central Client Mode, and the device UUID).

  • +
+
+
+
+

mDoc Request

+

The messages in the mDoc Request MUST be encoded using CBOR. The resulting CBOR byte string for the mDoc Request MUST be encrypted with the Session Key obtained after the Device Engagement phase and MUST be transmitted using the BLE protocol. +The details on the structure of mDoc Request, including identifier and format of the data elements, are provided below.

+
+
    +
  • version: (tstr). Version of the data structure.

  • +
  • docRequests: Requested DocType, NameSpace and data elements.

    +
      +
    • itemsRequest: #6.24(bstr .cbor ItemsRequest).

      +
        +
      • docType: (tstr). The DocType element contains the type of document requested. See Data Model Section.

      • +
      • nameSpaces: (tstr). See Data Model Section for more details.

        +
          +
        • dataElements: (tstr). Requested data elements with Intent to Retain value for each requested element.

          +
            +
          • IntentToRetain: (bool). It indicates that the Verifier App intends to retain the received data element.

          • +
          +
        • +
        +
      • +
      +
    • +
    • readerAuth: COSE_Sign1. It is required for the Verifier App authentication.

    • +
    +
  • +
+
+
+

Note

+

The domestic data elements MUST not be returned unless specifically requested by the Verifier App.

+
+
+
+

mDoc Response

+

The messages in the mDoc Response MUST be encoded using CBOR and MUST be encrypted with the Session Key obtained after the Device Engagement phase. +The details on the structure of mDoc Response are provided below.

+
+
    +
  • version: (tstr). Version of the data structure.

  • +
  • documents: Returned DocType, and ResponseData.

    +
      +
    • docType: (tstr). The DocType element contains the type of document returned. See Data Model Section.

    • +
    • ResponseData:

      +
        +
      • IssuerSigned: Responded data elements signed by the issuer.

        +
          +
        • nameSpaces: (tstr). See Data Model Section for more details.

          +
            +
          • IssuerSignedItemBytes: #6.24(bstr .cbor).

            +
              +
            • digestID: (uint). Reference value to one of the ValueDigests provided in the Mobile Security Object (issuerAuth).

            • +
            • random: (bstr). Random byte value used as salt for the hash function. This value SHALL be different for each IssuerSignedItem and it SHALL have a minimum length of 16 bytes.

            • +
            • elementIdentifier: (tstr). Identifier of User attribute name contained in the Credential.

            • +
            • elementValue: (any). User attribute value

            • +
            +
          • +
          +
        • +
        +
      • +
      • DeviceSigned: Responded data elements signed by the Wallet Instance.

        +
          +
        • NameSpaces: #6.24(bstr .cbor DeviceNameSpaces). The DeviceNameSpaces structure MAY be an empty structure. DeviceNameSpaces contains the data element identifiers and values. It is returned as part of the corresponding namespace in DeviceNameSpace.

          +
            +
          • DataItemName: (tstr). The identifier of the element.

          • +
          • DataItemValue: (any). The value of the element.

          • +
          +
        • +
        • DeviceAuth: The DeviceAuth structure MUST contain the DeviceSignature elements.

          +
            +
          • DeviceSignature: It MUST contain the device signature for the Wallet Instance authentication.

          • +
          +
        • +
        +
      • +
      +
    • +
    +
  • +
  • status: It contains a status code. For detailed description and action required refer to to Table 8 (ResponseStatus) of the [ISO18013-5]

  • +
+
+
+
+

Session Termination

+

The session MUST be terminated if at least one of the following conditions occur.

+
+
    +
  • After a time-out of no activity of receiving or sending session establishment or session data messages occurs. The time-out for no activity implemented by the Wallet Instance and the Verifier App SHOULD be no less than 300 seconds.

  • +
  • When the Wallet Instance doesn't accept any more requests.

  • +
  • When the Verifier App does not send any further requests.

  • +
+
+

If the Wallet Instance and the Verifier App does not send or receive any further requests, the session termination MUST be initiated as follows.

+
+
    +
  • Send the status code for session termination, or

  • +
  • dispatch the "End" command as outlined in [ISO18013-5#8.3.3.1.1.5].

  • +
+
+

When a session is terminated, the Wallet Instance and the Verifier App MUST perform at least the following actions:

+
+
    +
  • destruction of session keys and related ephemeral key material;

  • +
  • closure of the communication channel used for data retrieval.

  • +
+
+
+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/en/remote-flow.html b/refs/pull/212/merge/en/remote-flow.html new file mode 100644 index 000000000..96399fbee --- /dev/null +++ b/refs/pull/212/merge/en/remote-flow.html @@ -0,0 +1,2127 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Remote Flow + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + +
+

Remote Flow

+

In this scenario the Relying Party MUST provide the URL where the signed presentation Request Object is available for download.

+

Depending on whether the User is using a mobile device or a workstation, the Relying Party MUST support the following remote flows:

+
    +
  • Same Device, the Relying Party MUST provide a HTTP redirect (302) location to the Wallet Instance;

  • +
  • Cross Device, the Relying Party MUST provide a QR Code which the User frames with the Wallet Instance.

  • +
+

Once the Wallet Instance establishes the trust with the Relying Party and evaluates the request, the User gives the consent for the disclosure of the Digital Credentials, in the form of a Verifiable Presentation.

+

A High-Level description of the remote flow, from the User's perspective, is given below:

+
+
    +
  1. the Wallet Instance scans the QR Code and obtains the URL (Cross Device flow) or obtain directly an URL (Same Device flow);

  2. +
  3. the Wallet Instance extracts from the payload the client_id and the request_uri parameters;

  4. +
  5. the Wallet Instance establishes the Trust to the Relying Party by building the Federation Trust Chain. Implementations may evaluate the trust after having obtained the signed Request Object (see point 5);

  6. +
  7. the Wallet fetches the signed Request Object using an HTTP request with method GET to the endpoint provided in the request_uri parameter;

  8. +
  9. the Wallet verifies the signature of the signed Request Object and that its issuer matches the client_id obtained at the step number 2;

  10. +
  11. the Wallet checks the presence in the signed Request Object of the parameter request_uri_method, if this parameter is present and set with the post valueThe Wallet transmits its metadata to the request_uri endpoint of the Relying Party using an HTTP POST method and obtains an updated signed Request Object;

  12. +
  13. The Wallet Instance evaluates the requested PID/EAAs and checks the elegibility of the Relying Party in asking these by applying the policies related to that specific Relying Party;

  14. +
  15. the Wallet Instance asks User disclosure and consent;

  16. +
  17. the Wallet Instance presents the requested disclosure of PID/EAAs to the Relying Party, which validates the Wallet Attestation and checks that the Wallet Provider is trusted;

  18. +
  19. the Wallet Instance informs the User about the successfull authentication with the Relying Party and give a good user experience to let the User continuing its navigation.

  20. +
+
+

Below a sequence diagram that summarizes the interactions between all the involved parties.

+
+_images/cross_device_auth_seq_diagram.svg +
+

Remote Protocol Flow

+
+
+

The details of each step shown in the previous picture are described in the table below.

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Id

Description

1, 2

The User requests to access to a protected resource, the Relying Party redirects the User to a discovery page in which the User selects the Login with the Wallet button. The Authorization flow starts.

3, 4,

The Relying Party provides the Wallet Instance with a URL where a generic signed Request Object can be downloaded.

5, 6, 7, 8, 9

In the Cross Device Flow: the Request URI is provided in the form of a QR Code that is shown to the User. The User frames the QRCode with the Wallet Instance and extracts client_id, request_uri and state. In the Same Device Flow the Relying Party provides the same information of the Cross-Device flow but in the form of HTTP Redirect Location (302).

10, 11, 12

The Wallet Instance obtains the signed Request Object.

13, 14 and 15

The Wallet Instance checks if the Relying Party has provided the request_uri_method within its signed Request Object. If true, the Wallet provides its metadata in the to the Relying Party. The Relying PArty produces a new signed Request Object compliant to the Wallet technical capabilities.

13, 14, 15, 16, 17, 18

The Request Object JWS is verified by the Wallet Instance. The Wallet processes the Relying Party metadata and applies the policies related to the Relying Party, attesting whose Digital Credentials and User data the Relying Party is granted to request.

19, 20

The Wallet Instance requests the User's consent for the release of the Credentials. The User authorizes and consents the presentation of the Credentials by selecting/deselecting the personal data to release.

21

The Wallet Instance provides the Authorization Response to the Relying Party using an HTTP request with the method POST (response mode "direct_post").

22, 23, 24, 25 and 26

The Relying Party verifies the Authorization Response, extracts the Wallet Attestation to establish the trust with the Wallet Solution. The Relying Party extracts the Digital Credentials and attests the trust to the Credentials Issuer and the proof of possession of the Wallet Instance about the presented Digital Credentials. Finally, the Relying Party verifies the revocation status of the presented Digital Credentials.

27 and 28

The Relying Party provides to the Wallet a redirect URI with a response code to be used by the Wallet to finalize the authentication.

29

The User is informed by the Wallet Instance that the Autentication succeded, then the protected resource is made available to the User.

+
+

Request URI with HTTP POST

+

The Relying Party SHOULD provide the POST method with its request_uri endpoint +allowing the Wallet Instance to inform the Relying Party about its technical capabilities.

+

This feature can be useful when, for example, the Wallet Instance supports +a restricted set of features, supported algorithms or a specific url for +its authorization_endpoint, and any other information that it deems necessary to +provide to the Relying Party the parameters necessary for better interoperability.

+
+

Warning

+

The Wallet Instance, when providing its technical capabilities to the +Relying Party, MUST NOT include any User information or other explicit +information regarding the hardware used or usage preferences of its User.

+
+

If both the Relying Party and the Wallet Instance +supports the request_uri_method with HTTP POST, +the Wallet Instance capabilities MUST +be provided using an HTTP request to the request_uri endpoint of the Relying Party, +with the method POST and content type set to application/json.

+

A non-normative example of the HTTP request is represented below:

+
POST /request-uri HTTP/1.1
+HOST: relying-party.example.org
+Content-Type: application/json
+
+{
+    "authorization_endpoint": "https://wallet-solution.digital-strategy.europa.eu/authorization",
+    "response_types_supported": [
+      "vp_token"
+    ],
+    "response_modes_supported": [
+      "form_post.jwt"
+    ],
+    "vp_formats_supported": {
+      "vc+sd-jwt": {
+          "sd-jwt_alg_values": [
+              "ES256",
+              "ES384"
+          ]
+      }
+    },
+    "request_object_signing_alg_values_supported": [
+      "ES256"
+    ],
+    "presentation_definition_uri_supported": false,
+}
+
+
+

The response of the Relying Party is defined in the section below.

+
+
+

Authorization Request Details

+

The Relying Party MUST create a Request Object in the form of a signed JWT and +it MUST provide it to the Wallet Instance through an HTTP URL (request URI). +The HTTP URL points to the web resource where the signed request object is +available for download. The URL parameters contained in the Relying Party +response, containing the request URI, are described in the Table below.

+ ++++ + + + + + + + + + + + + + +

Name

Description

client_id

Unique identifier of the Relying Party.

request_uri

The HTTPs URL where the Relying Party provides the signed Request Object to the Wallet Instance.

+

Below a non-normative example of the response containing the required parameters previously described.

+
https://wallet-solution.digital-strategy.europa.eu/authorization?client_id=...&request_uri=...
+
+
+

The value corresponding to the request_uri endpoint SHOULD be randomized, according to RFC 9101, The OAuth 2.0 Authorization Framework: JWT-Secured Authorization Request (JAR) Section 5.2.1.

+

In the Same Device Flow the Relying Party uses an HTTP response redirect (with status code set to 302) as represented in the following non-normative example:

+
HTTP/1.1 /authorization Found
+Location: https://wallet-solution.digital-strategy.europa.eu?
+client_id=https%3A%2F%2Frelying-party.example.org%2Fcb
+&request_uri=https%3A%2F%2Frelying-party.example.org%2Frequest_uri
+
+
+

In the Cross Device Flow, a QR Code is shown by the Relying Party to the User in order to provide the Authorization Request. The User frames the QR Code using their Wallet Instance.

+

Below is represented a non-normative example of a QR Code issued by the Relying Party.

+
+_images/verifier_qr_code.svg
+

Below is represented a non-normative example of the QR Code raw payload:

+
https://wallet-solution.digital-strategy.europa.eu/authorization?client_id=https%3A%2F%2Frelying-party.example.org&request_uri=https%3A%2F%2Frelying-party.example.org
+
+
+
+

Note

+

The error correction level chosen for the QR Code MUST be Q (Quartily - up to 25%), since it offers a good balance between error correction capability and data density/space. This level of quality and error correction allows the QR Code to remain readable even if it is damaged or partially obscured.

+
+
+
+

Cross Device Flow Status Checks and Security

+

When the flow is Cross Device, the user-agent needs to check the session status to the endpoint made available by Relying Party (status endpoint). This check MAY be implemented in the form of JavaScript code, within the page that shows the QRCode, then the user-agent checks the status with a polling strategy in seconds or a push strategy (eg: web socket).

+

Since the QRcode page and the status endpoint are implemented by the Relying Party, it is under its responsability the implementation details of this solution, since it is related to the Relying Party's internal API.

+

The Relying Party MUST bind the request of the user-agent, with a Secure and HttpOnly session cookie, with the issued request. The request url SHOULD include a parameter with a random value. The HTTP response returned by this specialized endpoint MAY contain the HTTP status codes listed below:

+
    +
  • 201 Created. The signed Request Object was issued by the Relying Party that waits to be downloaded by the Wallet Instance at the request_uri endpoint.

  • +
  • 202 Accepted. This response is given when the signed Request Object was obtained by the Wallet Instance.

  • +
  • 200 OK. The Wallet Instance has provided the presentation to the Relying Party's response_uri endpoint and the User authentication is successful. The Relying Party updates the session cookie allowing the user-agent to access to the protected resource. An URL is provided carrying the location where the user-agent is intended to navigate.

  • +
  • 401 Unauthorized. The Wallet Instance or its User have rejected the request, or the request is expired. The QRCode page SHOULD be updated with an error message.

  • +
+

Below a non-normative example of the HTTP Request to this specialized endpoint, where the parameter id contains an opaque and random value:

+
GET /session-state?id=3be39b69-6ac1-41aa-921b-3e6c07ddcb03
+HTTP/1.1
+HOST: relying-party.example.org
+
+
+
+
+

Request Object Details

+

Below a non-normative example of HTTP request made by the Wallet Instance to the Relying Party.

+
GET /request_uri HTTP/1.1
+HOST: relying-party.example.org
+
+
+
+
+

Request URI response

+

The Relying Party issues the signed Request Object, where a non-normative example in the form of decoded header and payload is shown below:

+
{
+  "alg": "ES256",
+  "typ": "JWT",
+  "kid": "e0bbf2f1-8c3a-4eab-a8ac-2e8f34db8a47",
+  "trust_chain": [
+    "MIICajCCAdOgAwIBAgIC...awz",
+    "MIICajCCAdOgAwIBAgIC...2w3",
+    "MIICajCCAdOgAwIBAgIC...sf2"
+  ]
+}
+.
+{
+  "scope": "eu.europa.ec.eudiw.pid.it.1 tax_id_number",
+  "client_id_scheme": "entity_id",
+  "client_id": "https://relying-party.example.org",
+  "response_mode": "direct_post.jwt",
+  "response_type": "vp_token",
+  "response_uri": "https://relying-party.example.org/response_uri",
+  "nonce": "2c128e4d-fc91-4cd3-86b8-18bdea0988cb",
+  "state": "3be39b69-6ac1-41aa-921b-3e6c07ddcb03",
+  "iss": "https://relying-party.example.org",
+  "iat": 1672418465,
+  "exp": 1672422065,
+  "request_uri_method": "post"
+}
+
+
+

The JWS header parameters are described below:

+ ++++ + + + + + + + + + + + + + + + + + + + +

Name

Description

alg

Algorithm used to sign the JWT, according to [RFC 7516#section-4.1.1]. It MUST be one of the supported algorithms in Section Cryptographic Algorithms and MUST NOT be set to none or to a symmetric algorithm (MAC) identifier.

typ

Media Type of the JWT, as defined in [RFC 7519].

kid

Key ID of the public key needed to verify the JWS signature, as defined in [RFC 7517]. REQUIRED when trust_chain is used.

trust_chain

Sequence of Entity Statements that composes the Trust Chain related to the Relying Party, as defined in OIDC-FED Section 3.2.1. Trust Chain Header Parameter.

+

The JWS payload parameters are described herein:

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Description

scope

Aliases for well-defined Presentation Definitions IDs. It is used to identify which required credentials and User attributes are requested by the Relying Party, according to the Section "Using scope Parameter to Request Verifiable Credential(s)" of [OID4VP].

client_id_scheme

String identifying the scheme of the value in the client_id. It MUST be set to the value entity_id.

client_id

Unique Identifier of the Relying Party.

response_mode

It MUST be set to direct_post.jwt.

response_type

It MUST be set to``vp_token``.

response_uri

The Response URI to which the Wallet Instance MUST send the Authorization Response using an HTTP request using the method POST.

nonce

Fresh cryptographically random number with sufficient entropy, which length MUST be at least 32 digits.

state

Unique identifier of the Authorization Request.

iss

The entity that has issued the JWT. It will be populated with the Relying Party client id.

iat

Unix Timestamp, representing the time at which the JWT was issued.

exp

Unix Timestamp, representing the expiration time on or after which the JWT MUST NOT be valid anymore.

request_uri_method

String determining the HTTP method to be used with the request_uri endpoint to provide the Wallet metadata to the Relying Party. The value is case-insensitive and can be set to: get or post. The GET method, as defined in [@RFC9101], involves the Wallet sending a GET request to retrieve a Request Object. The POST method involves the Wallet requesting the creation of a new Request Object by sending an HTTP POST request, with its metadata, to the request URI of the Relying Party.

+
+

Warning

+

Using the parameter scope requires that the Relying Party Metadata MUST contain the presentation_definition, where a non-normative example of it is given below:

+
+
{
+  "presentation_definition": {
+    "id": "presentation definitions",
+    "input_descriptors": [
+      {
+        "id": "eu.europa.ec.eudiw.pid.it.1",
+        "name": "Person Identification Data",
+        "purpose": "User authentication",
+        "format": "vc+sd-jwt",
+        "constraints": {
+          "fields": [
+            {
+              "path": [
+                "$.credentialSubject.unique_id",
+                "$.credentialSubject.given_name",
+                "$.credentialSubject.family_name",
+              ]
+            }
+          ],
+          "limit_disclosure": "preferred"
+        }
+      }
+    ]
+  }
+}
+
+
+
+

Note

+

The following parameters, even if defined in [OID4VP], are not mentioned in the previous non-normative example, since their usage is conditional and may change in future release of this documentation.

+
    +
  • presentation_definition: JSON object according to Presentation Exchange. This parameter MUST not be present when presentation_definition_uri or scope are present.

  • +
  • presentation_definition_uri: Not supported. String containing an HTTPS URL pointing to a resource where a Presentation Definition JSON object can be retrieved. This parameter MUST be present when presentation_definition parameter or a scope value representing a Presentation Definition is not present.

  • +
  • client_metadata: A JSON object containing the Relying Party metadata values. The client_metadata parameter MUST NOT be present when client_id_scheme is entity_id. Since the client_metadata is taken from trust_chain, this parameter is intended to not be used.

  • +
  • client_metadata_uri: string containing an HTTPS URL pointing to a resource where a JSON object with the Relying Party metadata can be retrieved. The client_metadata_uri parameter MUST NOT be present when client_id_scheme is entity_id. Since the client_metadata is taken from trust_chain, this parameter is intended to not be used.

  • +
+
+
+
+

Authorization Response Details

+

After getting the User authorization and consent for the presentation of the Credentials, the Wallet sends the Authorization Response to the Relying Party response_uri endpoint, the content SHOULD be encrypted according OPENID4VP Section 6.3, using the Relying Party public key.

+
+

Note

+

Why the response is encrypted?

+

The response sent from the Wallet Instance to the Relying Party is encrypted to prevent a malicious agent from gaining access to the plaintext information transmitted within the Relying Party's network. This is only possible if the network environment of the Relying Party employs TLS termination. Such technique employs a termination proxy that acts as an intermediary between the client and the webserver and handles all TLS-related operations. In this manner, the proxy deciphers the transmission's content and either forwards it in plaintext or by negotiates an internal TLS session with the actual webserver's intended target. In the first scenario, any malicious actor within the network segment could intercept the transmitted data and obtain sensitive information, such as an unencrypted response, by sniffing the transmitted data.

+
+

Below a non-normative example of the request:

+
POST /response_uri HTTP/1.1
+HOST: relying-party.example.org
+Content-Type: application/x-www-form-urlencoded
+
+response=eyJhbGciOiJFUzI1NiIs...9t2LQ
+
+
+

Below is a non-normative example of the decrypted JSON response content:

+
{
+  "state": "3be39b69-6ac1-41aa-921b-3e6c07ddcb03",
+  "vp_token": [
+      "eyJhbGciOiJFUzI1NiIs...PT0iXX0",
+      $WalletInstanceAttestation-JWT
+  ],
+  "presentation_submission": {
+      "definition_id": "32f54163-7166-48f1-93d8-ff217bdb0653",
+      "id": "04a98be3-7fb0-4cf5-af9a-31579c8b0e7d",
+      "descriptor_map": [
+          {
+              "id": "eu.europa.ec.eudiw.pid.it.1",
+              "path": "$.vp_token.verified_claims.claims._sd[0]",
+              "format": "vc+sd-jwt"
+          }
+      ]
+  }
+}
+
+
+

Where the following parameters are used:

+ ++++ + + + + + + + + + + + + + + + + +

Name

Description

vp_token

JSON Array containing the Verifiable Presentation(s). There MUST be at least two signed presentations in this Array: +- The Requested Digital Credential (one or more, if in format SD-JWT VC or MDOC CBOR) +- The Wallet Instance Attestation

presentation_submission

JSON Object containing the mappings between the requested Verifiable Credentials and where to find them within the returned Verifiable Presentation Token.

state

Unique identifier provided by the Relying Party within the Authorization Request.

+

Below is a non-normative example of the vp_token decoded content, represented in the form of JWS header and payload, separated by a period:

+
{
+  "alg": "ES256",
+  "typ": "JWT",
+  "kid": "e0bbf2f1-8c3a-4eab-a8ac-2e8f34db8a47"
+}
+.
+{
+  "iss": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c",
+  "jti": "3978344f-8596-4c3a-a978-8fcaba3903c5",
+  "aud": "https://relying-party.example.org/response_uri",
+  "iat": 1541493724,
+  "exp": 1573029723,
+  "nonce": "2c128e4d-fc91-4cd3-86b8-18bdea0988cb"
+  "vp": "<Issuer-Signed-JWT>~<Disclosure 1>~<Disclosure 2>~...~<Disclosure N>"
+}
+
+
+

Where the following parameters are used:

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Description

vp

The Digital Credential in its original state. The public key contained in the Digital Credential MUST be used to verify the entire VP JWS as Proof of Possession of the private key which the public key is included in the Digital Credential. Eg: for SD-JWT VC the pblic key is provided within the cnf.jwk claim.

jti

JWS unique identifier.

iat

Unix timestamp of the time of issuance of this presentation.

exp

Unix timestamp beyond which this presentation will no longer be considered valid.

aud

Audience of the VP, corresponding to the response_uri within the Authorization request issued by the Relying Party.

nonce

The nonce value provided by the Relying Party within the Authorization Request.

+
+
+

Redirect URI

+

When the Relying Party provides the redirect URI, the Wallet MUST send the user-agent to this redirect URI. The redirect URI allows the Relying Party to continue the interaction with the End-User on the device where the Wallet resides after the Wallet has sent the Authorization Response to the response URI.

+

The Relying Party MUST include a response code withing the redirect URI. The response code is a fresh, cryptographically random number used to ensure only the receiver of the redirect can fetch and process the Authorization Response. The number could be added as a path component, as a parameter or as a fragment to the URL. It is RECOMMENDED to use a cryptographic random value of 128 bits or more at the time of the writing of this specification.

+

The following is a non-normative example of the response from the Relying Party to the Wallet upon receiving the Authorization Response at the Response Endpoint.

+
HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+
+{
+  "redirect_uri": "https://relying-party.example.org/cb#response_code=091535f699ea575c7937fa5f0f454aee"
+}
+
+
+

The redirect_uri value MUST be used with an HTTP method GET by either the Wallet or the user-agent to redirect the User to the Relying Party in order to complete the authentication process. The specific entity that performs this action depends on whether the flow is Same device or Cross device.

+
+
+

Relying Party Entity Configuration

+

According to the Trust Model section, the Relying Party is a Federation Entity and MUST expose a well-known endpoint containing its Entity Configuration.

+

Below a non-normative example of the request made by the Wallet Instance to the openid-federation well-known endpoint to obtain the Relying Party Entity Configuration:

+
GET /.well-known/openid-federation HTTP/1.1
+HOST: relying-party.example.org
+
+
+

Below is a non-normative response example:

+
{
+    "alg": "RS256",
+    "kid": "2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs",
+    "typ": "entity-statement+jwt"
+}
+.
+{
+    "exp": 1649590602,
+    "iat": 1649417862,
+    "iss": "https://rp.example.it",
+    "sub": "https://rp.example.it",
+    "jwks": {
+        "keys": [
+            {
+                "kty": "RSA",
+                "n": "5s4qi ...",
+                "e": "AQAB",
+                "kid": "2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs"
+            }
+        ]
+    },
+    "metadata": {
+        "wallet_relying_party": {
+            "application_type": "web",
+            "client_id": "https://rp.example.it",
+            "client_name": "Name of an example organization",
+            "jwks": {
+                "keys": [
+                    {
+                        "kty": "RSA",
+                        "use": "sig",
+                        "n": "1Ta-sE ...",
+                        "e": "AQAB",
+                        "kid": "YhNFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs",
+                        "x5c": [ "..." ]
+                    }
+                ]
+            },
+
+            "contacts": [
+                "ops@relying-party.example.org"
+            ],
+
+            "request_uris": [
+                "https://relying-party.example.org/request_uri"
+            ],
+            "response_uris": [
+                "https://relying-party.example.org/response_uri"
+            ],
+            "default_acr_values": [
+                "https://www.spid.gov.it/SpidL2",
+                "https://www.spid.gov.it/SpidL3"
+            ],
+            "vp_formats": {
+                "vc+sd-jwt": {
+                    "sd-jwt_alg_values": [
+                        "ES256",
+                        "ES384"
+                    ],
+                    "kb-jwt_alg_values": [
+                        "ES256",
+                        "ES384"
+                    ]
+                }
+            },
+              "presentation_definitions": [
+                  {
+                    "id": "eu.europa.ec.eudiw.pid.it.1",
+                    "input_descriptors": [
+                        {
+                            "id": "IdentityCredential",
+                            "format": {
+                                "vc+sd-jwt": {}
+                            },
+                            "constraints": {
+                                "limit_disclosure": "required",
+                                "fields": [
+                                    {
+                                        "path": [
+                                            "$.type"
+                                        ],
+                                        "filter": {
+                                            "type": "string",
+                                            "const": "IdentityCredential"
+                                        }
+                                    },
+                                    {
+                                        "path": [
+                                            "$.family_name"
+                                        ]
+                                    },
+                                    {
+                                        "path": [
+                                            "$.given_name"
+                                        ]
+                                    },
+                                    {
+                                        "path": [
+                                            "$.unique_id"
+                                        ],
+                                        "intent_to_retain": "true"
+                                    }
+                                ]
+                            }
+                        }
+                    ]
+                },
+                  {
+                    "id": "mDL-sample-req",
+                    "input_descriptors": [
+                        {
+                            "id": "mDL",
+                            "format": {
+                                "mso_mdoc": {
+                                    "alg": [
+                                        "EdDSA",
+                                        "ES256"
+                                    ]
+                                },
+                                "constraints": {
+                                    "limit_disclosure": "required",
+                                    "fields": [
+                                        {
+                                            "path": [
+                                                "$.mdoc.doctype"
+                                            ],
+                                            "filter": {
+                                                "type": "string",
+                                                "const": "org.iso.18013.5.1.mDL"
+                                            }
+                                        },
+                                        {
+                                            "path": [
+                                                "$.mdoc.namespace"
+                                            ],
+                                            "filter": {
+                                                "type": "string",
+                                                "const": "org.iso.18013.5.1"
+                                            }
+                                        },
+                                        {
+                                            "path": [
+                                                "$.mdoc.family_name"
+                                            ],
+                                            "intent_to_retain": "false"
+                                        },
+                                        {
+                                            "path": [
+                                                "$.mdoc.portrait"
+                                            ],
+                                            "intent_to_retain": "false"
+                                        },
+                                        {
+                                            "path": [
+                                                "$.mdoc.driving_privileges"
+                                            ],
+                                            "intent_to_retain": "false"
+                                        }
+                                    ]
+                                }
+                            }
+                        }
+                    ]
+                }
+            ],
+
+            "default_max_age": 1111,
+
+            // JARM related
+            "authorization_signed_response_alg": [[
+                "ES256"
+            ],
+            "authorization_encrypted_response_alg": [
+                "RSA-OAEP",
+                "RSA-OAEP-256"
+            ],
+            "authorization_encrypted_response_enc": [
+                "A128CBC-HS256",
+                "A192CBC-HS384",
+                "A256CBC-HS512",
+                "A128GCM",
+                "A192GCM",
+                "A256GCM"
+            ],
+
+            // SIOPv2 related
+            "subject_type": "pairwise",
+            "require_auth_time": true,
+            "id_token_signed_response_alg": [
+                "ES256"
+            ],
+            "id_token_encrypted_response_alg": [
+                "RSA-OAEP",
+                "RSA-OAEP-256"
+            ],
+            "id_token_encrypted_response_enc": [
+                "A128CBC-HS256",
+                "A192CBC-HS384",
+                "A256CBC-HS512",
+                "A128GCM",
+                "A192GCM",
+                "A256GCM"
+            ],
+        },
+        "federation_entity": {
+            "organization_name": "OpenID Wallet Relying Party example",
+            "homepage_uri": "https://relying-party.example.org/home",
+            "policy_uri": "https://relying-party.example.org/policy",
+            "logo_uri": "https://relying-party.example.org/static/logo.svg",
+            "contacts": [
+               "tech@relying-party.example.org"
+             ]
+        }
+    },
+    "authority_hints": [
+        "https://registry.eudi-wallet.example.it"
+    ]
+  }
+}
+
+
+

The Entity Configuration is a JWS, where its header parameters are defined below:

+ ++++ + + + + + + + + + + + + + + + + +

Name

Description

alg

Algorithm used to sign the JWT

typ

Media Type of the JWT

kid

Key ID used identifying the key used to sign the JWS

+
+
+ + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/en/revocation-lists.html b/refs/pull/212/merge/en/revocation-lists.html new file mode 100644 index 000000000..fa11720c1 --- /dev/null +++ b/refs/pull/212/merge/en/revocation-lists.html @@ -0,0 +1,1453 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | revocation-lists.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

revocation-lists.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/en/search.html b/refs/pull/212/merge/en/search.html new file mode 100644 index 000000000..49c7c4c65 --- /dev/null +++ b/refs/pull/212/merge/en/search.html @@ -0,0 +1,1412 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Search + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + + +
+ +
+ + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/en/searchindex.js b/refs/pull/212/merge/en/searchindex.js new file mode 100644 index 000000000..032e7d344 --- /dev/null +++ b/refs/pull/212/merge/en/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["algorithms", "backup-restore", "contribute", "defined-terms", "index", "pid-eaa-data-model", "pid-eaa-issuance", "proximity-flow", "pseudonyms", "relying-party-solution", "remote-flow", "revocation-lists", "ssi-introduction", "standards", "trust", "wallet-attestation", "wallet-solution"], "filenames": ["algorithms.rst", "backup-restore.rst", "contribute.rst", "defined-terms.rst", "index.rst", "pid-eaa-data-model.rst", "pid-eaa-issuance.rst", "proximity-flow.rst", "pseudonyms.rst", "relying-party-solution.rst", "remote-flow.rst", "revocation-lists.rst", "ssi-introduction.rst", "standards.rst", "trust.rst", "wallet-attestation.rst", "wallet-solution.rst"], "titles": ["Cryptographic algorithms", "backup-restore.rst", "How to contribute", "Normative Language and Conventions", "The Italian EUDI Wallet implementation profile", "PID/(Q)EAA Data Model", "PID/(Q)EAA Issuance", "Proximity Flow", "pseudonyms.rst", "Relying Party Solution", "Remote Flow", "revocation-lists.rst", "Self Sovereign Identity", "Technical References", "The Infrastructure of Trust", "Wallet Attestation", "Wallet Solution"], "terms": {"tutti": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "gli": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "esempi": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "contenuti": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "questa": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "documentazion": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "sono": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "da": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "intendersi": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "come": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "non": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16], "normativi": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "all": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "exampl": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "contain": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "document": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "ar": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "meant": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "norm": [0, 1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "The": [0, 2, 3, 5, 6, 7, 9, 10, 12, 13, 15, 16], "follow": [0, 2, 4, 5, 6, 7, 9, 10, 12, 14, 15], "must": [0, 3, 5, 6, 7, 9, 10, 14, 15, 16], "support": [0, 5, 6, 7, 9, 10, 12, 14, 15, 16], "oper": [0, 4, 6, 9, 10, 14, 15], "refer": [0, 3, 4, 5, 6, 7, 9, 12, 14, 15], "rs256": [0, 6, 9, 10, 14], "signatur": [0, 3, 5, 6, 7, 9, 10, 13, 14, 15, 16], "rfc": [0, 5, 6, 9, 10, 13, 14, 15, 16], "7518": [0, 13], "rs512": [0, 5, 6], "rsa": [0, 6, 9, 10, 14], "oaep": [0, 9, 10], "kei": [0, 1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "encrypt": [0, 5, 6, 7, 9, 10, 13, 14], "256": [0, 5, 6, 7, 9, 10, 14, 15, 16], "7516": [0, 6, 9, 10, 13], "a128cbc": [0, 9, 10], "hs256": [0, 9, 10], "content": [0, 5, 6, 9, 10, 15], "a256cbc": [0, 9, 10], "hs512": [0, 9, 10], "recommend": [0, 3, 6, 9, 10, 14], "es256": [0, 5, 6, 9, 10, 14, 15, 16], "es512": [0, 6, 16], "ps256": 0, "ps512": 0, "ecdh": 0, "es": [0, 15], "a128kw": 0, "a256kw": 0, "NOT": [0, 3, 5, 6, 9, 10, 14], "none": [0, 6, 9, 10], "rsa_1_5": 0, "hs384": [0, 9, 10], "length": [0, 5, 6, 7, 9, 10], "equal": [0, 6, 14], "greater": 0, "than": [0, 6, 7, 9, 14], "2048": 0, "bit": [0, 6, 9, 10], "A": [0, 3, 5, 6, 7, 9, 10, 12, 14, 15, 16], "4096": 0, "what": [1, 8, 11, 12, 14], "useful": [1, 8, 11], "todo": [1, 8, 11], "req": [1, 8, 9, 10, 11], "1": [1, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16], "2": [1, 5, 6, 7, 8, 9, 10, 11, 13, 15, 16], "tabl": [1, 5, 6, 7, 8, 9, 10, 11, 14], "paramet": [1, 4, 8, 9, 10, 11, 15, 16], "claim": [1, 3, 4, 6, 8, 9, 10, 11, 14, 15, 16], "descript": [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 14], "valu": [1, 5, 6, 7, 8, 9, 10, 11, 14, 15, 16], "IT": [2, 3, 4, 5, 6, 7, 9, 16], "wallet": [2, 3, 5, 6, 7, 9, 10, 12, 13], "project": [2, 4], "includ": [2, 5, 6, 7, 9, 10, 12, 14, 15, 16], "an": [2, 3, 5, 6, 7, 9, 10, 12, 14, 15, 16], "open": [2, 16], "develop": [2, 4, 14], "process": [2, 3, 4, 5, 6, 9, 10, 12, 14], "approach": [2, 5, 12], "ensur": [2, 5, 6, 9, 10, 12, 14, 15, 16], "access": [2, 4, 5, 9, 10, 12, 14, 16], "invit": 2, "interest": 2, "parti": [2, 3, 4, 5, 6, 12, 16], "particip": [2, 3, 4, 14], "consequ": 2, "stakehold": 2, "nation": [2, 3, 4, 5, 6, 12, 16], "intern": [2, 9, 10], "commun": [2, 4, 6, 7, 9], "member": [2, 4, 6, 12, 14], "onli": [2, 3, 5, 6, 7, 9, 10, 12, 14, 16], "encourag": 2, "also": [2, 3, 5, 6, 12, 14, 15, 16], "heartili": 2, "welcom": 2, "refin": 2, "technic": [2, 3, 4, 6, 7, 9, 10, 14], "rule": [2, 3, 4, 5, 14], "below": [2, 3, 4, 5, 6, 7, 9, 10, 14, 15, 16], "sever": 2, "method": [2, 6, 7, 9, 10, 15, 16], "avail": [2, 4, 5, 9, 10, 14, 15, 16], "github": 2, "issu": [2, 3, 5, 6, 9, 10, 12, 14, 15, 16], "By": [2, 5, 16], "you": [2, 3], "can": [2, 3, 5, 6, 7, 9, 10, 12, 14, 16], "seek": 2, "clarif": 2, "propos": [2, 4], "enhanc": [2, 4, 12], "report": 2, "editori": 2, "typo": 2, "If": [2, 5, 6, 7, 9, 10, 14, 15], "work": 2, "we": [2, 5], "draft": [2, 5, 6, 13, 14], "pull": 2, "request": [2, 4, 12, 14, 16], "link": [2, 6], "repres": [2, 5, 6, 7, 9, 10, 14, 16], "activ": [2, 4, 7, 9, 12, 14, 16], "typic": [2, 6, 12], "alwai": [2, 3, 12, 14], "base": [2, 4, 6, 7, 9, 12, 13], "discuss": [2, 6], "onc": [2, 6, 9, 10, 16], "initi": [2, 4, 6, 7, 9], "facilit": [2, 14], "review": [2, 16], "chang": [2, 5, 9, 10, 14], "befor": [2, 3, 6, 14, 15], "thei": [2, 3, 12, 14, 15], "merg": 2, "main": [2, 5, 6, 12, 14], "branch": 2, "version": [2, 5, 7, 9, 16], "corrent": 2, "italia": 2, "slack": 2, "channel": [2, 7, 9], "messag": [2, 6, 7, 9, 10, 15], "applic": [2, 3, 6, 9, 10, 12, 13, 14, 15, 16], "design": [2, 4, 12, 16], "busi": [2, 4], "connect": [2, 5, 6, 7, 9, 13, 16], "peopl": [2, 12], "inform": [2, 3, 5, 7, 9, 10, 12, 14, 15, 16], "need": [2, 6, 9, 10, 12, 14, 15, 16], "from": [2, 4, 5, 6, 7, 9, 10, 14, 15, 16], "public": [2, 3, 4, 5, 6, 7, 9, 10, 12, 14, 15, 16], "administr": [2, 4, 5, 12, 14], "technician": 2, "student": 2, "citizen": [2, 3, 4, 5, 12], "ha": [2, 5, 6, 7, 9, 10, 14, 15, 16], "everyon": 2, "join": 2, "free": 2, "http": [2, 4, 5, 7, 13, 14, 15, 16], "where": [2, 5, 6, 9, 10, 12, 14, 15], "learn": 2, "about": [2, 4, 5, 9, 10, 12, 15, 16], "partak": 2, "would": [2, 6, 12], "like": [2, 3, 5, 14], "thank": 2, "individu": [2, 12], "comment": 2, "concern": [2, 14], "idea": 2, "some": [2, 5, 6, 14], "which": [2, 3, 4, 5, 6, 7, 9, 10, 12, 14, 15, 16], "substanti": [2, 3], "implement": [2, 3, 5, 6, 7, 9, 10, 14], "profil": [2, 3, 5, 6, 7, 9, 13], "set": [2, 4, 5, 6, 7, 9, 10, 14, 15, 16], "alen": 2, "horvat": 2, "amir": 2, "sharif": 2, "andrea": 2, "prosseda": 2, "emanuel": 2, "de": 2, "cupi": 2, "emiliano": 2, "vernini": 2, "francesco": 2, "grauso": 2, "marino": 2, "ventola": 2, "giada": 2, "sciarretta": 2, "giusepp": 2, "marco": 2, "klaa": 2, "wierenga": 2, "kristina": 2, "yasuda": [2, 13], "leif": 2, "johansson": 2, "lorenzo": 2, "cerini": 2, "marta": 2, "sciunnach": 2, "michel": 2, "silletti": 2, "nicola": 2, "saitto": 2, "niel": 2, "van": 2, "dijk": 2, "paul": 2, "bastien": 2, "pasqual": 2, "rose": 2, "peter": 2, "altmann": 2, "riccardo": 2, "iaconelli": 2, "roland": 2, "hedberg": 2, "salvator": 2, "laiso": 2, "manfredi": 2, "stefano": 2, "alifuoco": 2, "takahiko": 2, "kawasaki": 2, "torsten": 2, "lodderstedt": [2, 13], "vladimir": 2, "duzhinov": 2, "anyon": 2, "been": [2, 6, 14], "forgotten": 2, "pleas": [2, 14, 16], "accept": [2, 6, 7, 9, 10], "our": 2, "apolog": 2, "modif": 2, "page": [2, 9, 10, 16], "via": [2, 6, 7, 9, 14], "com": 2, "eudi": [2, 5, 6, 7, 9, 10, 13, 16], "doc": [2, 6], "brief": 2, "offer": [2, 6, 9, 10, 15, 16], "dure": [2, 5, 6, 7, 9, 12, 14, 15, 16], "event": 2, "period": [2, 9, 10, 14, 15], "have": [2, 5, 6, 7, 9, 10, 12, 14, 15, 16], "opportun": 2, "again": 2, "make": [2, 5, 6, 14], "amend": 2, "soon": 2, "possibl": [2, 5, 7, 9, 10, 14], "list": [2, 3, 4, 5, 6, 9, 10, 12, 14, 15, 16], "word": [3, 13], "requir": [3, 4, 5, 6, 7, 9, 10, 13], "shall": [3, 5, 6, 7, 9], "should": [3, 5, 6, 7, 9, 10, 14, 15], "mai": [3, 5, 6, 7, 9, 10, 13, 14, 15, 16], "option": [3, 5, 7, 9, 12], "interpret": 3, "describ": [3, 5, 6, 7, 9, 10, 14, 15], "bcp": [3, 13], "14": [3, 6, 9, 10, 13, 15], "rfc2119": 3, "rfc8174": [3, 13], "when": [3, 5, 6, 7, 9, 10, 12, 14, 15, 16], "appear": 3, "capit": 3, "shown": [3, 6, 9, 10], "here": [3, 16], "user": [3, 4, 5, 6, 7, 9, 10, 12, 14, 15, 16], "trust": [3, 4, 5, 6, 9, 10, 12, 15, 16], "servic": [3, 4, 5, 6, 12, 14, 15, 16], "model": [3, 4, 6, 7, 9, 10, 12, 16], "framework": [3, 4, 5, 6, 9, 10, 13, 14, 16], "attribut": [3, 4, 5, 7, 9, 10, 14, 16], "electron": [3, 4, 5, 14, 16], "attest": [3, 4, 5, 6, 9, 10, 12], "provid": [3, 4, 5, 6, 7, 9, 10, 12, 14, 15], "tsp": [3, 14], "person": [3, 5, 6, 9, 10, 12, 14, 16], "identif": [3, 4, 5, 6, 9, 10, 12, 14, 16], "data": [3, 4, 6, 7, 9, 10, 12, 13, 14, 16], "pid": [3, 4, 9, 10, 14, 16], "revoc": [3, 4, 6, 9, 10, 13, 14, 16], "qualifi": [3, 14, 16], "qtsp": [3, 14], "eaa": [3, 4, 9, 10, 14, 16], "eida": [3, 4, 5, 6, 7, 9, 12, 13, 14], "arf": [3, 4, 5, 6, 13, 14], "definit": [3, 9, 10, 12, 13, 16], "us": [3, 4, 5, 6, 7, 9, 10, 12, 13, 14, 15, 16], "further": [3, 6, 7, 9, 14, 16], "insight": 3, "topic": 3, "complement": 3, "interact": [3, 6, 9, 10, 12, 14, 15, 16], "compon": [3, 4, 6, 7, 9, 10, 14], "accredit": [3, 14, 15], "bodi": [3, 6, 14], "entiti": [3, 4, 16], "feder": [3, 4, 6, 9, 10, 13, 15, 16], "author": [3, 4, 5, 12, 13, 14, 15, 16], "respons": [3, 4, 13, 14, 15, 16], "manag": [3, 6, 12, 16], "verif": [3, 4, 6, 7, 9, 12, 14, 15, 16], "certif": [3, 5, 12, 14, 15], "ecosystem": [3, 4, 12, 14, 16], "role": [3, 4, 12, 16], "digit": [3, 4, 5, 6, 9, 10, 12, 14, 16], "ident": [3, 4, 5, 6, 16], "recogn": [3, 12], "state": [3, 4, 6, 9, 10, 12, 14, 15], "identifi": [3, 5, 6, 7, 9, 10, 13, 14, 15, 16], "issuanc": [3, 4, 5, 9, 10, 13, 14, 15, 16], "master": 3, "alreadi": [3, 4, 6], "present": [3, 4, 5, 6, 7, 9, 10, 12, 13, 14, 15, 16], "italian": [3, 5, 6, 14], "system": [3, 4, 6, 12, 14, 16], "credenti": [3, 4, 5, 7, 9, 10, 12, 13, 14, 15, 16], "sign": [3, 5, 6, 7, 9, 10, 12, 14, 15, 16], "whose": [3, 9, 10, 15], "integr": [3, 5, 6, 12, 15, 16], "cryptograph": [3, 4, 5, 6, 9, 10, 12, 14, 16], "verifi": [3, 5, 6, 7, 9, 10, 12, 13, 14, 15, 16], "its": [3, 6, 7, 9, 10, 14, 15, 16], "issuer": [3, 4, 5, 7, 9, 10, 12, 14], "It": [3, 5, 6, 7, 9, 10, 12, 14, 15, 16], "known": [3, 6, 7, 9, 10, 14, 16], "govern": [3, 4, 12], "guidelin": [3, 4], "administ": 3, "directli": [3, 6, 9, 10], "through": [3, 5, 6, 7, 9, 10, 14], "intermediari": [3, 9, 10, 14], "statu": [3, 4, 5, 6, 7, 14, 16], "elig": [3, 4], "evalu": [3, 4, 6, 9, 10, 15, 16], "perform": [3, 6, 7, 9, 10, 15, 16], "oversight": 3, "function": [3, 5, 7, 9, 16], "instanc": [3, 4, 5, 6, 7, 9, 10, 14, 15], "solut": [3, 4, 6, 10, 14], "instal": [3, 6, 15, 16], "mobil": [3, 4, 6, 7, 9, 10, 12, 15, 16], "devic": [3, 4, 6, 12, 14, 15, 16], "control": [3, 5, 6, 12, 16], "specif": [3, 5, 6, 7, 9, 10, 12, 14, 15, 16], "who": [3, 6, 12, 14], "sole": 3, "owner": [3, 5, 12, 14], "enabl": [3, 12, 14, 16], "fulli": [3, 4], "autonom": [3, 14], "privat": [3, 5, 6, 7, 9, 10, 14, 15], "conform": [3, 6], "prove": [3, 5, 12, 14], "secur": [3, 4, 6, 7, 12, 13, 14, 15, 16], "compliac": 3, "manufactur": 3, "allow": [3, 5, 6, 7, 9, 10, 12, 14, 15, 16], "certifi": [3, 6, 14, 16], "authent": [3, 5, 6, 7, 9, 10, 12, 14, 15, 16], "app": [3, 6, 7, 9, 15, 16], "qeaa": [3, 16], "form": [3, 5, 6, 9, 10, 12, 14, 15, 16], "s": [3, 5, 7, 9, 10, 12, 13, 14, 15, 16], "possess": [3, 5, 6, 9, 10, 12, 13, 14, 16], "reli": [3, 4, 5, 6, 12, 16], "natur": [3, 5, 16], "legal": [3, 12, 14, 16], "submiss": 3, "mechan": [3, 4, 5, 16], "see": [3, 5, 6, 7, 9, 10, 14, 15], "complianc": [3, 4, 5, 6, 14, 16], "regulatori": 3, "cannot": [3, 5, 14], "repudi": [3, 4], "over": [3, 5, 7, 9, 12, 14, 16], "time": [3, 5, 6, 7, 9, 10, 13, 14, 15, 16], "relat": [3, 5, 6, 7, 9, 10, 14, 15, 16], "particular": [3, 5, 6, 14], "layer": [3, 13], "architectur": [3, 4, 6, 13, 14, 16], "establish": [3, 6, 7, 9, 10, 12, 16], "reliabl": [3, 5, 14, 15, 16], "how": [3, 4, 7, 9, 14, 15], "maintain": [3, 12], "outlin": [3, 5, 6, 7, 9, 14, 16], "procedur": [3, 5, 12], "valid": [3, 4, 5, 6, 7, 9, 10, 12, 14, 15], "each": [3, 5, 6, 7, 9, 10, 14, 15, 16], "other": [3, 4, 5, 6, 9, 10, 12, 14, 16], "level": [3, 4, 7, 9, 10, 12, 13, 16], "exchang": [3, 6, 7, 9, 10, 12, 13, 16], "assur": [3, 5, 13, 16], "degre": 3, "confid": [3, 7, 9, 16], "vet": 3, "same": [3, 5, 6, 9, 10, 14, 15], "whom": [3, 12, 14], "wa": [3, 5, 6, 9, 10, 15], "holder": [3, 5, 12, 15], "bind": [3, 6, 9, 10, 14, 15], "abil": [3, 12, 16], "legitim": [3, 5], "part": [3, 6, 7, 9, 14, 15, 16], "third": [3, 14], "oid4vp": [3, 9, 10], "openid": [3, 5, 6, 9, 10, 13, 14, 16], "vc": [3, 5, 6, 9, 10, 13, 14, 15], "vp": [3, 9, 10], "api": [3, 4, 6, 9, 10, 16], "program": 3, "interfac": [3, 6, 16], "loa": [3, 5, 6, 16], "european": [4, 12], "council": 4, "updat": [4, 5, 9, 10, 14], "regul": [4, 12, 14], "new": [4, 5, 6, 7, 9, 10, 12, 15], "tool": [4, 15], "itali": 4, "respond": [4, 7, 9], "input": 4, "receiv": [4, 6, 7, 9, 10, 15], "creat": [4, 6, 7, 9, 10, 15], "call": [4, 14], "interoper": [4, 6, 9, 10, 12, 13, 14], "made": [4, 9, 10, 14, 15, 16], "full": [4, 5, 12, 16], "current": [4, 5, 6, 13], "scenario": [4, 9, 10, 12, 14], "count": 4, "3": [4, 5, 6, 7, 9, 10, 14, 15, 16], "coexist": 4, "partial": [4, 9, 10], "overlap": 4, "sometim": 4, "compet": 4, "differ": [4, 5, 6, 7, 9, 12, 15], "technolog": [4, 7, 9], "point": [4, 6, 7, 9, 10, 15], "highli": 4, "fragment": [4, 6, 9, 10], "yield": 4, "difficulti": 4, "therefor": [4, 6, 12, 14], "rationalis": 4, "order": [4, 5, 9, 10, 16], "simplifi": [4, 6], "experi": [4, 6, 9, 10, 12, 16], "To": [4, 6, 15, 16], "achiev": 4, "object": [4, 6, 7, 13, 14, 15], "notifi": [4, 6, 14, 16], "scheme": [4, 5, 6, 9, 10, 12], "entail": 4, "evolut": 4, "envisag": 4, "progress": 4, "migrat": 4, "threefold": 4, "toward": 4, "purpos": [4, 5, 9, 10, 12, 16], "defin": [4, 5, 6, 7, 9, 10, 14, 15, 16], "involv": [4, 6, 9, 10, 12, 14], "detail": [4, 5, 7, 12, 14, 16], "accord": [4, 5, 6, 7, 9, 10, 14, 15, 16], "infrastructur": [4, 12], "realiabl": [4, 16], "mdl": [4, 5, 7, 9, 10], "cbor": [4, 6, 7, 9, 10], "format": [4, 5, 6, 7, 9, 10, 13, 14, 15, 16], "sd": [4, 6, 9, 10, 13, 14, 15], "jwt": [4, 6, 9, 10, 13, 14, 15, 16], "gener": [4, 5, 6, 7, 9, 10, 13], "openid4vci": [4, 6, 13, 14], "openid4vp": [4, 6, 9, 10, 13, 14], "pseudonym": 4, "siopv2": [4, 9, 10, 15], "backup": 4, "restor": 4, "self": [4, 5], "sovereign": 4, "ssi": 4, "languag": 4, "convent": 4, "term": [4, 14, 16], "acronym": 4, "properti": [4, 5], "endpoint": [4, 9, 10, 15], "configur": [4, 16], "common": 4, "anchor": [4, 6, 16], "leav": 4, "intermedi": [4, 6, 12, 16], "metadata": [4, 5, 6, 9, 10, 12, 15], "type": [4, 5, 6, 7, 9, 10, 15, 16], "statement": [4, 6, 9, 10, 16], "chain": [4, 5, 6, 9, 10, 15], "offlin": [4, 7, 9], "long": [4, 6], "live": 4, "privaci": [4, 6, 12, 15, 16], "remark": 4, "consider": 4, "decentr": 4, "lifecycl": 4, "transit": 4, "return": [4, 5, 6, 7, 9, 10, 14, 15], "deactiv": 4, "header": [4, 5, 6, 9, 10, 14], "payload": [4, 5, 6, 9, 10], "wallet_provid": [4, 14], "federation_ent": [4, 6, 9, 10, 14], "extern": 4, "high": [4, 5, 7, 9, 10, 13, 16], "static": [4, 9, 10, 14], "view": [4, 6, 16], "dynam": [4, 6, 14], "q": [4, 9, 10, 14, 16], "field": [4, 6, 7, 9, 10, 12, 13], "mdoc": [4, 6, 10], "namespac": [4, 7, 9, 10], "flow": [4, 14], "push": [4, 9, 10], "par": 4, "token": [4, 5, 9, 10, 13, 15, 16], "remot": [4, 14], "uri": [4, 6, 13], "post": [4, 6, 14, 15], "cross": [4, 14], "check": [4, 6, 7, 14], "redirect": [4, 6], "proxim": 4, "engag": [4, 16], "session": [4, 6, 10], "termin": [4, 10], "rst": 4, "librari": [4, 14], "code": [4, 5, 6, 7, 9, 10, 14], "snippet": 4, "algorithm": [4, 5, 6, 9, 10, 13, 14, 15, 16], "contribut": 4, "acknowledg": 4, "law": 5, "scope": [5, 6, 9, 10, 14], "protect": [5, 6, 9, 10], "resourc": [5, 6, 9, 10, 13, 14], "within": [5, 6, 7, 9, 10, 14, 16], "ones": 5, "famili": [5, 6], "name": [5, 6, 7, 9, 10, 14, 15, 16], "first": [5, 6, 9, 10], "date": [5, 6, 13, 14, 15], "birth": [5, 6], "uniqu": [5, 6, 9, 10, 14, 15, 16], "taxpay": 5, "number": [5, 6, 9, 10, 14, 15, 16], "addit": [5, 6, 14], "oidc": [5, 6, 9, 10, 12, 13, 14], "ida": 5, "carri": [5, 6, 9, 10, 12, 14], "proof": [5, 6, 9, 10, 12, 13, 14, 16], "underli": 5, "In": [5, 6, 7, 9, 10, 12, 14, 16], "relev": [5, 6, 7, 9, 12, 14, 15], "sourc": [5, 7, 9, 12], "subject": [5, 6, 14, 16], "section": [5, 6, 7, 9, 10, 14, 15, 16], "select": [5, 6, 9, 10], "disclosur": [5, 9, 10], "specifi": [5, 6, 7, 9, 15, 16], "terbu": [5, 13], "latest": 5, "_sd_alg": 5, "5": [5, 6, 7, 9, 10, 14, 15], "them": [5, 9, 10, 12, 14, 15, 16], "disclos": [5, 6, 7, 9, 12, 14], "indic": [5, 6, 7, 9, 13, 14], "hash": [5, 6, 7, 9], "digest": 5, "salt": [5, 7, 9], "one": [5, 6, 7, 9, 10, 12, 14], "omit": [5, 6], "instead": [5, 12, 14], "respect": [5, 6, 16], "decoi": 5, "arrai": [5, 6, 7, 9, 10, 14, 15, 16], "_sd": [5, 9, 10], "map": [5, 6, 9, 10, 14], "calcul": [5, 6, 7, 9], "random": [5, 6, 7, 9, 10], "sent": [5, 6, 9, 10], "togeth": [5, 6, 7, 9], "combin": [5, 14], "seri": 5, "base64url": [5, 6], "encod": [5, 6, 7, 9, 15], "separ": [5, 6, 9, 10, 15], "next": 5, "singl": [5, 6, 14], "tild": 5, "charact": [5, 6], "n": [5, 6, 9, 10, 13, 14], "more": [5, 6, 7, 9, 10, 14, 16], "jose": [5, 6], "mandatori": [5, 6, 7, 9], "typ": [5, 6, 9, 10, 14, 15, 16], "rfc7515": [5, 6, 13], "4": [5, 6, 7, 9, 10, 15], "9": [5, 6, 7, 9, 10, 15], "alg": [5, 6, 9, 10, 14, 15, 16], "kid": [5, 6, 9, 10, 14, 15, 16], "8": [5, 6, 7, 9, 10, 15], "trust_chain": [5, 9, 10, 14, 15], "json": [5, 6, 9, 10, 13, 14, 15, 16], "fed": [5, 9, 10, 13, 14], "whether": [5, 6, 9, 10, 14, 15], "nsd": 5, "iss": [5, 6, 9, 10, 14, 15, 16], "url": [5, 6, 9, 10, 14, 15, 16], "string": [5, 6, 7, 9, 10, 14, 15, 16], "rfc7519": [5, 6, 13, 15], "sub": [5, 6, 7, 9, 10, 14, 15, 16], "thumbprint": [5, 6, 13, 15, 16], "jwk": [5, 6, 9, 10, 13, 14, 15, 16], "cnf": [5, 6, 9, 10, 15], "jti": [5, 6, 9, 10, 15], "id": [5, 6, 9, 10, 14, 15, 16], "uuid4": [5, 6], "7": [5, 6, 7, 9, 10, 14, 15], "iat": [5, 6, 9, 10, 14, 15, 16], "unix": [5, 6, 9, 10, 14, 15, 16], "timestamp": [5, 6, 9, 10, 13, 14, 15, 16], "numericd": [5, 6, 14], "7519": [5, 6, 9, 10, 13, 14], "6": [5, 6, 7, 9, 10, 14, 15], "exp": [5, 6, 9, 10, 14, 15, 16], "expiri": [5, 6, 14], "materi": [5, 6, 7, 9], "confirm": [5, 6], "declar": 5, "recipi": 5, "rfc7800": [5, 13, 15], "vct": 5, "obtain": [5, 6, 7, 9, 10, 14, 15, 16], "For": [5, 6, 7, 9, 14, 16], "case": [5, 6, 9, 10, 14], "personidentificationdata": [5, 6], "verified_claim": [5, 9, 10], "element": [5, 7, 9, 12], "regard": [5, 9, 10, 14, 15], "structur": [5, 7, 9, 16], "trust_framework": [5, 7, 9], "oid": 5, "assurance_level": [5, 7, 9], "evid": [5, 6, 7, 9], "convei": [5, 14], "least": [5, 6, 7, 9, 10, 16], "electronic_record": [5, 7, 9], "record": [5, 7, 9], "provis": [5, 15], "cie": [5, 6], "gov": [5, 7, 9, 10], "mean": [5, 6], "cointain": 5, "organization_nam": [5, 6, 7, 9, 10, 14, 16], "organ": [5, 6, 9, 10, 12, 14, 16], "act": [5, 6, 9, 10, 14], "organization_id": [5, 7, 9], "ipa": 5, "urn": [5, 6, 15, 16], "ipa_cod": 5, "country_cod": [5, 7, 9], "countri": 5, "iso3166": 5, "alpha": 5, "e": [5, 6, 7, 9, 10, 12, 14, 16], "g": [5, 6, 12, 13, 14, 16], "syntax": [5, 13], "note": [5, 6, 14], "thu": [5, 14, 16], "give": [5, 7, 9, 10, 14, 15], "without": [5, 6, 12, 14, 15], "given_nam": [5, 6, 7, 9, 10, 14], "core": [5, 6], "0": [5, 6, 7, 9, 10, 13, 14, 15, 16], "family_nam": [5, 6, 7, 9, 10, 14], "birth_dat": [5, 7, 9], "unique_id": [5, 6, 9, 10], "anpr": 5, "given": [5, 6, 9, 10, 14], "regist": [5, 6], "resid": [5, 9, 10], "popul": [5, 9, 10], "tax_id_cod": [5, 6], "tax": [5, 6], "etsi": 5, "en": [5, 6], "319": 5, "412": 5, "tinit": 5, "italiantaxidentificationnumb": 5, "org": [5, 6, 7, 9, 10, 14, 15, 16], "nzblsxh8udccd7nowxfzafhkxzsrgc9x": 5, "uuid": [5, 6, 7, 9], "6c5c0a49": 5, "b589": 5, "431d": 5, "bae7": 5, "219122a9ec2c": 5, "1683000000": 5, "1883000000": 5, "pidprovid": 5, "pididentificationdata": 5, "ministero": 5, "dell": 5, "interno": 5, "m_it": 5, "xxxxxxxx": 5, "xxxx": 5, "xxxxxxxxxxxx": 5, "mario": 5, "rossi": 5, "1980": 5, "01": [5, 7, 9], "10": [5, 6, 7, 9, 10, 13, 15], "xxxxxxxxxxxxxxxx": 5, "correspond": [5, 6, 7, 9, 10, 14, 15], "verson": 5, "db67gl7ck3tfiiaf7n6_7shvqk0mdymeqcogglkuaaw": 5, "nehrderpynlhy3m5wldwtwz2auhm": 5, "eyjhbgcioijsuzi1niisimtpzci6": 5, "ikjydmzybg5oqu11sfiwn2fqvw1b": 5, "7wg4nt6k26_r3975zcwnvwgoha7b988_3": 5, "vjzbzf6yc": 5, "gd8grxkt1hg8ptnvr5fpghae0vxlldblsijt9adxis8": 5, "4g9lbt38u1eeta1zlvvgffgppcoe3zmbq_zsrdghqa": 5, "eygzj1htywjjhbk2v3b8hv3e_fef": 5, "udffc5ymy77wtq": 5, "icyhqydt_c3u1iqajlficxllahthvelyfz6jxia27qq": 5, "kxig8rwxmtr884xtv7exuhicfpypw6gfvfr07v": 5, "d5oc": 5, "lxgxedaupeuvmkcngr9fzuqodwfqut01gjj7xd4yepa": 5, "sha": [5, 6, 7, 9], "kty": [5, 6, 7, 9, 10, 14, 15, 16], "ec": [5, 6, 7, 9, 10, 14, 15, 16], "crv": [5, 6, 7, 9, 14, 15, 16], "p": [5, 6, 13, 14, 15, 16], "x": [5, 6, 7, 9, 10, 14, 15, 16], "tcaer19zvu3ohf4j4w4vfsvohip1ilildls7vcegemc": 5, "y": [5, 6, 7, 9, 13, 14, 15, 16], "zxjiwwbzmqghvwkvq4hbsiirsvfuecce6t4jt9f2hzq": 5, "wyi1n212ewnuadv5wknys0xanxhuzlv3iiwgimlhdciside2odmwmdawmdbd": 5, "57mvycth5yzcrklz5xnfuw": 5, "zmhbfh9set9czqaomvrxdmgwiouzxrkspkp9fdhvj3i": 5, "wyjrdwnyqm1sb19otwfjrky1odvsemfriiwginnvdxjjzsisihsib3jnyw5p": 5, "emf0aw9ux25hbwuioiaitwluaxn0zxjvigrlbgwnsw50zxjubyisicjvcmdh": 5, "bml6yxrpb25fawqioiaidxjuomv1zgk6axq6b3jnyw5pemf0aw9ux2lkomlw": 5, "yv9jb2rlom1faxqilcaiy291bnryev9jb2rlijogikluin1d": 5, "kucrbmlo_hmaiff585rzaq": 5, "wyjove5sb09pdvzwunrgnknfenrkovp3iiwgimv2awrlbmnliiwgw3sidhlw": 5, "zsi6icjlbgvjdhjvbmljx3jly29yzcisicjyzwnvcmqioib7il9zzci6ifsi": 5, "wk1iykziovnlvdldwlfht01wclhetudxsw91elhss3nws3a5zkrodkozssjd": 5, "lcaidhlwzsi6icjodhrwczovl2v1zgkud2fsbgv0lmnpzs5nb3yuaxqifx1d": 5, "xq": 5, "ntnrooiuvvrtf6ceztd9zw": 5, "wyjgrfntugdnekdcvxdrteheu0u2d1friiwginvuaxf1zv9pzcisicj4ehh4": 5, "ehh4ec14ehh4lxh4ehgtehh4ec14ehh4ehh4ehh4ehgixq": 5, "fdsspggzgbuwqlhdse6wqq": 5, "wyjlwjhlnxdwrxredmixemltuee0rhpbiiwgimdpdmvux25hbwuilcaitwfi": 5, "aw8ixq": 5, "kz8e5wvetdvb1zispa4dza": 5, "wyjwwjvnunlpehbwv1p1sexvsi15aljniiwgimzhbwlsev9uyw1liiwgiljv": 5, "c3npil0": 5, "pz5mryoxpvwzuhloj": 5, "yjrg": 5, "wyjqdfz1s0nwbjdivgnickfnx3nlvwjriiwgimjpcnrox2rhdguilcaimtk4": 5, "mc0wms0xmcjd": 5, "jtvukcpn7btchrag_seubq": 5, "wyi0a3nbejzitvvletzadk4xadhirhvriiwginrhef9pzf9jb2rliiwgilrj": 5, "tklulvhywfhywfhywfhywfhywfgixq": 5, "4ksaz6bmuky6zvn1h8hduq": 5, "eyjhbgcioiairvmyntyilcaidhlwijogimv4yw1wbgurc2qtand0in0": 5, "eyjfc2qioibb": 5, "ijdxrzruvdzlmjzfujm5nzv6y3duvndnb0hbn2i5odhfmy12snpiwmy2wwmixswgimlz": 5, "cyi6icjodhrwczovl3bpzhbyb3zpzgvylmv4yw1wbguub3jniiwgimv4cci6ide4odmw": 5, "mdawmdasicjzdwiioiaitnpithnyadh1renjzddub1dyrlpbzkhrefpzukddovhziiwg": 5, "imp0asi6icj1cm46dxvpzdo2yzvjmge0os1intg5ltqzmwqtymflny0ymtkxmjjhowvj": 5, "mmmilcaic3rhdhvzijogimh0dhbzoi8vcglkchjvdmlkzxiuzxhhbxbszs5vcmcvc3rh": 5, "dhvziiwginzjdci6icjqawrjzgvudglmawnhdglvbkrhdgeilcaidmvyawzpzwrfy2xh": 5, "aw1zijogeyj2zxjpzmljyxrpb24ioib7il9zzci6ifsiz2q4z1j4s1qxagc4chrudli1": 5, "zlbhagflmfzybgxeymxzaupuowfkegltocjdlcaidhj1c3rfznjhbwv3b3jrijogimvp": 5, "zgfziiwgimfzc3vyyw5jzv9szxzlbci6icjoawdoin0sicjjbgfpbxmioib7il9zzci6": 5, "ifsingc5bej0mzhvmuvlveexemx2dkdmrmdqugnvztn6bwjrx3ptukrnsffhrsisicjf": 5, "wwd6sjfovflxsmpoqksyvjnioehwm2vfzkvmlvvkzmzjnxltwtc3v3rriiwgikljwuhr": 5, "ewrux0mzvtfjcwfkbezpy3hmbgfiveh2rwx5rlo2snhpyti3cveilcais3hjrzhyv1ht": 5, "dfi4odr4vfy3zvh1seldzlbzuhc2z0z2zniwn3ytzdvvyyisicjswgd4rurbdvblvxzt": 5, "a2nor3i5rlp1cw9kd0zxvvqwmwdkajd4zdr5rvbbil19fswgil9zzf9hbgcioiaic2hh": 5, "lti1niisicjjbmyioib7imp3ayi6ihsia3r5ijogikvdiiwgimnydii6icjqlti1nii": 5, "icj4ijogilrdquvsmtladnuzt0hgngo0vzr2zlnwb0hjudfjtglsrgxzn3zdzudlbwmi": 5, "lcaiesi6icjaegppv1diwk1rr0hwv0twutroylnjaxjzvmz1zwndrtz0ngpuouyysfpr": 5, "in19fq": 5, "1xdaqlpgmm0bbdqryv0thrwtgrikzq75jjvhgyfwasu8sopmhumzsta4ohjkc": 5, "le1mv3ub6dymfkenoal8r1yrw": 5, "wyi1n212ewnuadv5wknys0xanxhuzlv3iiwgimlhdc": 5, "iside2odmwmdawmdbd": 5, "wyjrdwnyqm1sb19otwfjrky1odvsemfriiwginnvdxjjzsisi": 5, "hsib3jnyw5pemf0aw9ux25hbwuioiaitwluaxn0zxjvigrlbgwnsw50zxjubyisicjvc": 5, "mdhbml6yxrpb25fawqioiaidxjuomv1zgk6axq6b3jnyw5pemf0aw9ux2lkomlwyv9jb": 5, "2rlom1faxqilcaiy291bnryev9jb2rlijogikluin1d": 5, "wyjove5sb09pdvzwunrgnknf": 5, "enrkovp3iiwgimv2awrlbmnliiwgw3sidhlwzsi6icjlbgvjdhjvbmljx3jly29yzci": 5, "icjyzwnvcmqioib7il9zzci6ifsiwk1iykziovnlvdldwlfht01wclhetudxsw91elh": 5, "s3nws3a5zkrodkozssjdlcaidhlwzsi6icjodhrwczovl2v1zgkud2fsbgv0lmnpzs5n": 5, "b3yuaxqifx1dxq": 5, "wyjgrfntugdnekdcvxdrteheu0u2d1friiwginvuaxf1zv9pzcisi": 5, "cj4ehh4ehh4ec14ehh4lxh4ehgtehh4ec14ehh4ehh4ehh4ehgixq": 5, "wyjlwjhlnxdwrx": 5, "redmixemltuee0rhpbiiwgimdpdmvux25hbwuilcaitwfyaw8ixq": 5, "wyjwwjvnunlpehb": 5, "wv1p1sexvsi15aljniiwgimzhbwlsev9uyw1liiwgiljvc3npil0": 5, "wyjqdfz1s0nwbjd": 5, "ivgnickfnx3nlvwjriiwgimjpcnrox2rhdguilcaimtk4mc0wms0xmcjd": 5, "wyjxrgtknk": 5, "pztmhernzmudrzmwhrzhlbiiwginrhef9pzf9jb2rliiwgilrjtklulvhywfhywfhywf": 5, "hywfhywfgixq": 5, "disabilitycard": 5, "pdnd": [5, 7, 9], "istituto": [5, 7, 9], "nazional": 5, "della": 5, "previdenza": 5, "social": 5, "inp": 5, "document_numb": [5, 7, 9], "xxxxxxxxxx": 5, "expiry_d": [5, 7, 9], "2024": [5, 7, 9], "constant_attendance_allow": 5, "true": [5, 6, 7, 9, 10], "previou": [5, 6, 9, 10], "decod": [5, 6, 9, 10, 15], "both": [5, 7, 9, 10, 12, 14, 15, 16], "d126a6a856f7724560484fa9dc59d195": 5, "stskq0yfy31zh3yp2nn_nfnd7h9q18du3oea1dc5lrc": 5, "3humfjicyhdhzjl": 5, "oed1vknqa10ivayed1dcckfruaa": 5, "f90skk9niqchielkhy_ult_9fgqy": 5, "rydvy3e0qr96": 5, "dfrmuvonzdgealzcgwk3ufmc_4ept3y9n7xhwzlcyxo": 5, "ji86hs1v3d41tu5jqw4owcwtjdutuwp1ewqocuzzexk": 5, "qfuzrqugcbbbkae4q9eqvcsznzj2rnndlg8q606rlsm": 5, "emf0aw9ux25hbwuioiaisxn0axr1dg8gtmf6aw9uywxligrlbgxhifbyzxzp": 5, "zgvuemegu29jawfszsisicjvcmdhbml6yxrpb25fawqioiaidxjuomv1zgk6": 5, "axq6b3jnyw5pemf0aw9ux2lkomlwyv9jb2rlomluchmilcaiy291bnryev9j": 5, "b2rlijogikluin1d": 5, "cwz1enjrdudjykjcs2ffnfe5zxfwq1n6bnpkmnjobmrmrzhxnja2ukxztsjd": 5, "lcaidhlwzsi6icjodhrwczovl2v1zgkud2fsbgv0lnbkbmquz292lml0in19": 5, "xv0": 5, "wyjgrfntugdnekdcvxdrteheu0u2d1friiwgimrvy3vtzw50x251bwjlcii": 5, "icjywfhywfhywfhyil0": 5, "wyjxrgtknkpztmhernzmudrzmwhrzhlbiiwgimv4cglyev9kyxrliiwgijiw": 5, "mjqtmdetmdeixq": 5, "wdkd6jsnhdfvlp4s1hqdya": 5, "wyjezfdxs2g3d2rjnvzbeettdnhzwfzriiwgimnvbnn0yw50x2f0dgvuzgfu": 5, "y2vfywxsb3dhbmnliiwgdhj1zv0": 5, "ddwqkh7wdi5vaxksvxsxvq": 5, "cyi6icjodhrwczovl2lzc3vlci5legftcgxllm9yzyisicjlehaioiaxodgzmdawmdaw": 5, "lcaic3viijogik56ykxzwgg4durdy2q3bm9xwezaqwzia3hac1jhqzlycyisicjqdgki": 5, "oiaidxjuonv1awq6nmm1yzbhndktyju4os00mzfklwjhztctmje5mtiyytllyzjjiiwg": 5, "inn0yxr1cyi6icjodhrwczovl2lzc3vlci5legftcgxllm9yzy9zdgf0dxmilcaidmn0": 5, "ijogikrpc2fiawxpdhldyxjkiiwginzlcmlmawvkx2nsywltcyi6ihsidmvyawzpy2f0": 5, "aw9uijogeyjfc2qioibbinnuc2txmhlgetmxwkgzwvaybk5fbkzuzddioxexogrvm29f": 5, "ytfeqzvmummixswginrydxn0x2zyyw1ld29yayi6icjlawrhcyisicjhc3n1cmfuy2vf": 5, "bgv2zwwioiaiaglnacj9lcaiy2xhaw1zijogeyjfc2qioibbijnodw1gamldwuhkshpq": 5, "tc1prwqxdktuuwexmgl2yvlfzdfkq0nrzlj1yueilcairvlnekoxafrzv0pqaejlmlyz": 5, "yjhivjnlx2zfzi1vzgzmyzv5bvk3n1d0usisicjgotbts0s5bklry0hjrwxrsflfdwx0": 5, "xzlgr3fzzs1sewr2wtnfmhfsotzziiwgikljwuhrewrux0mzvtfjcwfkbezpy3hmbgfi": 5, "veh2rwx5rlo2snhpyti3cveilcaizgzybvv2b25argdlywxaq0d3azn1zm1jxzrlchqz": 5, "etlon3hov1psq3l4byisicjqatg2sfmxdjnendf0vtvkcvc0b1ddd1rkrhvuvxdwmwv3": 5, "cw9dvxp6rvhriiwgimxyz3hfref1ugvvdm1ry05hcjlgwnvxb2r3rnfvvdaxz0pqn3hk": 5, "nhlfueeixx19lcaix3nkx2fszyi6icjzagetmju2iiwgimnuzii6ihsiandrijogeyjr": 5, "dhkioiairumilcaiy3j2ijogilatmju2iiwgingioiaivenbrvixovp2dtnpsey0ajrx": 5, "nhzmu1zvselqmulmawxebhm3dknlr2vtyyisicj5ijogilp4amlxv2jatvfhsfzxs1zr": 5, "nghiu0lpcnnwznvly0nfnnq0alq5rjjiwleifx19": 5, "hbgwxboqtlvptfygyvdhrgnockw": 5, "aw_hqy9gpxg4oxixejlemvtoawyftqinnysunaagd6aemjw7jlshdm9noga": 5, "wyi1n212": 5, "ewnuadv5wknys0xanxhuzlv3iiwgimlhdciside2odmwmdawmdbd": 5, "wyjrdwnyqm1sb19": 5, "otwfjrky1odvsemfriiwginnvdxjjzsisihsib3jnyw5pemf0aw9ux25hbwuioiaisxn": 5, "0axr1dg8gtmf6aw9uywxligrlbgxhifbyzxzpzgvuemegu29jawfszsisicjvcmdhbml": 5, "6yxrpb25fawqioiaidxjuomv1zgk6axq6b3jnyw5pemf0aw9ux2lkomlwyv9jb2rloml": 5, "uchmilcaiy291bnryev9jb2rlijogikluin1d": 5, "wyjove5sb09pdvzwunrgnknfenrkov": 5, "p3iiwgimv2awrlbmnliiwgw3sidhlwzsi6icjlbgvjdhjvbmljx3jly29yzcisicjyzw": 5, "nvcmqioib7il9zzci6ifsicwz1enjrdudjykjcs2ffnfe5zxfwq1n6bnpkmnjobmrmrz": 5, "hxnja2ukxztsjdlcaidhlwzsi6icjodhrwczovl2v1zgkud2fsbgv0lnbkbmquz292lm": 5, "l0in19xv0": 5, "wyjgrfntugdnekdcvxdrteheu0u2d1friiwgimrvy3vtzw50x251bwjlci": 5, "isicjywfhywfhywfhyil0": 5, "wyjlwjhlnxdwrxredmixemltuee0rhpbiiwgimdpdmvux2": 5, "5hbwuilcaitwfyaw8ixq": 5, "wyjwwjvnunlpehbwv1p1sexvsi15aljniiwgimzhbwlsev9": 5, "uyw1liiwgiljvc3npil0": 5, "wyjqdfz1s0nwbjdivgnickfnx3nlvwjriiwgimjpcnrox2r": 5, "hdguilcaimtk4mc0wms0xmcjd": 5, "wyjxrgtknkpztmhernzmudrzmwhrzhlbiiwgimv4cg": 5, "lyev9kyxrliiwgijiwmjqtmdetmdeixq": 5, "wyi0a3nbejzitvvletzadk4xadhirhvriiw": 5, "ginrhef9pzf9jb2rliiwgilrjtklulvhywfhywfhywfhywfhywfgixq": 5, "wyjezfdxs2g3": 5, "d2rjnvzbeettdnhzwfzriiwgimnvbnn0yw50x2f0dgvuzgfuy2vfywxsb3dhbmnliiwg": 5, "dhj1zv0": 5, "iso": [5, 7, 9, 10], "iec": 5, "18013": [5, 7, 9, 10], "standard": [5, 14], "born": 5, "drive": 5, "licens": 5, "8949": 5, "concis": 5, "binari": 5, "represent": [5, 14], "eu": [5, 9, 10, 14, 15, 16], "europa": [5, 9, 10, 14], "eudiw": [5, 6, 9, 10, 14, 15], "revers": 5, "domain": [5, 14], "util": [5, 7, 9, 16], "consist": [5, 6, 16], "while": [5, 12], "domest": [5, 7, 9], "tstr": [5, 7, 9], "text": 5, "being": [5, 6, 7, 9, 12, 15], "wai": [5, 6], "track": [5, 14, 15], "backward": 5, "compat": [5, 14, 16], "understand": 5, "evolv": 5, "uint": [5, 7, 9], "unsign": 5, "int": 5, "ok": [5, 6, 9, 10, 15], "normal": 5, "bstr": [5, 7, 9], "byte": [5, 7, 9], "collect": [5, 14], "doctyp": [5, 6, 7, 9, 10], "issuersign": [5, 7, 9], "tag": 5, "24": [5, 7, 9, 10, 14], "major": 5, "howev": [5, 6], "issuerauth": [5, 7, 9], "mso": 5, "cose": 5, "sign1": 5, "abov": [5, 6, 7, 9, 12, 14], "devicesign": [5, 7, 9], "ad": [5, 6, 9, 10], "phase": [5, 6, 7, 9, 12, 14, 15], "deviceauth": [5, 7, 9], "either": [5, 6, 9, 10], "devicesignatur": [5, 7, 9], "devicemac": 5, "two": [5, 6, 7, 9, 10], "empti": [5, 7, 9], "latter": [5, 6], "issuersigneditembyt": [5, 7, 9], "bitsr": 5, "mark": [5, 6, 14], "diagnost": [5, 7, 9], "digestid": [5, 7, 9], "integ": [5, 6], "valuedigest": [5, 7, 9], "issuersigneditem": [5, 7, 9], "minimum": [5, 6, 7, 9], "16": [5, 6, 7, 9, 10], "elementidentifi": [5, 7, 9], "elementvalu": [5, 7, 9], "depend": [5, 6, 9, 10, 16], "issue_d": [5, 7, 9], "cbortag": 5, "1004": [5, 7, 9], "expir": [5, 6, 9, 10, 14, 15, 16], "issuing_author": [5, 7, 9], "issuing_countri": [5, 7, 9], "3166": 5, "As": 5, "9052": 5, "unprotect": 5, "rfc8152": 5, "x5chain": 5, "label": 5, "33": [5, 7, 9], "9360": 5, "referenc": [5, 6], "509": [5, 14, 15], "aim": 5, "abl": [5, 6, 14, 15], "invalid": [5, 6, 7, 9, 14, 15], "mobilesecurityobject": 5, "mobilesecurityobjectbyt": 5, "validityinfo": [5, 7, 9], "datetim": [5, 16], "validfrom": [5, 7, 9], "validuntil": [5, 7, 9], "digestalgorithm": [5, 7, 9], "group": 5, "devicekeyinfo": [5, 7, 9], "devicekei": [5, 7, 9], "keyauthor": 5, "keyinfo": 5, "store": [5, 6, 7, 9, 12, 14, 16], "devicesigneditem": 5, "af": 5, "a366737461747573006776657273696f6e63312e3069646f63756d656e747381a267646f6354797065781865752e6575726f70612e65632e65756469772e7069642e316c6973737565725369676e6564a26a697373756572417574688443a10126a1182159021930820215308201bca003020102021404ad06a30c1a6dc6e93be0e2e8f78dcafa7907c2300a06082a8648ce3d040302305b310b3009060355040613025a45312e302c060355040a0c25465053204d6f62696c69747920616e64205472616e73706f7274206f66205a65746f706961311c301a06035504030c1349414341205a65746573436f6e666964656e73301e170d3231303932393033333034355a170d3232313130333033333034345a3050311a301806035504030c114453205a65746573436f6e666964656e7331253023060355040a0c1c5a65746f70696120436974792044657074206f662054726166666963310b3009060355040613025a453059301306072a8648ce3d020106082a8648ce3d030107034200047c5545e9a0b15f4ff3ce5015121e8ad3257c28d541c1cd0d604fc9d1e352ccc38adef5f7902d44b7a6fc1f99f06eedf7b0018fd9da716aec2f1ffac173356c7da3693067301f0603551d23041830168014bba2a53201700d3c97542ef42889556d15b7ac4630150603551d250101ff040b3009060728818c5d050102301d0603551d0e04160414ce5fd758a8e88563e625cf056bfe9f692f4296fd300e0603551d0f0101ff040403020780300a06082a8648ce3d0403020347003044022012b06a3813ffec5679f3b8cddb51eaa4b95b0cbb1786b09405e2000e9c46618c02202c1f778ad252285ed05d9b55469f1cb78d773671f30fe7ab815371942328317c59032ad818590325a667646f6354797065781865752e6575726f70612e65632e65756469772e7069642e316776657273696f6e63312e306c76616c6964697479496e666fa3667369676e6564c074323032332d30322d32325430363a32333a35365a6976616c696446726f6dc074323032332d30322d32325430363a32333a35365a6a76616c6964556e74696cc074323032342d30322d32325430303a30303a30305a6c76616c756544696765737473a2781865752e6575726f70612e65632e65756469772e7069642e31ac015820a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a025820cd372fb85148700fa88095e3492d3f9f5beb43e555e5ff26d95f5a6adc36f8e6035820e67e72111b363d80c8124d28193926000980e1211c7986cacbd26aacc5528d48045820f7d062d662826ed95869851db06bb539b402047baee53a00e0aa35bfbe98265d0658202a132dbfe4784627b86aa3807cd19cfeff487aab3dd7a60d0ab119a72e736936075820bdca9e8dbca354e824e67bfe1533fa4a238b9ea832f23fb4271ebeb3a5a8f7200858202c0eaec2f05b6c7fe7982683e3773b5d8d7a01e33d04dfcb162add8bd99bee9a095820bfe220d85657ccec3c67e7db1df747e9148a152334bb6d4b65b273279bcc36ec0a582018e38144f5044301d6a0b4ec9d5f98d4cd950e6ea2c29b849cbd457da29b6ad30b58203c71d2f0efa09d9e3fbbdffd29204f6b292c9f79570aef72dd86c91f7a3aa5c50c582065743d58d89d45e52044758f546034fd13a4f994bc270cdfa7844f74eb3f4b6e0d5820b4a8eb5d523bffa17b41bda12ddc7da32ae1e5f7ff3dcc394a35401f16919bbf781b65752e6575726f70612e65632e65756469772e7069642e69742e31a10e58209d6c11644651126c94acdaf0803e86d4c71d15d3b2712a14295416734efd514d6d6465766963654b6579496e666fa1696465766963654b6579a401022001215820ba01aea44eee1e338eb2f04e279dbd51b34655783ee185150838c9a7a7c4db7122582025ba0044439a3871a7b975a0994a85e79b705a9ac263b3fe899b0a93412ee8c96f646967657374416c676f726974686d675348412d32353658400813c28fd62f2602cbc14724e5865733c44a0fca589b55c085ec9d5c725d6cce25ba0044439a3871a7b975a0994a85e79b705a9ac263b3fe899b0a93412ee8c96a6e616d65537061636573a2781865752e6575726f70612e65632e65756469772e7069642e318cd818586da4686469676573744944016672616e646f6d5820156df9227ad341eaa61aabd301106fd21bdc18820e01dfc16bcf5fecc447111b71656c656d656e744964656e7469666965726b6578706972795f646174656c656c656d656e7456616c7565d903ec6a323032342d30322d3232d818586fa4686469676573744944026672616e646f6d5820a3a1f13f05544d03a5b50b5fdb78465808393bcf3b7953a345fe28f820c7be0d71656c656d656e744964656e7469666965726d69737375616e63655f646174656c656c656d656e7456616c7565d903ec6a323032332d30322d3232d8185866a4686469676573744944036672616e646f6d5820852591f90f2c9ded57a03632e2c1322ab52a082a431e71a4149a6830c8f1ad0c71656c656d656e744964656e7469666965726f69737375696e675f636f756e7472796c656c656d656e7456616c7565624954d818587ca4686469676573744944046672616e646f6d5820d1d587b3512acce15c4f6b20944ceb002a464e4a158389788563408873c3fce571656c656d656e744964656e7469666965727169737375696e675f617574686f726974796c656c656d656e7456616c7565764d696e69737465726f2064656c6c27496e7465726e6fd8185864a4686469676573744944056672616e646f6d582094fdd7609c0e73dc8589b5cab11e1d9058cf8bff8a336da5f81fcba055396a0f71656c656d656e744964656e7469666965726a676976656e5f6e616d656c656c656d656e7456616c7565654d6172696fd8185865a4686469676573744944066672616e646f6d5820660c0a7bf79e0e0261ca1547a4294fb808aa70738f424b13ab1b9440b566ae1371656c656d656e744964656e7469666965726b66616d696c795f6e616d656c656c656d656e7456616c756565526f737369d818586ba4686469676573744944076672616e646f6d5820315c53491286488fa07f5c2ce67135ef5c9959c3469c99a14e9b6dc924f9eba571656c656d656e744964656e746966696572696269727468646174656c656c656d656e7456616c7565d903ec6a313935362d30312d3132d818587da4686469676573744944086672616e646f6d5820764ef39c9d01f3aa6a87f441603cfe853fba3cee3bc2c168bcc9e96271d6e06371656c656d656e744964656e74696669657269756e697175655f69646c656c656d656e7456616c7565781e78787878787878782d7878782d787878782d787878787878787878787878d81858e8a4686469676573744944096672616e646f6d5820ad20b3b9c67aed8089ff33ecdc108781c3b49b81cd7a3f059d2fe236977037b271656c656d656e744964656e74696669657275766572696669636174696f6e2e65766964656e63656c656c656d656e7456616c756581a2647479706571656c656374726f6e69635f7265636f7264667265636f7264a264747970656c65696461732e69742e63696566736f75726365a3716f7267616e697a6174696f6e5f6e616d656c65696461732e69742e6369656f6f7267616e697a6174696f6e5f6964646d5f69746c636f756e7472795f636f6465626974d8185879a46864696765737449440a6672616e646f6d5820c12314b3695d1401505187e2113115e2f7b4a14b135dee320f5e6df81275f17671656c656d656e744964656e746966696572667374617475736c656c656d656e7456616c7565781d68747470733a2f2f70696470726f76696465722e69742f737461747573d8185877a46864696765737449440b6672616e646f6d5820a7b6a9027ed97f25df96dd0eab8093b264a3bd6a1d5b24228f3fc5b18ef835fb71656c656d656e744964656e746966696572781c766572696669636174696f6e2e74727573745f6672616d65776f726b6c656c656d656e7456616c7565656569646173d8185876a46864696765737449440c6672616e646f6d5820c76ce2ae4e9be1db07a5cb397b54ace3eccc786d3f85e4348b923dee059783db71656c656d656e744964656e746966696572781c766572696669636174696f6e2e6173737572616e63655f6c6576656c6c656c656d656e7456616c75656468696768781b65752e6575726f70612e65632e65756469772e7069642e69742e3181d8185877a46864696765737449440d6672616e646f6d5820717df3f583b1484366c33a1f869f2b5d201d466a8b589c79ab1a2d85e595432571656c656d656e744964656e7469666965726d7461785f69645f6e756d6265726c656c656d656e7456616c75657554494e49542d585858585858585858585858585858": 5, "notat": [5, 7, 9, 13], "h": [5, 7, 9, 13], "30820215308201bca003020102021404ad30c": 5, "x_509": 5, "2023": [5, 7, 9, 13], "02": [5, 7, 9], "22t06": 5, "23": [5, 7, 9, 10], "56z": 5, "22t00": 5, "00": 5, "00z": 5, "0f1571a97ffb799cc8fcdf2ba4fc2909929": 5, "0cdfe077400432c055a2b69596c90": 5, "e2382149255ae8e955af9b8984395": 5, "bbc77e6cca981a3ad0c3e544edf86": 5, "bb6e6c68d1b4b4ec5a2ae9206f5t4": 5, "f8a5966e6dac9970e0334d8f75e25": 5, "defdf1aa746718016ef1b94bfe5r6": 5, "afc5a127be44753172844b13491d8": 5, "afc5a127be44753172844b13492h4": 5, "11": [5, 6, 7, 9, 10], "dja5a127be44753172844b13492h4": 5, "12": [5, 6, 7, 9, 10], "kdl5a127be44753172844b13492h4": 5, "13": [5, 6, 7, 9, 10, 15], "f9ee4d36f67dbd75e23311ac1c29": 5, "ec2": [5, 7, 9], "elipt": 5, "curv": [5, 7, 9], "coordin": [5, 7, 9], "pair": [5, 6, 7, 9, 15], "p256": [5, 7, 9], "b820963964e53af064686dd9218303494a": 5, "coordiant": 5, "0a6da0af437e2943f1836f31c678d89298e9": 5, "ccordiant": 5, "1ad0d6a7313efdc38fcd765852fa2bd43debf48bf5a580d": 5, "e0b70bcefbd43686f345c9ed429343aa": 5, "22": [5, 7, 9, 10], "ae84834f389ee69888665b90a3e4fcc": 5, "960cb15a2ea9b68e5233ce902807aa95": 5, "9d3774bd5994ccfed248674b32a4f76a": 5, "eb12193dc66c6174530cdc29b274381f": 5, "db143143538f3c8d41dc024f9cb25c9d": 5, "6059ff1ce27b4997b4ade1de7b01dc60": 5, "1956": [5, 7, 9], "53c15c57b3b076e788795829190220b4": 5, "xxx": 5, "cad1f6a38f603451f1fa653f81ff309d": 5, "564e3c65d46d06fedeb0e7293a86gf": 5, "d884e5d5ef4cfc93fdb1e4ee8f3923": 5, "11aa7273a2d2daa973f5951f0c34c2fba": 5, "tax_id_numb": [5, 9, 10], "xxxxxxxxxxxxxxx": 5, "releas": [6, 9, 10, 12], "genuin": 6, "entir": [6, 9, 10, 14, 16], "product": [6, 16], "own": [6, 7, 9, 12, 14, 15, 16], "compliant": [6, 7, 9, 10], "assess": [6, 14], "cab": 6, "graphic": 6, "compos": [6, 9, 10], "oidc4vci": 6, "bitbucket": 6, "io": [6, 16], "1_0": 6, "html": 6, "_": [6, 14], "eid": [6, 16], "saml2": [6, 12], "preexist": 6, "eg": [6, 9, 10, 14], "spid": [6, 9, 10, 14], "send": [6, 7, 9, 10, 15], "get": [6, 9, 10, 14, 15, 16], "fig": 6, "show": [6, 9, 10], "highlight": 6, "step": [6, 7, 9, 10, 16], "pictur": [6, 9, 10], "setup": [6, 7, 9], "start": [6, 9, 10, 14, 15], "preliminari": 6, "out": [6, 7, 9, 14], "assert": [6, 16], "share": 6, "discoveri": [6, 9, 10, 14], "discov": 6, "subordin": [6, 14], "inspect": 6, "filter": [6, 9, 10], "ani": [6, 7, 9, 10, 12, 14], "proxi": [6, 9, 10], "bound": [6, 14, 15], "held": 6, "expand": 6, "assumpt": 6, "most": 6, "look": 6, "capabl": [6, 9, 10, 14, 16], "9126": 6, "pkce": 6, "7636": 6, "protocol": [6, 7, 9, 10, 13, 14], "well": [6, 9, 10, 14, 16], "fresh": [6, 9, 10, 14], "previous": [6, 9, 10, 14], "hereaft": 6, "prevent": [6, 9, 10, 15, 16], "swap": 6, "attack": 6, "code_verifi": 6, "enough": 6, "entropi": [6, 9, 10], "unreserv": 6, "43": 6, "maximum": [6, 14], "128": [6, 9, 10], "impract": 6, "guess": 6, "client_assert": 6, "oauth": [6, 9, 10, 13, 15, 16], "client": [6, 7, 9, 10, 14, 16], "sinc": [6, 9, 10, 12, 14, 16], "less": [6, 7, 9, 14], "precis": 6, "second": [6, 7, 9, 10], "authorization_detail": 6, "rar": 6, "9396": 6, "upon": [6, 9, 10], "receipt": 6, "9101": [6, 9, 10], "retriev": [6, 7, 9, 10, 15, 16], "jw": [6, 9, 10, 13, 14, 15, 16], "client_id": [6, 9, 10], "match": [6, 9, 10], "aud": [6, 9, 10, 15], "reject": [6, 9, 10], "request_uri": [6, 9, 10], "deriv": [6, 7, 9, 14], "expos": [6, 9, 10, 14], "far": 6, "minut": 6, "mitig": 6, "replai": 6, "host": [6, 9, 10, 15], "www": [6, 9, 10, 15], "urlencod": [6, 9, 10, 15], "response_typ": [6, 9, 10, 15], "thumprint": 6, "code_challeng": 6, "e9melhoa2owvfremtjguchaoek1t8urwbugjsstw": 6, "cm": 6, "code_challenge_method": 6, "s256": 6, "eyjhbgcioijsuzi1niisimtpzci6imsyymrjin0": 6, "ew0kic": 6, "jpc3mioiaiczzcagrsa3f0myisdqogimf1zci6icjodhrwczovl3nlcnzlci5legftcgxllmnvbsisdqo": 6, "ginjlc3bvbnnlx3r5cguioiaiy29kzsbpzf90b2tlbiisdqogimnsawvudf9pzci6icjznkjozfjrcxqz": 6, "iiwnciaicmvkaxjly3rfdxjpijogimh0dhbzoi8vy2xpzw50lmv4yw1": 6, "client_assertion_typ": 6, "ietf": [6, 15, 16], "param": [6, 15, 16], "wia": 6, "pop": 6, "appli": [6, 9, 10, 14], "vbexjksm45xphtanncig6mcyuu4jfgnzopgukvogg9c": [6, 9, 10, 15], "ad25868c": 6, "8377": 6, "479b": 6, "8094": 6, "46fb1e797625": 6, "1686645115": [6, 15], "1686652315": [6, 15], "fifyx03bnosd8m6gyqifnhnp9cm_sam9tc5nlloiirc": [6, 14], "1672422065": [6, 9, 10], "1672418465": [6, 9, 10], "ac80df576e7109686717bf50b869e882": 6, "fyziol9lf2cekunt2jzxilrdink0upcd": 6, "openid_credenti": 6, "credential_configuration_id": 6, "redirect_uri": [6, 9, 10], "suffici": [6, 9, 10], "larg": 6, "adequ": 6, "short": [6, 7, 9, 14, 16], "risk": [6, 12], "exce": 6, "512": 6, "ascii": 6, "due": 6, "reason": 6, "mani": 6, "phone": [6, 12], "market": 6, "still": [6, 14], "do": [6, 14, 15], "restrict": [6, 9, 10, 12, 14], "1024": 6, "On": 6, "slow": 6, "2g": 6, "caus": 6, "advis": 6, "201": [6, 9, 10, 15], "cach": 6, "bwc4jk": 6, "esc0w8acc191": 6, "y1ltc2": 6, "expires_in": 6, "60": 6, "treat": 6, "duplic": 6, "reload": 6, "refresh": 6, "agent": [6, 9, 10], "result": [6, 7, 9], "submit": 6, "pass": [6, 7, 9], "3aietf": [6, 15], "3aparam": [6, 15], "3aoauth": [6, 15], "3arequest_uri": 6, "3abwc4jk": 6, "consent": [6, 7, 9, 10], "perspect": [6, 9, 10, 14], "prior": 6, "transact": [6, 16], "6749": [6, 13], "intend": [6, 7, 9, 10, 14], "9027": 6, "univers": 6, "local": 6, "so": [6, 7, 9], "resolv": [6, 14], "302": [6, 9, 10], "found": [6, 9, 10], "locat": [6, 7, 9, 10], "splxlobezqqybys6wxsbia": 6, "3a": [6, 9, 10], "2f": [6, 9, 10], "2fpid": 6, "dpop": [6, 13], "instruct": 6, "9449": [6, 13], "certain": [6, 7, 9], "misus": 6, "leak": 6, "stolen": 6, "repli": 6, "tokenrequest": 6, "eyj0exaioijkcg9wk2p3dcisimfszyi6ikvtmju2iiwiandrijp7imt0esi6ik": 6, "vdiiwieci6imw4dezyahgtmzr0vjnoukldukrzoxpda0rscejorjqyvvfvzldwqvdcr": 6, "nmilcj5ijoiovzfngpmx09rx282nhpivfrsy3vosmfqsg10nny5verwcluwq2r2r1j": 6, "qsisimnydii6ilatmju2in19": 6, "eyjqdgkioiitqnddm0vtyzzhy2mybfrjiiwiahrtij": 6, "oiue9tvcisimh0dsi6imh0dhbzoi8vc2vydmvylmv4yw1wbguuy29tl3rva2vuiiwia": 6, "wf0ijoxntyymjyynje2fq": 6, "gxa6t8lp4vfrg8v": 6, "fdwp0a0zdrj8igimlvqrmuvwnqg": 6, "4ptflbdlxiossx0x7nvi": 6, "fnyjk70nfbv37xrzt3lg": 6, "grant_typ": [6, 15], "authorization_cod": 6, "dbjftjez4cvp": 6, "mb92k27uhbuju1p1r_ww1gfwfoejxk": 6, "cb": [6, 9, 10], "15": [6, 9, 10, 15], "success": [6, 9, 10], "c_nonc": 6, "unpredict": 6, "later": 6, "18": [6, 9, 10], "primari": [6, 7, 9, 16], "countermeasur": 6, "against": [6, 14], "200": [6, 9, 10], "access_token": 6, "kz": 6, "8mxk1ealyznwh": 6, "lc": 6, "1fbao": 6, "4ljp": 6, "zspe_neo": 6, "gxu": 6, "token_typ": 6, "2677": 6, "tzign": 6, "snfbp": 6, "c_nonce_expires_in": 6, "86400": 6, "17": [6, 9, 10], "demonstr": [6, 7, 9, 13], "conduct": 6, "explicitli": 6, "asymmetr": [6, 15, 16], "server": [6, 7, 9, 15], "nonc": [6, 9, 10, 15], "furthermor": [6, 14, 16], "creation": [6, 9, 10], "window": 6, "determin": [6, 9, 10, 12, 14, 16], "schema": [6, 14], "registr": [6, 14], "nmilcj5ijoiovzfngpmx09rx282nhpivfrsy3vosmfqsg10nny5verwcluwq2r2r": 6, "1jeqsisimnydii6ilatmju2in19": 6, "eyjqdgkioijlmwozvl9is2ljoc1mquvciiwiahrtij": 6, "oir0vuiiwiahr1ijoiahr0chm6ly9yzxnvdxjjzs5legftcgxllm9yzy9wcm90zwn0z": 6, "wryzxnvdxjjzsisimlhdci6mtu2mji2mjyxocwiyxroijoizlvieu8ycjjam0rantnf": 6, "c05yv0jimhhxwg9htnk1oulps0nbcwtzbvffbyj9": 6, "2ow9rp35yrqzhrtnp86l": 6, "ey71": 6, "optxrimpptoa1plemagr6pxhf8y6": 6, "yqyvnmcw6fy1dqd": 6, "jfxsyomxhajplja": 6, "credential_definit": 6, "proof_typ": 6, "eyjrawqioijkawq6zxhhbxbsztplym": 6, "l8tfrhx": 6, "34tv3hricrdy9zckdlpbhf42uqufwvawbf": 6, "9ve4jf_ok_o64zbttlcunjajhmt6v9tdvru0cdvgrda": 6, "And": 6, "0b434530": 6, "e151": 6, "4c40": 6, "98b7": 6, "74c75a5ef760": 6, "1504699136": 6, "19": [6, 9, 10, 13], "21": [6, 9, 10], "suitabl": 6, "succe": 6, "proceed": 6, "storag": [6, 14], "proce": 6, "pragma": 6, "lupixvcwjk0eot4cxqe1nxk": 6, "wzwmhmn9oqp6yxx0a2l": 6, "fgff7": 6, "ukhla": 6, "insid": 6, "challeng": 6, "per": 6, "iana": 6, "web": [6, 9, 10, 13, 14, 15, 16], "registri": [6, 9, 10, 12, 14, 16], "symmetr": [6, 9, 10], "mac": [6, 9, 10], "7638": [6, 13], "section_3": 6, "assum": [6, 14], "implicit": 6, "side": 6, "end": [6, 7, 9, 10, 14], "alphanumer": 6, "32": [6, 9, 10], "authrequest": 6, "credential_configurations_support": 6, "reus": 6, "alon": 6, "collis": 6, "resist": 6, "under": [6, 9, 10, 12, 16], "v4": 6, "4122": 6, "top": 6, "media": [6, 9, 10, 14, 15, 16], "8259": 6, "strong": [6, 16], "pseudorandom": 6, "lifetim": 6, "posit": 6, "grant": [6, 9, 10, 12, 15, 16], "browser": 6, "serial": 6, "queri": 6, "error": [6, 9, 10], "invalid_dpop_proof": 6, "7515": [6, 13], "8725": [6, 13], "chosen": [6, 9, 10, 16], "7517": [6, 9, 10, 13, 14, 16], "htm": 6, "attach": 6, "9110": 6, "htu": 6, "target": [6, 9, 10], "claimset": 6, "even": [6, 9, 10, 12, 14], "accomplish": [6, 16], "methodolog": 6, "9068": 6, "subjectidtyp": 6, "rp": [6, 9, 10, 14], "jkt": 6, "ath": 6, "denot": 6, "mso_mdoc": [6, 9, 10], "appendix": 6, "renew": [6, 14], "openid_credential_issu": [6, 14], "fanfs3ync9tjicaivhwlvuj3axwggz_98urfaqme": 6, "1649610249": 6, "1649437449": 6, "sig": [6, 9, 10], "1ta": [6, 9, 10], "se": [6, 9, 10], "aqab": [6, 9, 10, 14], "authority_hint": [6, 9, 10, 14, 16], "superior": [6, 14, 16], "credential_issu": 6, "authorization_serv": 6, "authorization_endpoint": [6, 9, 10, 15], "token_endpoint": [6, 16], "pushed_authorization_request_endpoint": 6, "dpop_signing_alg_values_support": 6, "credential_endpoint": 6, "displai": [6, 7, 9], "italiano": 6, "di": 6, "esempio": 6, "logo": [6, 9, 10, 14, 16], "svg": [6, 9, 10, 14, 16], "alt_text": 6, "questo": 6, "newk5qdymekrcppo": 6, "yeytdjvwjmtzasmavt2vm1mb": 6, "vizxalo6dzeeszpxfpgzabtk3ctxtbubiiqpmiyrts": 6, "ff0bded045fe63fe5d1d64dd83b567e0": 6, "cryptographic_binding_methods_support": 6, "credential_signing_alg_values_support": 6, "es384": [6, 9, 10, 14, 15, 16], "proof_types_support": 6, "proof_signing_alg_values_support": 6, "credenzial": 6, "background_color": 6, "12107c": 6, "text_color": 6, "ffffff": 6, "credentialsubject": [6, 9, 10], "nome": 6, "cognom": 6, "birthdat": 6, "nascita": 6, "place_of_birth": 6, "place": 6, "luogo": 6, "identificativo": 6, "univoco": 6, "codic": 6, "fiscal": 6, "homepage_uri": [6, 9, 10, 14, 16], "policy_uri": [6, 9, 10, 16], "privacy_polici": [6, 16], "tos_uri": [6, 16], "info_polici": [6, 16], "logo_uri": [6, 9, 10, 14, 16], "openid_relying_parti": [6, 14], "supervis": [7, 9], "divid": [7, 9], "three": [7, 9, 16], "subphas": [7, 9], "begin": [7, 9], "prompt": [7, 9], "between": [7, 9, 10, 12, 14, 16], "transmit": [7, 9, 10], "rang": [7, 9, 14], "limit": [7, 9, 15], "intercept": [7, 9, 10], "eavesdrop": [7, 9], "exclus": [7, 9], "qr": [7, 9, 10], "up": [7, 9, 10, 14], "stage": [7, 9], "condit": [7, 9, 10], "iso18013": [7, 9], "appropri": [7, 9], "decrypt": [7, 9, 10], "mode": [7, 9, 10, 13], "bluetooth": [7, 9], "low": [7, 9, 16], "energi": [7, 9], "ble": [7, 9], "figur": [7, 9], "illustr": [7, 9], "diagram": [7, 9, 10], "reveal": [7, 9, 12], "temporari": [7, 9], "edevicekei": [7, 9], "priv": [7, 9], "pub": [7, 9], "incorpor": [7, 9], "cipher": [7, 9], "suit": [7, 9], "ellipt": [7, 9], "agreement": [7, 9], "immedi": [7, 9, 14, 16], "after": [7, 9, 10, 15, 16], "final": [7, 9, 10, 14], "a30063312e30018201d818584ba4010220012158205a88d182bce5f42efa59943f33359d2e8a968ff289d93e5fa444b624343167fe225820b16e8cf858ddc7690407ba61d4c338237a8cfcf3de6aa672fc60a557aa32fc670281830201a300f401f50b5045efef742b2c4837a9a3b0e1d05a6917": [7, 9], "embed": [7, 9], "item": [7, 9, 12], "5a88d182bce5f42efa59943f33359d2e8a968ff289d93e5fa444b624343": [7, 9], "167fe": [7, 9], "b16e8cf858ddc7690407ba61d4c338237a8cfcf3de6aa672fc60a557aa32fc67": [7, 9], "deviceretrievalmethod": [7, 9], "fals": [7, 9, 10, 15], "peripher": [7, 9], "central": [7, 9, 12], "45efef742b2c4837a9a3b0e1d05a6917": [7, 9], "scan": [7, 9, 10], "ephemer": [7, 9], "ereaderkei": [7, 9], "newli": [7, 9], "independ": [7, 9], "along": [7, 9, 16], "block": [7, 9], "a26776657273696f6e63312e306b646f63526571756573747381a26c6974656d7352657175657374d818590152a267646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6a6e616d65537061636573a2746f72672e69736f2e31383031332e352e312e4954a375766572696669636174696f6e2e65766964656e6365f4781c766572696669636174696f6e2e6173737572616e63655f6c6576656cf4781c766572696669636174696f6e2e74727573745f6672616d65776f726bf4716f72672e69736f2e31383031332e352e31ab76756e5f64697374696e6775697368696e675f7369676ef47264726976696e675f70726976696c65676573f46f646f63756d656e745f6e756d626572f46a69737375655f64617465f46f69737375696e675f636f756e747279f47169737375696e675f617574686f72697479f46a62697274685f64617465f46b6578706972795f64617465f46a676976656e5f6e616d65f468706f727472616974f46b66616d696c795f6e616d65f46a726561646572417574688443a10126a11821590129308201253081cda00302010202012a300a06082a8648ce3d0403023020311e301c06035504030c15536f6d652052656164657220417574686f72697479301e170d3233313132343130323832325a170d3238313132323130323832325a301a3118301606035504030c0f536f6d6520526561646572204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004aa1092fb59e26ddd182cfdbc85f1aa8217a4f0fae6a6a5536b57c5ef7be2fb6d0dfd319839e6c24d087cd26499ec4f87c8c766200ba4c6218c74de50cd1243b1300a06082a8648ce3d0403020347003044022048466e92226e042add073b8cdc43df5a19401e1d95ab226e142947e435af9db30220043af7a8e7d31646a424e02ea0c853ec9c293791f930bf589bee557370a4c97bf6584058a0d421a7e53b7db0412a196fea50ca6d4c8a530a47dd84d88588ab145374bd0ab2a724cf2ed2facf32c7184591c5969efd53f5aba63194105440bc1904e1b9": [7, 9], "docrequest": [7, 9], "itemsrequest": [7, 9], "un_distinguishing_sign": [7, 9], "driving_privileg": [7, 9, 10], "portrait": [7, 9, 10], "readerauth": [7, 9], "a10126": [7, 9], "308201253081cda00302010202012a300a06082a8648ce3d0403023020311e301c06035504030c15536f6d652052656164657220417574686f72697479301e170d3233313132343130323832325a170d3238313132323130323832325a301a3118301606035504030c0f536f6d6520526561646572204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004aa1092fb59e26ddd182cfdbc85f1aa8217a4f0fae6a6a5536b57c5ef7be2fb6d0dfd319839e6c24d087cd26499ec4f87c8c766200ba4c6218c74de50cd1243b1300a06082a8648ce3d0403020347003044022048466e92226e042add073b8cdc43df5a19401e1d95ab226e142947e435af9db30220043af7a8e7d31646a424e02ea0c853ec9c293791f930bf589bee557370a4c97b": [7, 9], "null": [7, 9], "58a0d421a7e53b7db0412a196fea50ca6d4c8a530a47dd84d88588ab145374bd0ab2a724cf2ed2facf32c7184591c5969efd53f5aba63194105440bc1904e1b9": [7, 9], "comput": [7, 9], "ask": [7, 9, 10, 12, 16], "permiss": [7, 9], "agre": [7, 9], "a36776657273696f6e63312e3069646f63756d656e747381a367646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6c6973737565725369676e6564a26a6e616d65537061636573a2746f72672e69736f2e31383031332e352e312e495483d81858f7a46864696765737449440b6672616e646f6d506d44f21ee875f2c1d502b43198e5a15271656c656d656e744964656e74696669657275766572696669636174696f6e2e65766964656e63656c656c656d656e7456616c756581a2647479706571656c656374726f6e69635f7265636f7264667265636f7264bf6474797065781f68747470733a2f2f657564692e77616c6c65742e70646e642e676f762e697466736f75726365bf716f7267616e697a6174696f6e5f6e616d65754d6f746f72697a7a617a696f6e6520436976696c656f6f7267616e697a6174696f6e5f6964656d5f696e666c636f756e7472795f636f6465626974ffffd8185866a4686469676573744944046672616e646f6d50185d84dfb71ce9b173010ddd62174fbe71656c656d656e744964656e746966696572781c766572696669636174696f6e2e74727573745f6672616d65776f726b6c656c656d656e7456616c7565656569646173d8185865a4686469676573744944006672616e646f6d50137f903174253c4585358267aae2ea4e71656c656d656e744964656e746966696572781c766572696669636174696f6e2e6173737572616e63655f6c6576656c6c656c656d656e7456616c75656468696768716f72672e69736f2e31383031332e352e318bd8185852a46864696765737449440c6672616e646f6d5053e29d0ddbbc7d2306a32bdbe2e56e5171656c656d656e744964656e7469666965726b66616d696c795f6e616d656c656c656d656e7456616c756563446f65d8185855a4686469676573744944036672616e646f6d50990cba2069fa1b33b8d6ae910b6549dc71656c656d656e744964656e7469666965726a676976656e5f6e616d656c656c656d656e7456616c756567416e746f6e696fd818585ba46864696765737449440a6672616e646f6d504086c1379975f805f1b1f4975e6a126571656c656d656e744964656e7469666965726a69737375655f646174656c656c656d656e7456616c7565d903ec6a323031392d31302d3230d818585ca4686469676573744944016672616e646f6d50ab4ca30c918dd2fd0bf35242c15fa2d871656c656d656e744964656e7469666965726b6578706972795f646174656c656c656d656e7456616c7565d903ec6a323032342d31302d3230d8185855a4686469676573744944076672616e646f6d508d9066f6c8da16619867cd4e2fab0c8871656c656d656e744964656e7469666965726f69737375696e675f636f756e7472796c656c656d656e7456616c7565624954d818587ea4686469676573744944056672616e646f6d5059fe68db795dee4c20976380ea24770571656c656d656e744964656e7469666965727169737375696e675f617574686f726974796c656c656d656e7456616c75657828497374697475746f20506f6c696772616669636f2065205a656363612064656c6c6f20537461746fd818585ba4686469676573744944026672616e646f6d5008b3f1ca5517019767be3dee3bb0614571656c656d656e744964656e7469666965726a62697274685f646174656c656c656d656e7456616c7565d903ec6a313935362d30312d3230d818585ca4686469676573744944096672616e646f6d50a2395ec214350c26066306e23279b3ae71656c656d656e744964656e7469666965726f646f63756d656e745f6e756d6265726c656c656d656e7456616c756569393837363534333231d8185850a4686469676573744944066672616e646f6d50a25e1a5b915d2d6eafee9674e023293971656c656d656e744964656e74696669657268706f7274726169746c656c656d656e7456616c75654420212223d81858eea46864696765737449440d6672616e646f6d50eeed6a3b856563627589a360939d12f771656c656d656e744964656e7469666965727264726976696e675f70726976696c656765736c656c656d656e7456616c756582a37576656869636c655f63617465676f72795f636f646561416a69737375655f64617465d903ec6a323031382d30382d30396b6578706972795f64617465d903ec6a323032342d31302d3230a37576656869636c655f63617465676f72795f636f646561426a69737375655f64617465d903ec6a323031372d30322d32336b6578706972795f64617465d903ec6a323032342d31302d3230d818585ba4686469676573744944086672616e646f6d50c0ef486b2a194ed3cbf7f354fd40092171656c656d656e744964656e74696669657276756e5f64697374696e6775697368696e675f7369676e6c656c656d656e7456616c756561496a697373756572417574688443a10126a118215901423082013e3081e5a00302010202012a300a06082a8648ce3d040302301a3118301606035504030c0f5374617465204f662055746f706961301e170d3233313132343134353430345a170d3238313132323134353430345a30383136303406035504030c2d5374617465204f662055746f7069612049737375696e6720417574686f72697479205369676e696e67204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004c338ec1000b351ce8bcdfc167450aeceb": [7, 9], "6d44f21ee875f2c1d502b43198e5a152": [7, 9], "motorizzazion": [7, 9], "civil": [7, 9], "m_inf": [7, 9], "185d84dfb71ce9b173010ddd62174fb": [7, 9], "137f903174253c4585358267aae2ea4": [7, 9], "53e29d0ddbbc7d2306a32bdbe2e56e51": [7, 9], "doe": [7, 9, 14], "990cba2069fa1b33b8d6ae910b6549dc": [7, 9], "antonio": [7, 9], "4086c1379975f805f1b1f4975e6a1265": [7, 9], "2019": [7, 9], "20": [7, 9, 10], "ab4ca30c918dd2fd0bf35242c15fa2d8": [7, 9], "8d9066f6c8da16619867cd4e2fab0c88": [7, 9], "59fe68db795dee4c20976380ea247705": [7, 9], "poligrafico": [7, 9], "zecca": [7, 9], "dello": [7, 9], "stato": [7, 9], "08b3f1ca5517019767be3dee3bb06145": [7, 9], "a2395ec214350c26066306e23279b3a": [7, 9], "987654321": [7, 9], "a25e1a5b915d2d6eafee9674e0232939": [7, 9], "20212223": [7, 9], "eeed6a3b856563627589a360939d12f7": [7, 9], "vehicle_category_cod": [7, 9], "2018": [7, 9], "08": [7, 9], "09": [7, 9], "b": [7, 9, 13], "2017": [7, 9, 13], "c0ef486b2a194ed3cbf7f354fd400921": [7, 9], "i": [7, 9], "3082013e3081e5a00302010202012a300a06082a8648ce3d040302301a3118301606035504030c0f5374617465204f662055746f706961301e170d3233313132343134353430345a170d3238313132323134353430345a30383136303406035504030c2d5374617465204f662055746f7069612049737375696e6720417574686f72697479205369676e696e67204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004c338ec1000b351ce8bcdfc167450aeceb7d518bd9a519583e082d67effff06565804fc09abf0e4a08e699c9dba3796285a15f68e40ac7f9fc7700a15153a4065300a06082a8648ce3d040302034800304502210099b7d62e6bf7b1823db3713df889bf73e70bb4d9c58c21e92c58d2f1beffe932022058d039747a00d70e6d66be4797e6142b3608a014ee09b7b79af2cae2aaf27788": [7, 9], "0e5f0b6b33418e508740771e82f893372eaf5b2445bc4c84dcf08b005e9493fc": [7, 9], "de21bb62ff2897d8b986d2cda9f9bc5865c02807f7b4d9dd1fa4a79df4c0d37f": [7, 9], "bc5568239e35ce9ff8798c27ffdcd757b134b679f0fe05729aa3491381912e65": [7, 9], "e6048bdc7fd6454296f1e3f54536107c9c5b24c4064de46a98121e3630eecca2": [7, 9], "73690d92dcaa61b0203870f67c6aa9fdfea889b6f0c720de757b4b0a8516a206": [7, 9], "e353ea0b0fd92b6be90c64cc3b2ee1284153a8f0f5066b99aac599200e6eeeb2": [7, 9], "29227872ceb49923d267b5f4bade6d387b42ac2dc4b2ae26c9013067fee7018a": [7, 9], "a6a119f7cacac0b8c6aacac747fd3fe7e50b6d9bb8a507fda79f0df6646f285d": [7, 9], "6d8025d2f02a5e7e1406fb6aaeb67f9ede9b07191a53f3e23b77c528223a94e2": [7, 9], "b0d43e4e2ea534e4d5304e64bcf7a0f13e2c8ee8304b9cd23aba4909652a4647": [7, 9], "fbf4de318982f2dbad43c601caeb22628b301ac18aa8264c5831b2aaac89c486": [7, 9], "cf57377b675f64f37314739592c1e8a911a7ddaf341ce2902fe877c5a835e4c1": [7, 9], "4a4b4cc64ec9299c1a2501ea449f577005e9f7a60408057c07a7c67fb151e5f5": [7, 9], "78824fbd6fbba88a2aab44df8b6f5e9759126d87d1f4415995e658fd9239e1f": [7, 9], "afd09e720b918cedc2b8a881950bab6a1051e18ae16a814d51e609938663d5e1": [7, 9], "61fbc6c8ad24ec86a78bb4e9ac377dd2b7c711d9f2eb9afd4aa0963662847a": [7, 9], "24t14": [7, 9], "54": [7, 9], "05z": [7, 9], "f2461e4fab69e9f7bcffe552395424514524d1679440036213173101448d1b1ab4a293859b389ffa8b47aeed10e9b0c1545412ac37c51a76482cd9bbbe110152": [7, 9], "1fed7190d2975ab79c072e6f1d9d52436059d1fc959d55baf74f057d89b10fcc0dc77a50d433d4c76ddf26223c5560c4ab123b5cb5eb805a90036aa147493076": [7, 9], "subsequ": [7, 9], "consid": [7, 9, 10, 14, 15], "transfermethod": [7, 9], "hold": [7, 9], "bleoption": [7, 9], "datael": [7, 9], "intent": [7, 9], "retain": [7, 9], "intenttoretain": [7, 9], "bool": [7, 9], "cose_sign1": [7, 9], "unless": [7, 9], "responsedata": [7, 9], "devicenamespac": [7, 9], "dataitemnam": [7, 9], "dataitemvalu": [7, 9], "action": [7, 9, 10, 12, 16], "responsestatu": [7, 9], "occur": [7, 9], "300": [7, 9], "doesn": [7, 9, 14], "t": [7, 9, 13, 14], "dispatch": [7, 9], "command": [7, 9], "destruct": [7, 9], "closur": [7, 9], "download": [9, 10], "workstat": [9, 10], "frame": [9, 10], "extract": [9, 10], "build": [9, 10, 14], "fetch": [9, 10, 14], "presenc": [9, 10], "request_uri_method": [9, 10], "valueth": [9, 10], "eleg": [9, 10], "polici": [9, 10, 14, 16], "successful": [9, 10], "good": [9, 10, 12, 15], "let": [9, 10], "continu": [9, 10], "navig": [9, 10], "sequenc": [9, 10, 14], "summar": [9, 10], "login": [9, 10, 12], "button": [9, 10], "qrcode": [9, 10], "produc": [9, 10], "deselect": [9, 10], "direct_post": [9, 10], "25": [9, 10], "26": [9, 10], "27": [9, 10], "28": [9, 10], "29": [9, 10], "autent": [9, 10], "succed": [9, 10], "featur": [9, 10], "deem": [9, 10], "necessari": [9, 10, 12, 14, 15], "better": [9, 10], "explicit": [9, 10], "hardwar": [9, 10, 14], "usag": [9, 10, 16], "prefer": [9, 10, 16], "strategi": [9, 10], "response_types_support": [9, 10, 15], "vp_token": [9, 10, 15], "response_modes_support": [9, 10, 15], "form_post": [9, 10, 15], "vp_formats_support": [9, 10, 15], "jwt_alg_valu": [9, 10, 14, 15], "request_object_signing_alg_values_support": [9, 10, 15], "presentation_definition_uri_support": [9, 10, 15], "jar": [9, 10], "2freli": [9, 10], "2fcb": [9, 10], "2frequest_uri": [9, 10], "raw": [9, 10], "correct": [9, 10], "quartili": [9, 10], "balanc": [9, 10], "densiti": [9, 10], "space": [9, 10], "qualiti": [9, 10], "remain": [9, 10, 12], "readabl": [9, 10], "damag": [9, 10], "obscur": [9, 10], "javascript": [9, 10, 13], "poll": [9, 10], "socket": [9, 10], "httponli": [9, 10], "cooki": [9, 10], "special": [9, 10], "wait": [9, 10, 13], "202": [9, 10], "response_uri": [9, 10], "401": [9, 10], "unauthor": [9, 10, 12, 15, 16], "opaqu": [9, 10], "3be39b69": [9, 10], "6ac1": [9, 10], "41aa": [9, 10], "921b": [9, 10], "3e6c07ddcb03": [9, 10], "e0bbf2f1": [9, 10], "8c3a": [9, 10], "4eab": [9, 10], "a8ac": [9, 10], "2e8f34db8a47": [9, 10], "miicajccadogawibag": [9, 10], "awz": [9, 10], "2w3": [9, 10], "sf2": [9, 10], "client_id_schem": [9, 10], "entity_id": [9, 10], "response_mod": [9, 10, 15], "2c128e4d": [9, 10], "fc91": [9, 10], "4cd3": [9, 10], "86b8": [9, 10], "18bdea0988cb": [9, 10], "herein": [9, 10], "alias": [9, 10], "anymor": [9, 10], "insensit": [9, 10], "rfc9101": [9, 10], "presentation_definit": [9, 10, 15], "input_descriptor": [9, 10], "constraint": [9, 10, 14], "path": [9, 10, 14], "limit_disclosur": [9, 10], "mention": [9, 10], "futur": [9, 10], "presentation_definition_uri": [9, 10], "Not": [9, 10], "client_metadata": [9, 10], "taken": [9, 10], "client_metadata_uri": [9, 10], "why": [9, 10], "malici": [9, 10], "gain": [9, 10], "plaintext": [9, 10], "network": [9, 10], "environ": [9, 10, 16], "emploi": [9, 10], "tl": [9, 10], "Such": [9, 10], "techniqu": [9, 10, 12], "webserv": [9, 10], "handl": [9, 10], "manner": [9, 10, 16], "deciph": [9, 10], "transmiss": [9, 10], "forward": [9, 10], "negoti": [9, 10], "actual": [9, 10, 16], "actor": [9, 10, 12, 16], "segment": [9, 10], "could": [9, 10, 12], "sensit": [9, 10], "unencrypt": [9, 10], "snif": [9, 10], "eyjhbgcioijfuzi1nii": [9, 10], "9t2lq": [9, 10], "pt0ixx0": [9, 10], "walletinstanceattest": [9, 10], "presentation_submiss": [9, 10], "definition_id": [9, 10], "32f54163": [9, 10], "7166": [9, 10], "48f1": [9, 10], "93d8": [9, 10], "ff217bdb0653": [9, 10], "04a98be3": [9, 10], "7fb0": [9, 10], "4cf5": [9, 10], "af9a": [9, 10], "31579c8b0e7d": [9, 10], "descriptor_map": [9, 10], "There": [9, 10, 14], "find": [9, 10], "3978344f": [9, 10], "8596": [9, 10], "4c3a": [9, 10], "a978": [9, 10], "8fcaba3903c5": [9, 10], "1541493724": [9, 10], "1573029723": [9, 10], "origin": [9, 10, 14], "pblic": [9, 10], "beyond": [9, 10, 14], "longer": [9, 10, 14, 15], "audienc": [9, 10], "withing": [9, 10], "write": [9, 10, 16], "charset": [9, 10], "utf": [9, 10], "response_cod": [9, 10], "091535f699ea575c7937fa5f0f454ae": [9, 10], "complet": [9, 10, 12, 16], "2hnofs3ync9tjicaivhwlvuj3axwggz_98urfaqme": [9, 10, 14], "1649590602": [9, 10], "1649417862": [9, 10], "5s4qi": [9, 10], "wallet_relying_parti": [9, 10, 14], "application_typ": [9, 10], "client_nam": [9, 10], "yhnfs3ync9tjicaivhwlvuj3axwggz_98urfaqme": [9, 10], "x5c": [9, 10, 14, 15], "contact": [9, 10, 14], "op": [9, 10], "default_acr_valu": [9, 10], "spidl2": [9, 10], "spidl3": [9, 10], "vp_format": [9, 10, 14], "kb": [9, 10, 14], "identitycredenti": [9, 10], "const": [9, 10], "intent_to_retain": [9, 10], "sampl": [9, 10], "eddsa": [9, 10], "default_max_ag": [9, 10], "1111": [9, 10], "jarm": [9, 10, 13], "authorization_signed_response_alg": [9, 10], "authorization_encrypted_response_alg": [9, 10], "authorization_encrypted_response_enc": [9, 10], "a192cbc": [9, 10], "a128gcm": [9, 10], "a192gcm": [9, 10], "a256gcm": [9, 10], "subject_typ": [9, 10], "pairwis": [9, 10], "require_auth_tim": [9, 10], "id_token_signed_response_alg": [9, 10], "id_token_encrypted_response_alg": [9, 10], "id_token_encrypted_response_enc": [9, 10], "home": [9, 10], "tech": [9, 10, 14], "paradigm": 12, "iam": 12, "improv": 12, "ownership": [12, 16], "revok": [12, 14], "said": 12, "histori": 12, "tradit": 12, "know": [12, 14], "signific": 12, "fact": 12, "envis": 12, "compani": 12, "want": 12, "anoth": 12, "acquir": [12, 16], "publish": [12, 14], "educ": 12, "institut": 12, "crucial": 12, "portabl": 12, "principl": 12, "character": 12, "choos": 12, "leverag": [12, 16], "advanc": 12, "avoid": [12, 15], "theft": 12, "fraud": 12, "promot": 12, "seamless": [12, 16], "across": 12, "border": 12, "effici": 12, "cost": [12, 14], "reduct": 12, "elimin": 12, "multipl": [12, 14, 15], "repetit": 12, "streamlin": 12, "reduc": 12, "purchas": 12, "physic": 12, "ag": 12, "k": 13, "looker": 13, "februari": 13, "o": 13, "d": 13, "fett": 13, "presentationexch": 13, "2119": 13, "bradner": 13, "march": 13, "1997": 13, "2616": 13, "r": 13, "getti": 13, "j": 13, "mogul": 13, "frystyk": 13, "masint": 13, "l": [13, 15], "leach": 13, "berner": 13, "lee": 13, "hypertext": 13, "transfer": [13, 15], "june": 13, "1999": 13, "3339": 13, "klyne": 13, "c": 13, "newman": 13, "internet": 13, "doi": 13, "17487": 13, "rfc3339": 13, "juli": 13, "2002": 13, "3986": 13, "uniform": 13, "7009": 13, "dronia": 13, "scurtescu": 13, "m": 13, "rfc7009": 13, "august": 13, "2013": 13, "7159": 13, "brai": 13, "interchang": 13, "2014": 13, "jone": 13, "bradlei": 13, "sakimura": 13, "2015": 13, "hildebrand": 13, "jwe": 13, "rfc7517": 13, "jwa": 13, "rfc7638": 13, "septemb": 13, "7800": 13, "tschofenig": 13, "semant": 13, "april": 13, "2016": 13, "8174": 13, "leiba": 13, "ambigu": 13, "uppercas": 13, "vs": 13, "lowercas": 13, "hardt": 13, "sheffer": 13, "best": 13, "practic": [13, 15], "2020": 13, "campbel": 13, "novemb": 13, "2022": 13, "openid4vc": [13, 15], "haip": [13, 15], "legitimaci": 14, "compli": 14, "rest": [14, 15, 16], "distribut": 14, "among": [14, 16], "overse": 14, "except": 14, "dedic": 14, "summari": 14, "pki": 14, "leaf": 14, "tamper": [14, 16], "compris": 14, "These": [14, 16], "forg": 14, "adversari": 14, "preserv": [14, 15, 16], "consum": 14, "guarantor": 14, "histor": 14, "save": 14, "year": 14, "retent": 14, "rotat": 14, "flexibl": 14, "freedom": 14, "modifi": 14, "simultan": 14, "disabl": 14, "vulner": 14, "certainti": 14, "propag": 14, "friendli": 14, "adopt": [14, 16], "effect": [14, 16], "wide": 14, "softwar": 14, "kit": 14, "rapid": 14, "scalabl": 14, "accommod": 14, "coverag": 14, "satisfi": 14, "recognis": 14, "publicli": 14, "summaris": 14, "spec": 14, "itself": [14, 16], "trust_mark_id": 14, "motiv": 14, "serv": [14, 16], "plain": 14, "default": 14, "enter": [14, 15, 16], "keep": 14, "max_path_length": 14, "1649375259": 14, "1649373279": 14, "3i5vv": 14, "root": 14, "ca": 14, "x2zomhngsdc4zlbrcxhmt3mzrmrzog9jd3o2qjzdam51cuhhufruowd0wq": 14, "1knr9ar3mzmokyty8brvriue85nixryx4xd3k4jw7vi": 14, "slt14644zbyxyf": 14, "xmw7apdlbmuw3t1urwi4nafmtkri": 14, "ta": 14, "federation_fetch_endpoint": 14, "federation_resolve_endpoint": 14, "federation_list_endpoint": 14, "federation_trust_mark_status_endpoint": 14, "trust_mark_statu": 14, "trust_mark_issu": 14, "behalf": 14, "cryptograf": 14, "entity_typ": 14, "trustworthi": [14, 15, 16], "assign": 14, "trust_mark_own": 14, "trust_mark": 14, "entri": 14, "don": 14, "em3cmnzghiyfsq090n6b3op7laaqj8rghmhxgmjstqg": 14, "1649623546": 14, "1649450746": 14, "metadata_polici": 14, "subset_of": 14, "email": 14, "allowed_leaf_entity_typ": 14, "real": 14, "onlin": 14, "unavail": 14, "concaten": 14, "pertain": 14, "earliest": 14, "No": 14, "forc": 14, "higher": 14, "abstract": 14, "entityconfigur": 14, "signedjwt": 14, "selfissu": 14, "byleaf": 14, "entitystat": 14, "bytrustanchor": 14, "eyjhbgcioijfuzi1niisimtpzci6ik5gttfxvvzpvwxzelvxcexhbwxmy0vwufjwwtjwwfpjumpcblfywm1ssghlwvvwwvvszfrrbkeytkeilcj0exaioijhchbsawnhdglvbi9lbnrpdhktc3rhdgvtzw50k2p3dcj9": 14, "eyjlehaioje2ndk1ota2mdisimlhdci6mty0otqxnzg2miwiaxnzijoiahr0chm6ly9ycc5legftcgxllm9yzyisinn1yii6imh0dhbzoi8vcnauzxhhbxbszs5vcmcilcjqd2tzijp7imtlexmiolt7imt0esi6ikvdiiwia2lkijoitkznmvdvvmlvbfl6vvdwtgftbgzjrxbqulzzmlzywklsakjuuvhabvjiaetzvvzzvwxkvffuqtjoqsisimnydii6ilatmju2iiwieci6invzbemzd2qtcfgzd3o0yljzbnd5m2x6cgjhwkzotjk2aewyquhbm01rnlkilcj5ijoivkxdqlhgv2xktlnosxo4a0gyoxzmujromthca3dht1gynnprb3j1utfnncj9xx0sim1ldgfkyxrhijp7im9wzw5pzf9yzwx5aw5nx3bhcnr5ijp7imfwcgxpy2f0aw9ux3r5cguioij3zwiilcjjbgllbnrfawqioijodhrwczovl3jwlmv4yw1wbguub3jnlyisimnsawvudf9yzwdpc3ryyxrpb25fdhlwzxmiolsiyxv0b21hdgljil0simp3a3mionsia2v5cyi6w3sia3r5ijoirumilcjrawqioijork0xv1vwavvswxpvv3bmyw1szmnfcfbsvlkyvlhasvjqqm5rwfptukhos1lvvllvbgruuw5bmk5biiwiy3j2ijoiuc0yntyilcj4ijoidxnsqzn3zc1wwdn3ejriullud3kzbhpwykdarmhootzotdjbseeztve2wsisinkioijwtencwezxbgrou05jejhrsdi5dkxsne4xoejrd0dpwdi2elfvcnvrmu00in1dfswiy2xpzw50x25hbwuioijoyw1lig9migfuigv4yw1wbgugb3jnyw5pemf0aw9uiiwiy29udgfjdhmiolsib3bzqhjwlmv4yw1wbguuaxqixswiz3jhbnrfdhlwzxmiolsicmvmcmvzaf90b2tlbiisimf1dghvcml6yxrpb25fy29kzsjdlcjyzwrpcmvjdf91cmlzijpbimh0dhbzoi8vcnauzxhhbxbszs5vcmcvb2lkyy9ycc9jywxsymfjay8ixswicmvzcg9uc2vfdhlwzxmiolsiy29kzsjdlcjzy29wzsi6imv1lmv1cm9wys5lyy5ldwrpdy5wawqumsblds5ldxjvcgeuzwmuzxvkaxcucglklml0ljegzw1hawwilcjzdwjqzwn0x3r5cguioijwywlyd2lzzsj9lcjmzwrlcmf0aw9ux2vudgl0esi6eyjmzwrlcmf0aw9ux3jlc29sdmvfzw5kcg9pbnqioijodhrwczovl3jwlmv4yw1wbguub3jnl3jlc29sdmuviiwib3jnyw5pemf0aw9ux25hbwuioijfegftcgxlifjqiiwiag9tzxbhz2vfdxjpijoiahr0chm6ly9ycc5legftcgxllml0iiwicg9sawn5x3vyasi6imh0dhbzoi8vcnauzxhhbxbszs5pdc9wb2xpy3kilcjsb2dvx3vyasi6imh0dhbzoi8vcnauzxhhbxbszs5pdc9zdgf0awmvbg9nby5zdmcilcjjb250ywn0cyi6wyj0zwnoqgv4yw1wbguuaxqixx19lcj0cnvzdf9tyxjrcyi6w3siawqioijodhrwczovl3jlz2lzdhj5lmvpzgfzlnrydxn0lwfuy2hvci5legftcgxllmv1l29wzw5pzf9yzwx5aw5nx3bhcnr5l3b1ymxpyy8ilcj0cnvzdf9tyxjrijoizxlkacbcdtiwmjyifv0simf1dghvcml0ev9oaw50cyi6wyjodhrwczovl2ludgvybwvkawf0zs5lawrhcy5legftcgxllm9yzyjdfq": 14, "un315hdckvhya": 14, "irregzaml7pnfjqh2apz82blqo5s0sl1jr0tefp5e1t913g8gnuwggtmquqhpzwv6bvtla8g": 14, "eyjhbgcioijfuzi1niisimtpzci6ilnurkrxv2hky0dwwfgzqjnsvmraywtsq0xutnvna000wtngnlfutk9krxryzfhgwvlywjjjwgn0uveilcj0exaioijhchbsawnhdglvbi9lbnrpdhktc3rhdgvtzw50k2p3dcj9": 14, "eyjlehaioje2ndk2mjm1ndysimlhdci6mty0otq1mdc0niwiaxnzijoiahr0chm6ly9pbnrlcm1lzglhdguuzwlkyxmuzxhhbxbszs5vcmcilcjzdwiioijodhrwczovl3jwlmv4yw1wbguub3jniiwiandrcyi6eyjrzxlzijpbeyjrdhkioijfqyisimtpzci6ik5gttfxvvzpvwxzelvxcexhbwxmy0vwufjwwtjwwfpjumpcblfywm1ssghlwvvwwvvszfrrbkeytkeilcjjcnyioijqlti1niisingioij1c2xdm3dklxbym3d6ngjsww53etnsenbir1pgae45nmhmmkfiqtnnutzziiwiesi6ilzmq0jyrldsze5ttkl6ogtimjl2tfi0tje4qmt3r09ymjz6uw9ydvexttqifv19lcjtzxrhzgf0yv9wb2xpy3kionsib3blbmlkx3jlbhlpbmdfcgfydhkionsic2nvcguionsic3vic2v0x29mijpbimv1lmv1cm9wys5lyy5ldwrpdy5wawqumswgigv1lmv1cm9wys5lyy5ldwrpdy5wawquaxqumsjdfswicmvxdwvzdf9hdxrozw50awnhdglvbl9tzxrob2rzx3n1chbvcnrlzci6eyjvbmvfb2yiolsicmvxdwvzdf9vymply3qixx0sinjlcxvlc3rfyxv0agvudgljyxrpb25fc2lnbmluz19hbgdfdmfsdwvzx3n1chbvcnrlzci6eyjzdwjzzxrfb2yiolsiulmyntyilcjsuzuxmiisikvtmju2iiwirvm1mtiilcjquzi1niisilbtnteyil19fx0sinrydxn0x21hcmtzijpbeyjpzci6imh0dhbzoi8vdhj1c3qtyw5jag9ylmv4yw1wbguuzxuvb3blbmlkx3jlbhlpbmdfcgfydhkvchvibgljlyisinrydxn0x21hcmsioijleupoyibcdtiwmjyifv19": 14, "_qt5": 14, "t6dahp3tuwa_27kle8i9z_spk2ftqlky6pgmpchbsi2ahxy3aaxdurobpo4chtqgg3j2xcrghdfucfgeq": 14, "eyjhbgcioijfuzi1niisimtpzci6imvxa3pubwt0ww5kblzhmwxhmju1zdjkq2rvzersazqwuwt0wvlvmwfhrfzyt1robfphdfdxsgq1wncilcj0exaioijhchbsawnhdglvbi9lbnrpdhktc3rhdgvtzw50k2p3dcj9": 14, "eyjlehaioje2ndk2mjm1ndysimlhdci6mty0otq1mdc0niwiaxnzijoiahr0chm6ly90cnvzdc1hbmnob3iuzxhhbxbszs5ldsisinn1yii6imh0dhbzoi8vaw50zxjtzwrpyxrllmvpzgfzlmv4yw1wbguub3jniiwiandrcyi6eyjrzxlzijpbeyjrdhkioijfqyisimtpzci6ilnurkrxv2hky0dwwfgzqjnsvmraywtsq0xutnvna000wtngnlfutk9krxryzfhgwvlywjjjwgn0uveilcjjcnyioijqlti1niisingioijyql9bogdcunh5njhvtkxzrkzlr0zmr2vmwu5xymgtszh1os1gylqyzkzjiiwiesi6ilnuwvk2y3njznkxcjbisfhltgjuvfzsamfndzhozznrues2wfvoc2uzdkuifv19lcj0cnvzdf9tyxjrcyi6w3siawqioijodhrwczovl3rydxn0lwfuy2hvci5legftcgxllmv1l2zlzgvyyxrpb25fzw50axr5l3royxqtchjvzmlszsisinrydxn0x21hcmsioijleupoyibcdtiwmjyifv19": 14, "r3uoi": 14, "u0tx0gdflndditbcwznupy7m2tnh08jld": 14, "ej9vmzwmcxoccuwin0zt0js4m_shneig6tlxrqj": 14, "hti70g": 14, "At": 14, "attain": 14, "hour": 14, "inquir": 14, "amount": 14, "matter": 14, "gdpr": 14, "especi": 14, "perimet": 14, "jurisdict": 14, "snapshot": 14, "overload": 14, "met": 15, "therebi": 15, "accur": 15, "associ": [15, 16], "measur": 15, "usabl": 15, "repeat": 15, "lost": 15, "delet": 15, "becom": [15, 16], "now": 15, "readi": 15, "explain": 15, "7523": 15, "bearer": 15, "3agrant": 15, "3ajwt": 15, "eyjhbgcioijfuzi1niisimtpzci6imtoakzwte9nrjnhegrxd2xvtl9lwl83ntvut1zebmjiadg2tw1kchh2a1uifq": 15, "eyjpc3mioiaidmjlweprc000nxhwahrbtm5dauc2bun5dvu0amzhtnpvced1s3zvz2c5yyisicjhdwqioiaiahr0chm6ly93ywxszxqtchjvdmlkzxiuzxhhbxbszs5vcmcilcaianrpijogimy1njuymdcylwfizwytndu5os1iodyzltlhnjkwnja3mzjjyyisicjub25jzsi6iciuli4uliisicjjbmyioib7imp3ayi6ihsiy3j2ijogilatmju2iiwgimt0esi6icjfqyisicj4ijogijritnb0ss14cjjwanlsskthtw56nfdtzg5rrf91slnxnfi5nu5qothindqilcaiesi6icjmsvpuu0izoxzgsmhzz1mzazdqweu0cjmtq29hrlf3wnrqqklscxbobhjniiwgimtpzci6icj2ymvysmtzttq1ehbodefobknprzztq3l1vtrqzkdoem9wr3vldm9nzzljin19lcaiawf0ijogmty5mtq4odk2miwgimv4cci6ide2ote0otyxnjj9": 15, "dg_yfaiv6lvftr3ffx0v5jw250mbgxlvp1j0ezzchryitqsy7xgmx4i": 15, "mgur93fas85vf_da": 15, "reveltwu2jw": 15, "eyjhbgcioijfuzi1niisinr5cci6indhbgxldc1hdhrlc3rhdglvbitqd3qilcjrawqioii1ddvzwxbcae4trwdjruvjnwlveni2cjbnujaytg5wutbpbwvrbu5ly2pziiwidhj1c3rfy2hhaw4iolsizxlkagjhy2lpaupgvxouli42uzbbiiwizxlkagjhy2lpaupgvxouli5qskxbiiwizxlkagjhy2lpaupgvxouli5iowd3il19": 15, "eyjpc3mioijodhrwczovl3dhbgxldc1wcm92awrlci5legftcgxllm9yzyisinn1yii6inzizvhka3nnndv4cgh0qu5uq2lhnm1dexvvngpmr056b3bhdut2b2dnowmilcj0exblijoiv2fsbgv0sw5zdgfuy2vbdhrlc3rhdglvbiisinbvbgljev91cmkioijodhrwczovl3dhbgxldc1wcm92awrlci5legftcgxllm9yzy9wcml2ywn5x3bvbgljesisinrvc191cmkioijodhrwczovl3dhbgxldc1wcm92awrlci5legftcgxllm9yzy9pbmzvx3bvbgljesisimxvz29fdxjpijoiahr0chm6ly93ywxszxqtchjvdmlkzxiuzxhhbxbszs5vcmcvbg9nby5zdmcilcjhdhrlc3rlzf9zzwn1cml0ev9jb250zxh0ijoiahr0chm6ly93ywxszxqtchjvdmlkzxiuzxhhbxbszs5vcmcvtg9bl2jhc2ljiiwiy25mijp7imp3ayi6eyjjcnyioijqlti1niisimt0esi6ikvdiiwieci6ijritnb0ss14cjjwanlsskthtw56nfdtzg5rrf91slnxnfi5nu5qothindqilcj5ijoitelablncmzl2rkpowwdtm2s3alhfnhizlunvr0zrd1p0uejjunfwtmxyzyisimtpzci6inzizvhka3nnndv4cgh0qu5uq2lhnm1dexvvngpmr056b3bhdut2b2dnowmifx0simf1dghvcml6yxrpb25fzw5kcg9pbnqioijldwrpdzoilcjyzxnwb25zzv90exblc19zdxbwb3j0zwqiolsidnbfdg9rzw4ixswidnbfzm9ybwf0c19zdxbwb3j0zwqionsiand0x3zwx2pzb24ionsiywxnx3zhbhvlc19zdxbwb3j0zwqiolsirvmyntyixx0simp3df92y19qc29uijp7imfsz192ywx1zxnfc3vwcg9ydgvkijpbikvtmju2il19fswicmvxdwvzdf9vymply3rfc2lnbmluz19hbgdfdmfsdwvzx3n1chbvcnrlzci6wyjfuzi1nijdlcjwcmvzzw50yxrpb25fzgvmaw5pdglvbl91cmlfc3vwcg9ydgvkijpmywxzzswiawf0ijoxnjg3mjgxmtk1lcjlehaioje2odcyodgzotv9": 15, "tnvcyfpcl5tui2nakkwdag9xbrtwwl4djsryrfhrf8ndmffdt044u55prn35j2cl0lzxbesedrfsaz2pllw2ug": 15, "wiar": 15, "comma": 15, "6ec69324": 15, "60a8": 15, "4e5b": 15, "a697": 15, "a766d85790ea": 15, "4hnpti": 15, "xr2pjyrjkgmnz4wmdnqd_ujsq4r95nj98b44": 15, "liznsb39vfjhygs3k7jxe4r3": 15, "cogfqwztpbirqpnlrg": 15, "One": 15, "problem": 15, "durat": 15, "aal": 15, "8414": 15, "request_object_sign": 15, "_alg_values_support": 15, "_uri_support": 15, "boolean": 15, "5t5yypbhn": [15, 16], "egieei5iuzr6r0mr02lnvq0omekmnkcji": [15, 16], "eyjhbgcioijfuz": 15, "6s0a": 15, "jjla": 15, "h9gw": 15, "1687281195": 15, "1687288395": 15, "comprehens": 16, "cater": 16, "asset": 16, "total": 16, "legisl": 16, "conveni": 16, "plai": 16, "vital": 16, "adher": 16, "android": 16, "variou": 16, "Their": 16, "guarante": 16, "utmost": 16, "execut": 16, "tee": 16, "distinct": 16, "unlock": 16, "pin": 16, "biometr": 16, "fingerprint": 16, "facial": 16, "recognit": 16, "unambigu": 16, "rel": 16, "revert": 16, "circumst": 16, "voluntarili": 16, "remov": 16, "aal_values_support": 16, "context": 16, "medium": 16, "grant_types_support": 16, "token_endpoint_auth_methods_suppor": 16, "ted": 16, "token_endpoint_auth_signing_alg_va": 16, "lues_support": 16, "experiment": 16, "websit": 16, "qrjrj3af_b57sboirrcbm7br7woc8ynj7lhfpteffuk": 16, "1h0cwdyggvu8w": 16, "kpku_xycocunt2o0bwsliqtnpu6im": 16, "basic": 16, "token_endpoint_auth_methods_support": 16, "private_key_jwt": 16, "token_endpoint_auth_signing_alg_values_support": 16, "1687171759": 16, "1709290159": 16, "inherit": 16, "extend": 16, "trusti": 16, "enclav": 16}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"cryptograph": 0, "algorithm": 0, "backup": 1, "restor": 1, "rst": [1, 8, 11], "gener": [1, 8, 11, 14, 15], "properti": [1, 8, 11, 14, 15], "requir": [1, 8, 11, 14, 15, 16], "attribut": [1, 8, 11], "implement": [1, 4, 8, 11], "consider": [1, 8, 11, 14], "librari": [1, 8, 11], "code": [1, 8, 11], "snippet": [1, 8, 11], "extern": [1, 8, 11, 16], "refer": [1, 8, 11, 13, 16], "how": 2, "contribut": 2, "acknowledg": 2, "norm": [3, 5], "languag": 3, "convent": 3, "defin": 3, "term": 3, "acronym": 3, "The": [4, 14], "italian": 4, "eudi": [4, 14], "wallet": [4, 14, 15, 16], "profil": 4, "introduct": [4, 12], "index": 4, "content": 4, "pid": [5, 6], "q": [5, 6], "eaa": [5, 6], "data": 5, "model": [5, 14], "sd": 5, "jwt": 5, "paramet": [5, 6, 14], "verif": 5, "field": 5, "claim": 5, "non": [5, 14], "exampl": 5, "mdoc": [5, 7, 9], "cbor": 5, "namespac": 5, "mobil": 5, "secur": [5, 9, 10], "object": [5, 9, 10], "issuanc": 6, "high": [6, 15], "level": [6, 15], "flow": [6, 7, 9, 10], "detail": [6, 9, 10, 15], "push": 6, "author": [6, 9, 10], "request": [6, 7, 9, 10, 15], "endpoint": [6, 14, 16], "par": 6, "http": [6, 9, 10], "respons": [6, 7, 9, 10], "token": 6, "access": 6, "credenti": 6, "entiti": [6, 9, 10, 14], "configur": [6, 9, 10, 14], "issuer": 6, "proxim": [7, 9], "devic": [7, 9, 10], "engag": [7, 9], "session": [7, 9], "termin": [7, 9], "pseudonym": 8, "reli": [9, 10, 14], "parti": [9, 10, 14], "solut": [9, 16], "remot": [9, 10], "uri": [9, 10], "post": [9, 10], "cross": [9, 10], "statu": [9, 10], "check": [9, 10], "redirect": [9, 10], "revoc": 11, "list": 11, "self": 12, "sovereign": 12, "ident": 12, "ssi": 12, "technic": 13, "infrastructur": 14, "trust": 14, "feder": 14, "role": 14, "api": 14, "common": 14, "anchor": 14, "leav": 14, "intermedi": 14, "metadata": [14, 16], "type": 14, "statement": 14, "evalu": 14, "mechan": 14, "attest": [14, 15, 16], "chain": 14, "offlin": 14, "repudi": 14, "long": 14, "live": 14, "privaci": 14, "remark": 14, "about": 14, "decentr": 14, "design": 15, "static": 15, "compon": 15, "view": 15, "dynam": 15, "assert": 15, "header": [15, 16], "payload": [15, 16], "instanc": 16, "lifecycl": 16, "initi": 16, "process": 16, "transit": 16, "valid": 16, "state": 16, "return": 16, "oper": 16, "deactiv": 16, "provid": 16, "wallet_provid": 16, "federation_ent": 16}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.todo": 2, "sphinx": 56}}) \ No newline at end of file diff --git a/refs/pull/212/merge/en/ssi-introduction.html b/refs/pull/212/merge/en/ssi-introduction.html new file mode 100644 index 000000000..be1256bc2 --- /dev/null +++ b/refs/pull/212/merge/en/ssi-introduction.html @@ -0,0 +1,1436 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Self Sovereign Identity + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

Self Sovereign Identity

+
+

Introduction to SSI

+

Definition

+

Self-Sovereign Identity (SSI) refers to a new paradigm in Identity and Access Management (IAM) that improves the privacy and grants complete control and ownership over the personal data by their owner, the citizens. +Users possess their digital documents and determine to which actors they present these documents, with the ability to revoke the use of said documents, all while maintaining a history of their activities.

+

The main difference between this new approach and the traditional IAM infrastructure is that during the presentation phase there are no intermediates between the Wallet (Holder of the credentials) and the Relying Party, while in the SAML2 or OIDC based infrastructure an Identity Provider is always involved, knowing which services a citizen is accessing to.

+

SSI is also significant in the field of data exchange and data governance. This is relevant at both national and European levels, including the new eIDAS Regulation. In fact, it envisions a login option designed for European Users - be they citizens, public administrations, or companies - who want to access another Member State's services using their national authentication systems.

+

The main roles in an SSI ecosystem are are listed as follow:

+
+
    +
  • Issuers: parties who can issue digital credentials about a person;

  • +
  • verifiers: parties who request Holders' digital credentials for authentication and authorization purposes;

  • +
  • Holders: individuals who own a Wallet and have control over the digital credentials they can request, acquire, store, and present to verifiers;

  • +
  • Verifiable Data Registries: Authorities that publish certificates, attestations, metadata, and schemes needed for allowing the trust establishment between the parties.

  • +
+
+

In the SSI model, the data source (e.g., an educational institution) provides digital credentials to the User, who can store them in their digital Wallet. +A secure Self-Sovereign Identity Wallet is crucial, as it allows people to carry their credentials on their personal digital devices. The Wallet typically comes in the form of an application on the User's mobile phone. Portability is, therefore, one of the principles of SSI.

+

Other key elements that characterize an SSI system include:

+
+
    +
  • Privacy and control: SSI enables individuals to maintain control over their personal data. They can choose what information to release, to whom, and for what purpose;

  • +
  • Security: SSI leverages advanced cryptographic techniques to ensure the integrity and security of identity information. It avoids the risk of identity theft, fraud, and unauthorized access since the data remains under the individual's control;

  • +
  • Interoperability: SSI promotes interoperability by enabling different systems and organizations to recognize and verify identities without relying on a central authority. This allows for seamless and trusted interactions between individuals, organizations, and even across borders;

  • +
  • Efficiency and cost reduction: individuals can manage their own identities with SSI, eliminating the need for multiple identity credentials and repetitive identity verification processes. This can streamline administrative procedures, reduce costs, and enhance the user experience.

  • +
+
+

Example

+

When a User wants to purchase a good or access to a service, the service provider asks the User for authentication or for a specific proof. Instead of presenting physical identification documents or disclosing their full data, the individual can use their SSI system if supported by the service provider. +An example of SSI in action could be a scenario where an individual needs to prove their age to access a restricted service, such as purchasing age-restricted items. They would release only the necessary information, such as a digitally signed proof of being above the legal age, without revealing any other personal details. The verifier can then cryptographically validate the proof.

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/en/standards.html b/refs/pull/212/merge/en/standards.html new file mode 100644 index 000000000..fe0fd6013 --- /dev/null +++ b/refs/pull/212/merge/en/standards.html @@ -0,0 +1,1483 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Technical References + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

Technical References

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

OIDC-FED

OpenID Connect Federation 1.0

OPENID4VCI

T. Lodderstedt, K. Yasuda, T. Looker, "OpenID for Verifiable Credential Issuance", February 2023.

SD-JWT-VC

O. Terbu, D.Fett, "SD-JWT-based Verifiable Credentials (SD-JWT VC)".

EIDAS-ARF

EUDI Wallet - Architecture and Reference Framework

OPENID4VP

OpenID for Verifiable Presentations - draft 19

PresentationExch

Presentation Exchange 2.0 for Presentation Definition

RFC 2119

Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels," BCP 14, RFC 2119, March 1997.

RFC 2616

Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P., and T. Berners-Lee, “Hypertext Transfer Protocol -- HTTP/1.1,” RFC 2616, June 1999.

RFC 3339

Klyne, G. and C. Newman, "Date and Time on the Internet: Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002.

RFC 3986

Uniform Resource Identifier (URI): Generic Syntax

RFC 7009

Lodderstedt, T., Dronia, S., Scurtescu, M., “OAuth 2.0 Token Revocation,” RFC7009, August 2013.

RFC 7159

Bray, T., “The JavaScript Object Notation (JSON) Data Interchange Format,” RFC 7159, March 2014.

RFC 7515

Jones, M., Bradley, J. and N. Sakimura, "JSON Web Signature (JWS)", RFC 7515, DOI 10.17487/RFC7515, May 2015.

RFC 7516

Jones, M., Hildebrand, J., "JSON Web Encryption (JWE)", May 2015.

RFC 7517

Jones, M., "JSON Web Key (JWK)", RFC 7517, DOI 10.17487/RFC7517, May 2015.

RFC 7518

Jones, M., "JSON Web Algorithms (JWA)", May 2015.

RFC 7519

Jones, M., Bradley, J. and N. Sakimura, "JSON Web Token (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015.

RFC 7638

Jones, M., Sakimura, N., “JSON Web Key (JWK) Thumbprint,”RFC7638, September 2015.

RFC 7800

Jones, M., Bradley, J. and H. Tschofenig, "Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs)", RFC 7800, DOI 10.17487/RFC7800, April 2016.

RFC 8174

Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", RFC 8174, DOI 10.17487/RFC8174, May 2017.

RFC 8725

Jones, M., D. Hardt, Sheffer, Y., "JSON Web Token Best Current Practices", February 2020.

JARM

Lodderstedt, T., Campbell, B., "JWT Secured Authorization Response Mode for OAuth 2.0 (JARM)", November 2022.

RFC 6749

The OAuth 2.0 Authorization Framework

RFC 9449

D. Fett, B. Campbell, J. Bradley, T. Lodderstedt, M. Jones, D. Waite, "OAuth 2.0 Demonstrating Proof-of-Possession at the Application Layer (DPoP)"

OPENID4VC-HAIP

Lodderstedt, T., K. Yasuda, "OpenID4VC High Assurance Interoperability Profile with SD-JWT VC"

+
+ + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/en/trust.html b/refs/pull/212/merge/en/trust.html new file mode 100644 index 000000000..01940ac2d --- /dev/null +++ b/refs/pull/212/merge/en/trust.html @@ -0,0 +1,2076 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | The Infrastructure of Trust + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

The Infrastructure of Trust

+

The EUDI Wallet Architecture Reference Framework (EIDAS-ARF) describes the Trust Model as a "collection of rules that ensure the legitimacy of the components and the entities involved in the EUDI Wallet ecosystem".

+

This section outlines the implementation of the Trust Model in an infrastructure that complies with OpenID Federation 1.0 OIDC-FED. This infrastructure involves a RESTful API for distributing metadata, metadata policies, trust marks, public keys, X.509 certificates, and the revocation status of the participants, also called Federation Entities.

+

The Infrastructure of trust facilitates the application of a trust assessment mechanism among the parties defined in the EIDAS-ARF.

+
+federation portrait +
+

Fig. 1 The roles within the Federation, where the Trust Anchor oversees its subordinates, +which include one or more Intermediates and Leaves. In this +representation, both the Trust Anchor and the Intermediates MAY assume the role of Accreditation Body.

+
+
+
+

Federation Roles

+

All the participants are Federation Entities that MUST be accredited by an Accreditation Body, +except for Wallet Instances which are End-User's personal devices certified by their Wallet Provider.

+
+

Note

+

The Wallet Instance, as a personal device, is certified as reliable through a verifiable attestation issued and signed by a trusted third party.

+

This is called Wallet Attestation and is documented in the dedicated section.

+
+

Below the table with the summary of the Federation Entity roles, mapped on the corresponding EUDI Wallet roles, as defined in the EIDAS-ARF.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

EUDI Role

Federation Role

Notes

Public Key Infrastructure (PKI)

Trust Anchor

+

Intermediates

+

The Federation has PKI +capabilities. The +Entity that configures +the entire infrastructure +is the Trust Anchor.

Qualified Trust Service Provider (QTSP)

Leaf

Person Identification Data Provider

Leaf

Qualified Electronic Attestations +of Attributes Provider

Leaf

Electronic Attestations of +Attributes Provider

Leaf

Relying Party

Leaf

Trust Service Provider (TSP)

Leaf

Trusted List

Trust Anchor

+

Intermediates

+

The listing endpoint, the +trust mark status endpoint +and the fetch endpoint must +be exposed by both Trust Anchors +and Intermediates, making +the Trusted List distributed +over multiple Federation Entities, +where each of these is responsible +for their accredited subordinates.

Wallet Provider

Leaf

+
+
+

General Properties

+

OpenID Federation facilitates the building of an infrastructure that is:

+
    +
  • Secure and Tamper-proof, Entities' attestations of metadata and keys are cryptographically signed in the Trust Chain, comprised of attestations issued by multiple parties. These attestations, called statements, cannot be forged or tampered by an adversary;

  • +
  • Privacy-preserving, the infrastructure is public and exposes public data such as public keys and metadata of the participants. It does not require authentication of the consumers and therefore does not track who is assessing trust against whom;

  • +
  • Guarantor of the non-repudiation of long-lived attestations, historical keys endpoints and historical Trust Chains are saved for years according to data retention policies. This enables the certification of the validity of historical compliance, even in cases of revocation, expiration, or rotation of the keys used for signature verification;

  • +
  • Dynamic and flexible, any participants have the freedom to modify parts of their metadata autonomously, as these are published within their domains and verified through the Trust Chain. Simultaneously, the Trust Anchor or its Intermediate may publish a metadata policy to dynamically modify the metadata of all participants - such as disabling a vulnerable signature algorithm - and obtain certainty of propagation within a configured period of time within the federation;

  • +
  • Developer friendly, JWT and JSON formats have been adopted on the web for years. They are cost-effective in terms of storage and processing and have a wide range of solutions available, such as libraries and software development kits, which enable rapid implementation of the solution;

  • +
  • Scalable, the Trust Model can accommodate more than a single organization by using Intermediates and multiple Trust Anchors where needed.

  • +
+
+
+

Trust Model Requirements

+

In the table below is provided the map of the components that the ARF defines within the Trust Model, in the same table is provided their coverage in OIDC-FED.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Component

Satisfied

how

Issuers identification

check-icon

Trust Chain

Issuers registration

check-icon

Trust Anchor

+

Intermediates +accreditation +system

+

Recognised data models and schemas

check-icon

Entity +Configuration

+

Entity +Statements

+

Relying Parties' registration and authentication

check-icon

Trust Chains

+

Federation +Entity +Discovery

+

Trust mechanisms in a cross-domain scenario

check-icon

Trust Chains

+

Federation +Entity +Discovery

+
+
+
+

Federation API endpoints

+

OpenID Federation 1.0 uses RESTful Web Services secured over +HTTPs. OpenID Federation 1.0 defines which are the web endpoints that the participants MUST make +publicly available. The table below summarises the endpoints and their scopes.

+

All the endpoints listed below are defined in the OIDC-FED specs.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

endpoint name

http request

scope

required for

federation metadata

GET .well-known/openid-federation

Metadata that an Entity +publishes about itself, +verifiable with a trusted third +party (Superior Entity). It's +called Entity Configuration.

Trust Anchor

+

Intermediate

+

Wallet Provider

+

Relying Party

+

Credential +Issuer

+

subordinate list endpoint

GET /list

Lists the Subordinates.

Trust Anchor

+

Intermediate

+

fetch endpoint

GET /fetch?sub=https://rp.example.org

Returns a signed document (JWS) +about a specific subject, its +Subordinate. It's called Entity +Statement.

Trust Anchor

+

Intermediate

+

trust mark status

POST /status?sub=...&trust_mark_id=...

Returns the status of the +issuance (validity) of a Trust +Mark related to a specific +subject.

Trust Anchor

+

Intermediate

+

historical keys

GET

+

.well-known/openid-federation-historical-jwks

+

Lists the expired and revoked +keys, with the motivation of the +revocation.

Trust Anchor

+

Intermediate

+
+

All the responses of the federation endpoints are in the form of JWS, with the exception of the Subordinate Listing endpoint and the Trust Mark Status endpoint that are served as plain JSON by default.

+
+
+

Configuration of the Federation

+

The configuration of the federation is published by the Trust Anchor within its Entity Configuration, it is available at the well-known web path corresponding to .well-known/openid-federation.

+

All the participants in the federation MUST obtain the federation configuration before entering the operational phase, and they +MUST keep it up-to-date. The federation configuration is the Trust Anchor's Entity Configuration, it contains the +public keys for signature operations and the maximum number of Intermediates allowed between a Leaf and the Trust Anchor (max_path_length).

+

Below is a non-normative example of a Trust Anchor Entity Configuration, where each parameter is documented in the OpenID Federation specification:

+
{
+    "alg": "RS256",
+    "kid": "FifYx03bnosD8m6gYQIfNHNP9cM_Sam9Tc5nLloIIrc",
+    "typ": "entity-statement+jwt"
+}
+.
+{
+    "exp": 1649375259,
+    "iat": 1649373279,
+    "iss": "https://registry.eidas.trust-anchor.example.eu",
+    "sub": "https://registry.eidas.trust-anchor.example.eu",
+    "jwks": {
+        "keys": [
+            {
+                "kty": "RSA",
+                "n": "3i5vV-_ ...",
+                "e": "AQAB",
+                "kid": "FifYx03bnosD8m6gYQIfNHNP9cM_Sam9Tc5nLloIIrc",
+                "x5c": [ <X.509 Root CA certificate> ]
+            },
+            {
+                "kty": "EC",
+                "kid": "X2ZOMHNGSDc4ZlBrcXhMT3MzRmRZOG9Jd3o2QjZDam51cUhhUFRuOWd0WQ",
+                "crv": "P-256",
+                "x": "1kNR9Ar3MzMokYTY8BRvRIue85NIXrYX4XD3K4JW7vI",
+                "y": "slT14644zbYXYF-xmw7aPdlbMuw3T1URwI4nafMtKrY",
+                "x5c": [ <X.509 Root CA certificate> ]
+            }
+        ]
+    },
+    "metadata": {
+        "federation_entity": {
+            "organization_name": "example TA",
+            "contacts":[
+                "tech@eidas.trust-anchor.example.eu"
+            ],
+            "homepage_uri": "https://registry.eidas.trust-anchor.example.eu",
+            "logo_uri":"https://registry.eidas.trust-anchor.example.eu/static/svg/logo.svg",
+            "federation_fetch_endpoint": "https://registry.eidas.trust-anchor.example.eu/fetch",
+            "federation_resolve_endpoint": "https://registry.eidas.trust-anchor.example.eu/resolve",
+            "federation_list_endpoint": "https://registry.eidas.trust-anchor.example.eu/list",
+            "federation_trust_mark_status_endpoint": "https://registry.eidas.trust-anchor.example.eu/trust_mark_status"
+        }
+    },
+    "trust_mark_issuers": {
+        "https://registry.eidas.trust-anchor.example.eu/openid_relying_party/public": [
+            "https://registry.spid.eidas.trust-anchor.example.eu",
+            "https://public.intermediary.spid.org"
+        ],
+        "https://registry.eidas.trust-anchor.example.eu/openid_relying_party/private": [
+            "https://registry.spid.eidas.trust-anchor.example.eu",
+            "https://private.other.intermediary.org"
+        ]
+    },
+    "constraints": {
+        "max_path_length": 1
+    }
+}
+
+
+
+
+

Entity Configuration

+

The Entity Configuration is the verifiable document that each Federation Entity MUST publish on its own behalf, in the .well-known/openid-federation endpoint.

+

The Entity Configuration HTTP Response MUST set the media type to application/entity-statement+jwt.

+

The Entity Configuration MUST be cryptographically signed. The public part of this key MUST be provided in the +Entity Configuration and within the Entity Statement issued by a immediate superior and related to its subordinate Federation Entity.

+

The Entity Configuration MAY also contain one or more Trust Marks.

+
+

Note

+

Entity Configuration Signature

+

All the signature-check operations regarding the Entity Configurations, Entity Statements and Trust Marks, are carried out with the Federation public keys. For the supported algorithms refer to Section Cryptografic Algorithm.

+
+
+

Entity Configurations Common Parameters

+

The Entity Configurations of all the participants in the federation MUST have in common the parameters listed below.

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

iss

String. Identifier of the issuing Entity.

sub

String. Identifier of the Entity to which it is referred. It MUST be equal to iss.

iat

UNIX Timestamp with the time of generation of the JWT, coded as NumericDate as indicated at RFC 7519.

exp

UNIX Timestamp with the expiry time of the JWT, coded as NumericDate as indicated at RFC 7519.

jwks

A JSON Web Key Set (JWKS) RFC 7517 that represents the public part of the signing keys of the Entity at issue. Each JWK in the JWK set MUST have a key ID (claim kid) and MAY have a x5c parameter, as defined in RFC 7517. It contains the Federation Entity Keys required for the operations of trust evaluation.

metadata

JSON Object. Each key of the JSON Object represents a metadata type identifier +containing JSON Object representing the metadata, according to the metadata +schema of that type. An Entity Configuration MAY contain more metadata statements, but only one for each type of +metadata (<entity_type>). the metadata types are defined in the section Metadata Types.

+
+
+

Entity Configuration Trust Anchor

+

The Trust Anchor Entity Configuration, in addition of the common parameters listed above, MAY contain the following parameters:

+ +++++ + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Required

constraints

JSON Object that describes the trust evaluation mechanisms bounds. It MUST contain the attribute max_path_length that +defines the maximum number of Intermediates between a Leaf and the Trust Anchor.

check-icon

trust_mark_issuers

JSON Array that defines which Federation authorities are considered trustworthy +for issuing specific Trust Marks, assigned with their unique identifiers.

uncheck-icon

trust_mark_owners

JSON Array that lists which entities are considered to be the owners of +specific Trust Marks.

uncheck-icon

+
+
+

Entity Configuration Leaves and Intermediates

+

In addition to the previously defined claims, the Entity Configuration of the Leaf and of the Intermediate Entities, MUST contain the parameters listed below:

+ +++++ + + + + + + + + + + + + + + + + +

Claim

Description

Required

authority_hints

Array of URLs (String). It contains a list of URLs of the immediate superior entities, such as the Trust Anchor or +an Intermediate, that issues an Entity Statement related to this subject.

check-icon

trust_marks

A JSON Array containing the Trust Marks.

uncheck-icon

+
+
+

Metadata Types

+

In this section are defined the main metadata types mapped to the roles of the ecosystem, +giving the references of the metadata protocol for each of these.

+
+

Note

+

The entries that don't have any reference to a known draft or standard are intended to be defined in this technical reference.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Entity

metadata type

references

Trust Anchor

federation_entity

OIDC-FED

Intermediate

federation_entity

OIDC-FED

Wallet Provider

federation_entity

+

wallet_provider

+

--

Credential Issuer

federation_entity

+

openid_credential_issuer

+

OPENID4VCI

Relying Party

federation_entity

+

wallet_relying_party

+

OIDC-FED

+

OpenID4VP

+
+
+

Note

+

Wallet Provider metadata is defined in the section below.

+

Wallet Solution section.

+
+
+
+
+

Entity Statements

+

Trust Anchors and Intermediates publish Entity Statements related to their immediate Subordinates. +The Entity Statement MAY contain a metadata policy and the Trust Marks related to a Subordinate.

+

The metadata policy, when applied, makes one or more changes to the final metadata of the Leaf. The final metadata of a Leaf is derived from the Trust Chain that contains all the statements, starting from the Entity Configuration up to the Entity Statement issued by the Trust Anchor.

+

Trust Anchors and Intermediates MUST expose the Federation Fetch endpoint, where the Entity Statements are requested to validate the Leaf's Entity Configuration signature.

+
+

Note

+

The Federation Fetch endpoint MAY also publish X.509 certificates for each of the public keys of the Subordinate. Making the distribution of the issued X.509 certificates via a RESTful service.

+
+

Below there is a non-normative example of an Entity Statement issued by an Accreditation Body (such as the Trust Anchor or its Intermediate) in relation to one of its Subordinates.

+
{
+    "alg": "RS256",
+    "kid": "em3cmnZgHIYFsQ090N6B3Op7LAAqj8rghMhxGmJstqg",
+    "typ": "entity-statement+jwt"
+}
+.
+{
+    "exp": 1649623546,
+    "iat": 1649450746,
+    "iss": "https://intermediate.eidas.example.org",
+    "sub": "https://rp.example.it",
+    "jwks": {
+        "keys": [
+            {
+                "kty": "EC",
+                "kid": "2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs",
+                "crv": "P-256",
+                "x": "1kNR9Ar3MzMokYTY8BRvRIue85NIXrYX4XD3K4JW7vI",
+                "y": "slT14644zbYXYF-xmw7aPdlbMuw3T1URwI4nafMtKrY",
+                "x5c": [ <X.509 certificate> ]
+            }
+        ]
+    },
+    "metadata_policy": {
+        "wallet_relying_party": {
+            "scope": {
+                "subset_of": [
+                     "eu.europa.ec.eudiw.pid.1",
+                     "given_name",
+                     "family_name",
+                     "email"
+                  ]
+            },
+            "vp_formats": {
+                "vc+sd-jwt": {
+                    "sd-jwt_alg_values": [
+                        "ES256",
+                        "ES384"
+                    ],
+                    "kb-jwt_alg_values": [
+                        "ES256",
+                        "ES384"
+                    ]
+                }
+            }
+        }
+     }
+}
+
+
+
+

Note

+

Entity Statement Signature

+

The same considerations and requirements made for the Entity Configuration +and in relation to the signature mechanisms MUST be applied for the Entity Statements.

+
+
+

Entity Statement

+

The Entity Statement issued by Trust Anchors and Intermediates contains the following attributes:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Required

iss

See OIDC-FED Section 3.1 for further details.

check-icon

sub

See OIDC-FED Section 3.1 for further details.

check-icon

iat

See OIDC-FED Section 3.1 for further details.

check-icon

exp

See OIDC-FED Section 3.1 for further details.

check-icon

jwks

Federation JWKS of the sub entity. See OIDC-FED Section 3.1 for further details.

check-icon

metadata_policy

JSON Object that describes the Metadata policy. Each key of the JSON Object represents an identifier of the metadata type and each value MUST be a JSON Object that represents the metadata policy according to that metadata type. Please refer to the OIDC-FED specifications, Section-5.1, for the implementation details.

uncheck-icon

trust_marks

JSON Array containing the Trust Marks issued by itself for the subordinate subject.

uncheck-icon

constraints

It MAY contain the allowed_leaf_entity_types, that restricts what types of metadata the subject is allowed to publish.

check-icon

+
+
+
+

Trust Evaluation Mechanism

+

The Trust Anchor publishes the list of its Subordinates (Federation Subordinate Listing endpoint) and the attestations of their metadata and public keys (Entity Statements).

+

Each participant, including Trust Anchor, Intermediate, Credential Issuer, Wallet Provider, and Relying Party, publishes its own metadata and public keys (Entity Configuration endpoint) in the well-known web resource .well-known/openid-federation.

+

Each of these can be verified using the Entity Statement issued by a superior, such as the Trust Anchor or an Intermediate.

+

Each Entity Statement is verifiable over time and MUST have an expiration date. The revocation of each statement is verifiable in real time and online (only for remote flows) through the federation endpoints.

+
+

Note

+

The revocation of an Entity is made with the unavailability of the Entity Statement related to it. If the Trust Anchor or its Intermediate doesn't publish a valid Entity Statement, or if it publishes an expired/invalid Entity Statement, the subject of the Entity Statement MUST be intended as not valid or revoked.

+
+

The concatenation of the statements, through the combination of these signing mechanisms and the binding of claims and public keys, forms the Trust Chain.

+

The Trust Chains can also be verified offline, using one of the Trust Anchor's public keys.

+
+

Note

+

Since the Wallet Instance is not a Federation Entity, the Trust Evaluation Mechanism related to it requires the presentation of the Wallet Attestation during the credential issuance and presentation phases.

+

The Wallet Attestation conveys all the required information pertaining to the instance, such as its public key and any other technical or administrative information, without any User's personal data.

+
+
+

Relying Party Attestation

+

The Relying Party is accredited by a Trust Anchor or its Intermediate and obtains a Trust Mark to be included in its Entity Configuration. In its Entity Configuration the Relying Party publishes its specific metadata, including the supported signature and encryption algorithms and any other necessary information for the interoperability requirements.

+

Any requests for User attributes, such as PID or (Q)EAA, from the Relying Party to Wallet Instances are signed and SHOULD contain the verifiable Trust Chain regarding the Relying Party.

+

The Wallet Instance verifies that the Trust Chain related to the Relying Party is still active, proving that the Relying Party is still part of the Federation and not revoked.

+

The Trust Chain SHOULD be contained within the signed request in the form of a JWS header parameter.

+

In offline flows, Trust Chain verification enables the assessment of the reliability of Trust Marks and Attestations contained within.

+
+
+

Wallet Attestation

+

The Wallet Provider issues the Wallet Attestation, certifying the operational status of its Wallet Instances and including one of their public keys.

+

The Wallet Attestation contains the Trust Chain that attests the reliability for its issuer (Wallet Provider) at the time of issuance.

+

The Wallet Instance provides its Wallet Attestation within the signed request during the PID issuance phase, containing the Trust Chain related to the Wallet Provider.

+
+
+

Trust Chain

+

The Trust Chain is a sequence of verified statements that validates a participant's compliance with the Federation. It has an expiration date time, beyond which it MUST be renewed to obtain the fresh and updated metadata. The expiration date of the Trust Chain is determined by the earliest expiration timestamp among all the expiration timestamp contained in the statements. No Entity can force the expiration date of the Trust Chain to be higher than the one configured by the Trust Anchor.

+

Below is an abstract representation of a Trust Chain.

+
[
+    "EntityConfiguration-as-SignedJWT-selfissued-byLeaf",
+    "EntityStatement-as-SignedJWT-issued-byTrustAnchor"
+]
+
+
+

Below is a non-normative example of a Trust Chain in its original format (JSON Array containing JWS as strings) with an Intermediate involved.

+
[
+  "eyJhbGciOiJFUzI1NiIsImtpZCI6Ik5GTTFXVVZpVWxZelVXcExhbWxmY0VwUFJWWTJWWFpJUmpCblFYWm1SSGhLWVVWWVVsZFRRbkEyTkEiLCJ0eXAiOiJhcHBsaWNhdGlvbi9lbnRpdHktc3RhdGVtZW50K2p3dCJ9.eyJleHAiOjE2NDk1OTA2MDIsImlhdCI6MTY0OTQxNzg2MiwiaXNzIjoiaHR0cHM6Ly9ycC5leGFtcGxlLm9yZyIsInN1YiI6Imh0dHBzOi8vcnAuZXhhbXBsZS5vcmciLCJqd2tzIjp7ImtleXMiOlt7Imt0eSI6IkVDIiwia2lkIjoiTkZNMVdVVmlVbFl6VVdwTGFtbGZjRXBQUlZZMlZYWklSakJuUVhabVJIaEtZVVZZVWxkVFFuQTJOQSIsImNydiI6IlAtMjU2IiwieCI6InVzbEMzd2QtcFgzd3o0YlJZbnd5M2x6cGJHWkZoTjk2aEwyQUhBM01RNlkiLCJ5IjoiVkxDQlhGV2xkTlNOSXo4a0gyOXZMUjROMThCa3dHT1gyNnpRb3J1UTFNNCJ9XX0sIm1ldGFkYXRhIjp7Im9wZW5pZF9yZWx5aW5nX3BhcnR5Ijp7ImFwcGxpY2F0aW9uX3R5cGUiOiJ3ZWIiLCJjbGllbnRfaWQiOiJodHRwczovL3JwLmV4YW1wbGUub3JnLyIsImNsaWVudF9yZWdpc3RyYXRpb25fdHlwZXMiOlsiYXV0b21hdGljIl0sImp3a3MiOnsia2V5cyI6W3sia3R5IjoiRUMiLCJraWQiOiJORk0xV1VWaVVsWXpVV3BMYW1sZmNFcFBSVlkyVlhaSVJqQm5RWFptUkhoS1lVVllVbGRUUW5BMk5BIiwiY3J2IjoiUC0yNTYiLCJ4IjoidXNsQzN3ZC1wWDN3ejRiUllud3kzbHpwYkdaRmhOOTZoTDJBSEEzTVE2WSIsInkiOiJWTENCWEZXbGROU05JejhrSDI5dkxSNE4xOEJrd0dPWDI2elFvcnVRMU00In1dfSwiY2xpZW50X25hbWUiOiJOYW1lIG9mIGFuIGV4YW1wbGUgb3JnYW5pemF0aW9uIiwiY29udGFjdHMiOlsib3BzQHJwLmV4YW1wbGUuaXQiXSwiZ3JhbnRfdHlwZXMiOlsicmVmcmVzaF90b2tlbiIsImF1dGhvcml6YXRpb25fY29kZSJdLCJyZWRpcmVjdF91cmlzIjpbImh0dHBzOi8vcnAuZXhhbXBsZS5vcmcvb2lkYy9ycC9jYWxsYmFjay8iXSwicmVzcG9uc2VfdHlwZXMiOlsiY29kZSJdLCJzY29wZSI6ImV1LmV1cm9wYS5lYy5ldWRpdy5waWQuMSBldS5ldXJvcGEuZWMuZXVkaXcucGlkLml0LjEgZW1haWwiLCJzdWJqZWN0X3R5cGUiOiJwYWlyd2lzZSJ9LCJmZWRlcmF0aW9uX2VudGl0eSI6eyJmZWRlcmF0aW9uX3Jlc29sdmVfZW5kcG9pbnQiOiJodHRwczovL3JwLmV4YW1wbGUub3JnL3Jlc29sdmUvIiwib3JnYW5pemF0aW9uX25hbWUiOiJFeGFtcGxlIFJQIiwiaG9tZXBhZ2VfdXJpIjoiaHR0cHM6Ly9ycC5leGFtcGxlLml0IiwicG9saWN5X3VyaSI6Imh0dHBzOi8vcnAuZXhhbXBsZS5pdC9wb2xpY3kiLCJsb2dvX3VyaSI6Imh0dHBzOi8vcnAuZXhhbXBsZS5pdC9zdGF0aWMvbG9nby5zdmciLCJjb250YWN0cyI6WyJ0ZWNoQGV4YW1wbGUuaXQiXX19LCJ0cnVzdF9tYXJrcyI6W3siaWQiOiJodHRwczovL3JlZ2lzdHJ5LmVpZGFzLnRydXN0LWFuY2hvci5leGFtcGxlLmV1L29wZW5pZF9yZWx5aW5nX3BhcnR5L3B1YmxpYy8iLCJ0cnVzdF9tYXJrIjoiZXlKaCBcdTIwMjYifV0sImF1dGhvcml0eV9oaW50cyI6WyJodHRwczovL2ludGVybWVkaWF0ZS5laWRhcy5leGFtcGxlLm9yZyJdfQ.Un315HdckvhYA-iRregZAmL7pnfjQH2APz82blQO5S0sl1JR0TEFp5E1T913g8GnuwgGtMQUqHPZwV6BvTLA8g",
+  "eyJhbGciOiJFUzI1NiIsImtpZCI6IlNURkRXV2hKY0dWWFgzQjNSVmRaYWtsQ0xUTnVNa000WTNGNlFUTk9kRXRyZFhGWVlYWjJjWGN0UVEiLCJ0eXAiOiJhcHBsaWNhdGlvbi9lbnRpdHktc3RhdGVtZW50K2p3dCJ9.eyJleHAiOjE2NDk2MjM1NDYsImlhdCI6MTY0OTQ1MDc0NiwiaXNzIjoiaHR0cHM6Ly9pbnRlcm1lZGlhdGUuZWlkYXMuZXhhbXBsZS5vcmciLCJzdWIiOiJodHRwczovL3JwLmV4YW1wbGUub3JnIiwiandrcyI6eyJrZXlzIjpbeyJrdHkiOiJFQyIsImtpZCI6Ik5GTTFXVVZpVWxZelVXcExhbWxmY0VwUFJWWTJWWFpJUmpCblFYWm1SSGhLWVVWWVVsZFRRbkEyTkEiLCJjcnYiOiJQLTI1NiIsIngiOiJ1c2xDM3dkLXBYM3d6NGJSWW53eTNsenBiR1pGaE45NmhMMkFIQTNNUTZZIiwieSI6IlZMQ0JYRldsZE5TTkl6OGtIMjl2TFI0TjE4Qmt3R09YMjZ6UW9ydVExTTQifV19LCJtZXRhZGF0YV9wb2xpY3kiOnsib3BlbmlkX3JlbHlpbmdfcGFydHkiOnsic2NvcGUiOnsic3Vic2V0X29mIjpbImV1LmV1cm9wYS5lYy5ldWRpdy5waWQuMSwgIGV1LmV1cm9wYS5lYy5ldWRpdy5waWQuaXQuMSJdfSwicmVxdWVzdF9hdXRoZW50aWNhdGlvbl9tZXRob2RzX3N1cHBvcnRlZCI6eyJvbmVfb2YiOlsicmVxdWVzdF9vYmplY3QiXX0sInJlcXVlc3RfYXV0aGVudGljYXRpb25fc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZCI6eyJzdWJzZXRfb2YiOlsiUlMyNTYiLCJSUzUxMiIsIkVTMjU2IiwiRVM1MTIiLCJQUzI1NiIsIlBTNTEyIl19fX0sInRydXN0X21hcmtzIjpbeyJpZCI6Imh0dHBzOi8vdHJ1c3QtYW5jaG9yLmV4YW1wbGUuZXUvb3BlbmlkX3JlbHlpbmdfcGFydHkvcHVibGljLyIsInRydXN0X21hcmsiOiJleUpoYiBcdTIwMjYifV19._qt5-T6DahP3TuWa_27klE8I9Z_sPK2FtQlKY6pGMPchbSI2aHXY3aAXDUrObPo4CHtqgg3J2XcrghDFUCFGEQ",
+  "eyJhbGciOiJFUzI1NiIsImtpZCI6ImVXa3pUbWt0WW5kblZHMWxhMjU1ZDJkQ2RVZERSazQwUWt0WVlVMWFhRFZYT1RobFpHdFdXSGQ1WnciLCJ0eXAiOiJhcHBsaWNhdGlvbi9lbnRpdHktc3RhdGVtZW50K2p3dCJ9.eyJleHAiOjE2NDk2MjM1NDYsImlhdCI6MTY0OTQ1MDc0NiwiaXNzIjoiaHR0cHM6Ly90cnVzdC1hbmNob3IuZXhhbXBsZS5ldSIsInN1YiI6Imh0dHBzOi8vaW50ZXJtZWRpYXRlLmVpZGFzLmV4YW1wbGUub3JnIiwiandrcyI6eyJrZXlzIjpbeyJrdHkiOiJFQyIsImtpZCI6IlNURkRXV2hKY0dWWFgzQjNSVmRaYWtsQ0xUTnVNa000WTNGNlFUTk9kRXRyZFhGWVlYWjJjWGN0UVEiLCJjcnYiOiJQLTI1NiIsIngiOiJyQl9BOGdCUnh5NjhVTkxZRkZLR0ZMR2VmWU5XYmgtSzh1OS1GYlQyZkZJIiwieSI6IlNuWVk2Y3NjZnkxcjBISFhLTGJuVFZsamFndzhOZzNRUEs2WFVoc2UzdkUifV19LCJ0cnVzdF9tYXJrcyI6W3siaWQiOiJodHRwczovL3RydXN0LWFuY2hvci5leGFtcGxlLmV1L2ZlZGVyYXRpb25fZW50aXR5L3RoYXQtcHJvZmlsZSIsInRydXN0X21hcmsiOiJleUpoYiBcdTIwMjYifV19.r3uoi-U0tx0gDFlnDdITbcwZNUpy7M2tnh08jlD-Ej9vMzWMCXOCCuwIn0ZT0jS4M_sHneiG6tLxRqj-htI70g"
+]
+
+
+
+

Note

+

The entire Trust Chain is verifiable by only possessing the Trust Anchor's public keys.

+
+
+
+

Offline Trust Attestation Mechanisms

+

The offline flows do not allow for real-time evaluation of an Entity's status, such as its revocation. At the same time, using short-lived Trust Chains enables the attainment of trust attestations compatible with the required revocation administrative protocols (e.g., a revocation must be propagated in less than 24 hours, thus the Trust Chain must not be valid for more than that period).

+
+

Offline EUDI Wallet Trust Attestation

+

Given that the Wallet Instance cannot publish its metadata online at the .well-known/openid-federation endpoint, +it MUST obtain a Wallet Attestation issued by its Wallet Provider. The Wallet Attestation MUST contain all the relevant information regarding the security capabilities of the Wallet Instance and its protocol related configuration. It SHOULD contain the Trust Chain related to its issuer (Wallet Provider).

+
+
+

Offline Relying Party Metadata

+

Since the Federation Entity Discovery is only applicable in online scenarios, it is possible to include the Trust Chain in the presentation requests that the Relying Party may issue for a Wallet Instance.

+

The Relying Party MUST sign the presentation request, the request SHOULD include the trust_chain claim in its JWS header parameters, containing the Federation Trust Chain related to itself.

+

The Wallet Instance that verifies the request issued by the Relying Party MUST use the Trust Anchor's public keys to validate the entire Trust Chain related to the Relying Party before attesting its reliability.

+

Furthermore, the Wallet Instance applies the metadata policy, if any.

+
+
+
+
+

Non-repudiability of the Long Lived Attestations

+

The Trust Anchor and its Intermediate MUST expose the Federation Historical Keys endpoint, where are published all the public part of the Federation Entity Keys that are no longer used, whether expired or revoked.

+

The details of this endpoint are defined in the OIDC-FED Section 7.6.

+

Each JWS containing a Trust Chain in the form of a JWS header parameter can be verified over time, since the entire Trust Chain is verifiable using the Trust Anchor's public key.

+

Even if the Trust Anchor has changed its cryptographic keys for digital signature, the Federation Historical Keys endpoint always makes the keys no longer used available for historical signature verifications.

+
+
+

Privacy Remarks

+
    +
  • Wallet Instances MUST NOT publish their metadata through an online service.

  • +
  • The trust infrastructure MUST be public, with all endpoints publicly accessible without any client credentials that may disclose who is requesting access.

  • +
  • When a Wallet Instance requests the Entity Statements to build the Trust Chain for a specific Relying Party or validates a Trust Mark online, issued for a specific Relying Party, the Trust Anchor or its Intermediate do not know that a particular Wallet Instance is inquiring about a specific Relying Party; instead, they only serve the statements related to that Relying Party as a public resource.

  • +
  • The Wallet Instance metadata MUST not contain information that may disclose technical information about the hardware used.

  • +
  • Leaf entity, Intermediate, and Trust Anchor metadata may include the necessary amount of data as part of administrative, technical, and security contact information. It is generally not recommended to use personal contact details in such cases. From a legal perspective, the publication of such information is needed for operational support concerning technical and security matters and the GDPR regulation.

  • +
+
+
+

Considerations about Decentralization

+
    +
  • There may be more than a single Trust Anchor.

  • +
  • In some cases, a trust verifier may trust an Intermediate, especially when the Intermediate acts as a Trust Anchor within a specific perimeter, such as cases where the Leafs are both in the same perimeter like a Member State jurisdiction (eg: an Italian Relying Party with an Italian Wallet Instance may consider the Italian Intermediate as a Trust Anchor for the scopes of their interactions).

  • +
  • Trust attestations (Trust Chain) should be included in the JWS issued by Credential Issuers, and the Presentation Requests of RPs should contain the Trust Chain related to them (issuers of the presentation requests).

  • +
  • Since the credential presentation must be signed, storing the signed presentation requests and responses, which include the Trust Chain, the Wallet Instance may have the snapshot of the federation configuration (Trust Anchor Entity Configuration in the Trust Chain) and the verifiable reliability of the Relying Party it has interacted with.

  • +
  • Each signed attestation is long-lived since it can be cryptographically validated even when the federation configuration changes or the keys of its issuers are renewed.

  • +
  • Each participant should be able to update its Entity Configuration without notifying the changes to any third party. The metadata policy contained within a Trust Chain must be applied to overload any information related to protocol specific metadata.

  • +
+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/en/wallet-attestation.html b/refs/pull/212/merge/en/wallet-attestation.html new file mode 100644 index 000000000..5be9fb99c --- /dev/null +++ b/refs/pull/212/merge/en/wallet-attestation.html @@ -0,0 +1,1910 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Wallet Attestation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

Wallet Attestation

+

The Wallet Attestation containing details about the Wallet Instance and the device's security level where the Wallet Instance is installed. It generally attests the authenticity, integrity, security, privacy, and trust of a specific Wallet Instance. The Wallet Attestation MUST contain a Wallet Instance public key.

+
+

General Properties

+

The Wallet Attestation:

+
    +
  • MUST be issued and MUST be signed by Wallet Provider;

  • +
  • MUST give all the relevant information to attests the integrity and security of the device where the Wallet Instance is installed.

  • +
+

It is necessary for each Wallet Instance to obtain a Wallet Attestation before entering the Operational state.

+
+
+

Requirements

+

The following requirements for the Wallet Attestation are met:

+
    +
  1. The Wallet Attestation MUST use the signed JSON Web Token (JWT) format.

  2. +
  3. The Wallet Provider MUST offer a RESTful set of services for issuing the Wallet Attestations.

  4. +
  5. The Wallet Attestation MUST be securely bound to the Wallet Instance public key (Holder Key Binding).

  6. +
  7. The Wallet Attestation MUST be issued and signed by an accredited and reliable Wallet Provider, thereby providing integrity and authenticity to the attestation.

  8. +
  9. The Wallet Attestation MUST ensure the integrity and authenticity of the Wallet Instance, verifying that it was accurately created and provided by the Wallet Provider.

  10. +
  11. Each Wallet Instance SHOULD be able to request multiple attestations with different public keys associated to them. This requirement provides a privacy-preserving measure, as the public key MAY be used as a tracking tool during the presentation phase (see also the point number 10, listed below).

  12. +
  13. The Wallet Attestation SHOULD be usable multiple times during its validity period, allowing for repeated authentication and authorization without the need to request new attestations with each interaction.

  14. +
  15. The Wallet Attestation SHOULD have an expiration date time, after which it will no longer be considered valid.

  16. +
  17. When the private key associated with the Wallet Instance is lost or deleted, the attestation MUST become invalid to prevent unauthorized use of the Wallet Instance.

  18. +
+
+
+

High-level Design

+
+

Static Component View

+
+The image illustrates the containment of Wallet Provider and Wallet Instances within the Wallet Solution, managed by the Wallet Provider. +
+
+
+

Dynamic Component View

+

This section describes the Wallet Attestation format and how the Wallet Provider issues it.

+
+The figure illustrates the sequence diagram for issuing a Wallet Attestation, with the steps explained below. +
+
    +
  • Message 1: The User starts the Wallet Instance mobile app and gets authenticated to it.

  • +
  • Message 2: The Wallet Instance verifies the Wallet Provider's trustworthiness by evaluating its Trust Chain.

  • +
  • Message 3-4: The Wallet Instance retrieves the Wallet Provider metadata, including the list of supported algorithms, public keys, and endpoints.

  • +
  • Message 5: The Wallet Instance generates a new key pair.

  • +
  • Message 6-7: The Wallet Instance requests a nonce from the App Attestation Service.

  • +
  • Message 8: The Wallet Instance creates a Wallet Attestation Request in JWS format, signed with the private key associated with the public key for which it request the attestation.

  • +
  • Message 9-13: The Wallet Instance provides the Wallet Attestation Request to the Wallet Provider, which validates it and returns a signed attestation to the Wallet Instance.

  • +
  • Message 13-14: The Wallet Instance receives the Wallet Attestation signed by the Wallet Provider and performs security and integrity verifications.

  • +
  • Message 15: The Wallet Attestation is now ready for use.

  • +
+
+
+
+

Detailed Design

+

The detailed design is explained below.

+
+

Wallet Attestation Request

+

To obtain a Wallet Attestation from the Wallet +Provider it is necessary to send a Wallet Attestation +Request from the Wallet Instance containing the associated public key +, the nonce value provided by the App Attestation Service and a jti value.

+

The Wallet Instance MUST do an HTTP request to the Wallet Provider's token endpoint, +using the method POST.

+

The token endpoint (as defined in RFC 7523 section 4) requires the following parameters +encoded in application/x-www-form-urlencoded format:

+
    +
  • grant_type set to urn:ietf:params:oauth:grant-type:jwt-bearer;

  • +
  • assertion containing the signed JWT defined in the Section Wallet Attestation Request.

  • +
+

Below a non-normative example of the HTTP request.

+
POST /token HTTP/1.1
+Host: wallet-provider.example.org
+Content-Type: application/x-www-form-urlencoded
+
+grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
+&assertion=eyJhbGciOiJFUzI1NiIsImtpZCI6ImtoakZWTE9nRjNHeGRxd2xVTl9LWl83NTVUT1ZEbmJIaDg2TW1KcHh2a1UifQ.eyJpc3MiOiAidmJlWEprc000NXhwaHRBTm5DaUc2bUN5dVU0amZHTnpvcEd1S3ZvZ2c5YyIsICJhdWQiOiAiaHR0cHM6Ly93YWxsZXQtcHJvdmlkZXIuZXhhbXBsZS5vcmciLCAianRpIjogImY1NjUyMDcyLWFiZWYtNDU5OS1iODYzLTlhNjkwNjA3MzJjYyIsICJub25jZSI6ICIuLi4uLiIsICJjbmYiOiB7Imp3ayI6IHsiY3J2IjogIlAtMjU2IiwgImt0eSI6ICJFQyIsICJ4IjogIjRITnB0SS14cjJwanlSSktHTW56NFdtZG5RRF91SlNxNFI5NU5qOThiNDQiLCAieSI6ICJMSVpuU0IzOXZGSmhZZ1MzazdqWEU0cjMtQ29HRlF3WnRQQklScXBObHJnIiwgImtpZCI6ICJ2YmVYSmtzTTQ1eHBodEFObkNpRzZtQ3l1VTRqZkdOem9wR3VLdm9nZzljIn19LCAiaWF0IjogMTY5MTQ4ODk2MiwgImV4cCI6IDE2OTE0OTYxNjJ9.Dg_yFaiv6lVftR3FFx0v5JW250mBgXLVP1j0ezZcHRyitqSY7xGmx4y-MGur93FAS85vf_Da-L-REVEltwU2Jw
+
+
+

The response is the Wallet Attestation in JWT format:

+
HTTP/1.1 201 OK
+Content-Type: application/jwt
+
+eyJhbGciOiJFUzI1NiIsInR5cCI6IndhbGxldC1hdHRlc3RhdGlvbitqd3QiLCJraWQiOiI1dDVZWXBCaE4tRWdJRUVJNWlVenI2cjBNUjAyTG5WUTBPbWVrbU5LY2pZIiwidHJ1c3RfY2hhaW4iOlsiZXlKaGJHY2lPaUpGVXouLi42UzBBIiwiZXlKaGJHY2lPaUpGVXouLi5qSkxBIiwiZXlKaGJHY2lPaUpGVXouLi5IOWd3Il19.eyJpc3MiOiJodHRwczovL3dhbGxldC1wcm92aWRlci5leGFtcGxlLm9yZyIsInN1YiI6InZiZVhKa3NNNDV4cGh0QU5uQ2lHNm1DeXVVNGpmR056b3BHdUt2b2dnOWMiLCJ0eXBlIjoiV2FsbGV0SW5zdGFuY2VBdHRlc3RhdGlvbiIsInBvbGljeV91cmkiOiJodHRwczovL3dhbGxldC1wcm92aWRlci5leGFtcGxlLm9yZy9wcml2YWN5X3BvbGljeSIsInRvc191cmkiOiJodHRwczovL3dhbGxldC1wcm92aWRlci5leGFtcGxlLm9yZy9pbmZvX3BvbGljeSIsImxvZ29fdXJpIjoiaHR0cHM6Ly93YWxsZXQtcHJvdmlkZXIuZXhhbXBsZS5vcmcvbG9nby5zdmciLCJhdHRlc3RlZF9zZWN1cml0eV9jb250ZXh0IjoiaHR0cHM6Ly93YWxsZXQtcHJvdmlkZXIuZXhhbXBsZS5vcmcvTG9BL2Jhc2ljIiwiY25mIjp7Imp3ayI6eyJjcnYiOiJQLTI1NiIsImt0eSI6IkVDIiwieCI6IjRITnB0SS14cjJwanlSSktHTW56NFdtZG5RRF91SlNxNFI5NU5qOThiNDQiLCJ5IjoiTElablNCMzl2RkpoWWdTM2s3alhFNHIzLUNvR0ZRd1p0UEJJUnFwTmxyZyIsImtpZCI6InZiZVhKa3NNNDV4cGh0QU5uQ2lHNm1DeXVVNGpmR056b3BHdUt2b2dnOWMifX0sImF1dGhvcml6YXRpb25fZW5kcG9pbnQiOiJldWRpdzoiLCJyZXNwb25zZV90eXBlc19zdXBwb3J0ZWQiOlsidnBfdG9rZW4iXSwidnBfZm9ybWF0c19zdXBwb3J0ZWQiOnsiand0X3ZwX2pzb24iOnsiYWxnX3ZhbHVlc19zdXBwb3J0ZWQiOlsiRVMyNTYiXX0sImp3dF92Y19qc29uIjp7ImFsZ192YWx1ZXNfc3VwcG9ydGVkIjpbIkVTMjU2Il19fSwicmVxdWVzdF9vYmplY3Rfc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZCI6WyJFUzI1NiJdLCJwcmVzZW50YXRpb25fZGVmaW5pdGlvbl91cmlfc3VwcG9ydGVkIjpmYWxzZSwiaWF0IjoxNjg3MjgxMTk1LCJleHAiOjE2ODcyODgzOTV9.tNvCyFPCL5tUi2NakKwdaG9xbrtWWl4djSRYRfHrF8NdmffdT044U55pRn35J2cl0LZxbesEDrfSAz2pllw2Ug
+
+
+

Below are described the JWT headers and the payload claims +of the assertion used in the request.

+
+

Assertion Header

+ + + + + + + + + + + + + + + +

key

value

alg

Algorithm to verify the token +signature (es. ES256).

kid

Key id of the public key +created by the Wallet Instance.

typ

Media type, set to +wiar+jwt.

+
+
+

Assertion Payload

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

key

value

+
iss
+

+

+

+
+
+
Thumbprint value
+
of the JWK of the Wallet Instance
+
for which the attestation is
+
being requested.
+
+
+
aud
+

+
+
+
The public url of the Wallet
+
Provider.
+
+
+
jti
+

+

+
+
+
Unique identifier of the request, according to
+ +

+
+
+
nonce
+

+
+
+
The nonce value obtained from the
+
App Attestation Service.
+
+
+
cnf
+

+

+

+
+
+
JSON object, according to
+ +
containing the public part of an asymmetric key pair owned
+
by the Wallet Instance.
+
+
+
iat
+

+
+
+
Unix timestamp of attestation request
+
issuance time.
+
+
+
exp
+

+
+
+
Unix timestamp regarding the
+
expiration date time.
+
+
+

Below a non-normative example of the Wallet Attestation +request where the decoded JWS headers and payload are separated by a comma:

+
{
+  "alg": "ES256",
+  "kid": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c",
+  "typ": "wiar+jwt"
+}
+.
+{
+  "iss": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c",
+  "aud": "https://wallet-provider.example.org",
+  "jti": "6ec69324-60a8-4e5b-a697-a766d85790ea",
+  "nonce" : ".....",
+  "cnf": {
+    "jwk": {
+      "crv": "P-256",
+      "kty": "EC",
+      "x": "4HNptI-xr2pjyRJKGMnz4WmdnQD_uJSq4R95Nj98b44",
+      "y": "LIZnSB39vFJhYgS3k7jXE4r3-CoGFQwZtPBIRqpNlrg",
+      "kid": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c"
+    }
+  },
+  "iat": 1686645115,
+  "exp": 1686652315
+}
+
+
+

Whose corresponding JWS is verifiable using the public part of an asymmetric +key pair owned by the Wallet Instance that has a key id which is the same +as the kid made available in the JWS header.

+
+
+
+

Wallet Attestation

+

The Wallet Attestation MUST be provisioned in JWT format, with +headers and payload claims are listed below.

+ +
+

Payload

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

key

value

+
iss
+
+
+
The public url of the Wallet Provider
+
+
+
sub
+

+

+

+
+
+
Thumbprint value
+
of the JWK of the Wallet Instance
+
for which the attestation is
+
being issued.
+
+
+
iat
+

+
+
+
Unix timestamp of attestation
+
issuance time.
+
+
+
exp
+

+

+

+

+
+
+
Unix timestamp regarding the
+
expiration date time.
+
A good practice to avoid security
+
problems is to have a limited
+
duration of the attestation.
+
+
+
aal
+

+

+
+
+
JSON String asserting the authentication level
+
of the Wallet and the key as asserted in
+
the cnf claim.
+
+
+
cnf
+

+

+

+
+
+
This parameter contains the jwk
+
parameter
+
with the public key of the Wallet Instance
+
necessary for the Holder Key Binding.
+
+
+
authorization_endpoint
+

+
+
+
URL of the SIOPv2
+
Authorization Endpoint.
+
+
+
response_types_supported
+

+
+
+
JSON array containing a list of
+
the OAuth 2.0 response_type values.
+
+
+
response_modes_supported
+

+

+

+
+
+
JSON array containing a list of the OAuth 2.0
+
"response_mode" values that this
+
authorization server supports.
+ +
+
+
vp_formats_supported
+

+

+
+
+
JSON object with name/value pairs,
+
identifying a Credential format supported
+
by the Wallet.
+
+
+
request_object_signing
+
_alg_values_supported
+

+
+
+
JSON array containing a list of the
+
JWS signing algorithms (alg values)
+
supported.
+
+
+
presentation_definition
+
_uri_supported
+

+

+
+
+
Boolean value specifying whether the
+
Wallet Instance supports the transfer of
+
presentation_definition by
+
reference. MUST set to false.
+
+
+

Below is an example of Wallet Attestation:

+
{
+  "alg": "ES256",
+  "kid": "5t5YYpBhN-EgIEEI5iUzr6r0MR02LnVQ0OmekmNKcjY",
+  "trust_chain": [
+    "eyJhbGciOiJFUz...6S0A",
+    "eyJhbGciOiJFUz...jJLA",
+    "eyJhbGciOiJFUz...H9gw",
+  ],
+  "typ": "wallet-attestation+jwt",
+}
+.
+{
+  "iss": "https://wallet-provider.example.org",
+  "sub": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c",
+  "aal": "https://trust-list.eu/aal/high",
+  "cnf":
+  {
+    "jwk":
+    {
+      "crv": "P-256",
+      "kty": "EC",
+      "x": "4HNptI-xr2pjyRJKGMnz4WmdnQD_uJSq4R95Nj98b44",
+      "y": "LIZnSB39vFJhYgS3k7jXE4r3-CoGFQwZtPBIRqpNlrg",
+      "kid": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c"
+    }
+  },
+  "authorization_endpoint": "eudiw:",
+  "response_types_supported": [
+    "vp_token"
+  ],
+  "response_modes_supported": [
+    "form_post.jwt"
+  ],
+  "vp_formats_supported": {
+      "vc+sd-jwt": {
+          "sd-jwt_alg_values": [
+              "ES256",
+              "ES384"
+          ]
+      }
+  },
+  "request_object_signing_alg_values_supported": [
+    "ES256"
+  ],
+  "presentation_definition_uri_supported": false,
+  "iat": 1687281195,
+  "exp": 1687288395
+}
+
+
+
+
+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/en/wallet-solution.html b/refs/pull/212/merge/en/wallet-solution.html new file mode 100644 index 000000000..d3b0fd0b7 --- /dev/null +++ b/refs/pull/212/merge/en/wallet-solution.html @@ -0,0 +1,1700 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Wallet Solution + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

Wallet Solution

+

The Wallet Solution is a comprehensive product offered by the Wallet Provider to cater to the needs of Users in managing their digital assets securely. Designed to provide a seamless User experience, this solution enables Users to leverage the capabilities of the Wallet effectively.

+

The Wallet Solution is issued by the Wallet Provider in the form of a mobile app, it also consists of services and web interfaces for the exchange of data between the Wallet Provider and its Wallet Instances for the requirements of the trust model and in total respect of the user's privacy, in accordance with national and EU legislation.

+

The mobile app serves as the primary interface for Users, allowing them to access and interact with their digital assets conveniently. These digital assets, known as Attestations, include Personal Identification Data (PID[1]), a set of data that can uniquely identify a natural or a legal person, along with other Qualified and non-qualified Electronic Attestations of Attributes, also known as QEAAs and EAAs respectively, or (Q)EAAs for short[1]. Once a User installs the mobile app on their device, it is referred to such an installation as a Wallet Instance for the User.

+

By supporting the mobile app, the Wallet Provider plays a vital role in ensuring the security and reliability of the entire Wallet Solution, since it is responsible for issuing the Wallet Attestation, that is a cryptographic proof that allow the evaluation of the authenticity and the integrity of the Wallet Instance.

+
+

Requirements

+
+
    +
  • Trustworthiness within the Wallet ecosystem: the Wallet Instance MUST establish trust and reliability within the Wallet ecosystem.

  • +
  • Compliance with Provider specifications for obtaining PID and (Q)EAA: the Wallet Instance MUST adhere to the specifications set by Providers for obtaining Personal Identification (PID) and (Q)EAAs.

  • +
  • Support for Android and iOS operating systems: the Wallet Instance MUST be compatible and functional at least on both Android and iOS operating systems, as well as available on the Play Store and App Store respectively.

  • +
  • Verification of device ownership by the User: the Wallet Instance MUST provide a mechanism to verify the User's actual possession and full control of their personal device.

  • +
+
+
+
+

Wallet Instance

+

The Wallet Instance serves as a unique and secure device for authenticating the User within the Wallet ecosystem. It establishes a strong and reliable identity for the User, enabling them to engage in various digital transactions in a secure and privacy-preserving manner.

+

The Wallet Instance establishes the trust within the Wallet ecosystem by consistently presenting a Wallet Attestation during interactions with other ecosystem actors such as PID Providers, (Q)EAA Providers, and Relying Parties. These verifiable attestations, provided by the Wallet Provider, reference the public part of the asymmetric cryptographic key owned by the Wallet Instance. Their purpose is to authenticate the Wallet Instance itself, ensuring its realiability when engaging with other ecosystem actors.

+

To guarantee the utmost security, these cryptographic keys are securely stored within the device's Trusted Execution Environment (TEE)[3]. This ensures that only the User is allowed to access them, thus preventing unauthorized usage or tampering. For more detailed information, please refer to the Wallet Attestation section and the Trust Model section of this document.

+
+
+

Wallet Instance Lifecycle

+

The Wallet Instance has three distinct states: Operational, Valid, and Deactivated. Each state represents a specific functional status and determines the actions that can be performed[2].

+
+

Initialization Process

+

To activate the Wallet Instance, the Users MUST install the mobile wallet application on their device and open it. Furthermore, Users will be asked to set their preferred method of unlocking their device; this can be accomplished by entering a personal identification number (PIN) or by utilizing biometric authentication, such as fingerprint or facial recognition, according to their personal preferences and device's capabilities.

+

After completing these steps, the Wallet Instance sets the Operational state.

+
+
+

Transition to Valid state

+

To transition from the Operational state to the Valid state, the Wallet Instance MUST obtain a valid Personal Identification (PID). Once a valid PID is acquired, the Wallet Instance becomes Valid.

+

In order to securely and unambiguously identify Users, the Wallet Instance adopts a Level of Assurance (LoA) 3 authentication, which guarantees a high level of confidence in the User's identity. The authentication method is chosen by the PID Provider from among the notified eID solutions at the national level.

+

Once the Wallet Instance is in the Operational state, Users can:

+
+
    +
  • Obtain, view, and manage (Q)EAAs from trusted (Q)EAA Providers[1];

  • +
  • Authenticate to Relying Parties[1];

  • +
  • Authorize the presentation of their digital credentials with Relying Parties.

  • +
+
+

Please refer to the relative sections for further information about PID and (Q)EAAs issuance and presentation.

+
+
+

Return to Operational state

+

A Valid Wallet Instance may revert to the Operational state under specific circumstances. These circumstances include the expiration or the revocation of the associated PID by its PID Provider.

+
+
+

Deactivation

+

Users have the ability to deactivate the Wallet Instance voluntarily. This action removes the operational capabilities of the Wallet Instance and sets it to the Deactivated state. Deactivation provides Users with control over access and usage according to their preferences.

+
+
+
+

Wallet Provider Endpoints

+

The Wallet Provider that issues the Wallet Attestations MUST +made available its APIs in the form of RESTful services, as listed below.

+
+

Wallet Provider Metadata

+

An HTTP GET request to the /.well-known/openid-federation endpoint allows the retrieval of the Wallet +Provider Entity Configuration.

+

The Wallet Provider Entity Configuration is a JWS containing the public keys and supported algorithms of the Wallet Provider metadata definition. It is structured in accordance with the OpenID Connect Federation and the Trust Model section outlined in this specification.

+

The returning Entity Configuration of the Wallet Provider MUST contain the +attributes listed below:

+
+
+ +
+

Payload

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

Key

Value

iss

Public URL of the Wallet +Provider.

sub

Public URL of the Wallet +Provider.

iat

+
Issuance datetime in

Unix Timestamp format.

+
+
+

exp

Expiration datetime +in Unix Timestamp format.

authority_hints

Array of URLs (String) containing +the list of URLs of the +immediate superior Entities, such +as the Trust Anchor or an +Intermediate, that MAY issue an +Entity Statement related to this +subject.

jwks

A JSON Web Key Set (JWKS) RFC +7517 +that represents the public part +of the signing keys of the Entity +at issue. Each JWK in the JWK set +MUST have a key ID (claim kid).

metadata

Contains the +metadata +wallet_provider +and the +federation_entity metadata.

+
+

wallet_provider metadata

+ + + + + + + + + + + + + + + + + + + + + + + + +

Key

Value

jwks

A JSON Web Key Set (JWKS) +that represents the Wallet +Provider's public keys.

token_endpoint

Endpoint for obtaining the Wallet +Instance Attestation.

aal_values_supported

List of supported values for the +certifiable security context. These +values specify the security level +of the app, according to the levels: low, medium, or high. +Authenticator Assurance Level values supported.

grant_types_supported

The types of grants supported by +the token endpoint. It MUST be set to +urn:ietf:params:oauth:client-assertion-type: +jwt-client-attestation.

token_endpoint_auth_methods_suppor +ted

Supported authentication methods for +the token endpoint.

token_endpoint_auth_signing_alg_va +lues_supported

Supported signature +algorithms for the token endpoint.

+
+

Note

+

The aal_values_supported parameter is experimental and under review.

+
+
+
+

Payload federation_entity

+ + + + + + + + + + + + + + + + + + + + + +

Key

Value

organization_name

Organization name.

homepage_uri

Organization's website URL.

tos_uri

URL to the terms of service.

policy_uri

URL to the privacy policy.

logo_uri

URL of the organization's logo in SVG format.

+

Below a non-normative example of the Entity Configuration.

+
{
+  "alg": "ES256",
+  "kid": "5t5YYpBhN-EgIEEI5iUzr6r0MR02LnVQ0OmekmNKcjY",
+  "typ": "entity-statement+jwt"
+}
+.
+{
+"iss": "https://wallet-provider.example.org",
+"sub": "https://wallet-provider.example.org",
+"jwks": {
+  "keys": [
+    {
+      "crv": "P-256",
+      "kty": "EC",
+      "x": "qrJrj3Af_B57sbOIRrcBM7br7wOc8ynj7lHFPTeffUk",
+      "y": "1H0cWDyGgvU8w-kPKU_xycOCUNT2o0bwslIQtnPU6iM",
+      "kid": "5t5YYpBhN-EgIEEI5iUzr6r0MR02LnVQ0OmekmNKcjY"
+    }
+  ]
+},
+"metadata": {
+  "wallet_provider": {
+    "jwks": {
+      "keys": [
+        {
+          "crv": "P-256",
+          "kty": "EC",
+          "x": "qrJrj3Af_B57sbOIRrcBM7br7wOc8ynj7lHFPTeffUk",
+          "y": "1H0cWDyGgvU8w-kPKU_xycOCUNT2o0bwslIQtnPU6iM",
+          "kid": "5t5YYpBhN-EgIEEI5iUzr6r0MR02LnVQ0OmekmNKcjY"
+        }
+      ]
+    },
+    "token_endpoint": "https://wallet-provider.example.org/token",
+    "aal_values_supported": [
+      "https://wallet-provider.example.org/LoA/basic",
+      "https://wallet-provider.example.org/LoA/medium",
+      "https://wallet-provider.example.org/LoA/high"
+    ],
+    "grant_types_supported": [
+      "urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation"
+    ],
+    "token_endpoint_auth_methods_supported": [
+      "private_key_jwt"
+    ],
+    "token_endpoint_auth_signing_alg_values_supported": [
+      "ES256",
+      "ES384",
+      "ES512"
+    ]
+  },
+  "federation_entity": {
+    "organization_name": "IT Wallet Provider",
+    "homepage_uri": "https://wallet-provider.example.org",
+    "policy_uri": "https://wallet-provider.example.org/privacy_policy",
+    "tos_uri": "https://wallet-provider.example.org/info_policy",
+    "logo_uri": "https://wallet-provider.example.org/logo.svg"
+  }
+},
+"authority_hints": [
+  "https://registry.eudi-wallet.example.it"
+]
+"iat": 1687171759,
+"exp": 1709290159
+}
+
+
+
+
+

Wallet Attestation

+

Please refer to the Wallet Attestation section.

+
+
+
+

External references

+ + + +
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/it/.buildinfo b/refs/pull/212/merge/it/.buildinfo new file mode 100644 index 000000000..2ad55caa3 --- /dev/null +++ b/refs/pull/212/merge/it/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 7debc0b241d55c8da06f75be8de0eb53 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/refs/pull/212/merge/it/.doctrees/backup-restore.doctree b/refs/pull/212/merge/it/.doctrees/backup-restore.doctree new file mode 100644 index 0000000000000000000000000000000000000000..80a3045586785f80214121fd3f341dd71075b7fa GIT binary patch literal 30401 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 aJ&XVB+LJZe8P3vH1J5O&w(Q{(TmJ|6vpt{y literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/it/.doctrees/environment.pickle b/refs/pull/212/merge/it/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..8e59ee92a23ac32862a2c1ef44d6e04547ad7849 GIT binary patch literal 57405 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 Qs6d{GzQ>;T|5r@^A8!~cK>z>% literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/it/.doctrees/issuance.doctree b/refs/pull/212/merge/it/.doctrees/issuance.doctree new file mode 100644 index 0000000000000000000000000000000000000000..079405314d91fd77f988d62c169757fc3b065b94 GIT binary patch literal 30329 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 literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/it/.doctrees/pid-eaa-data.doctree b/refs/pull/212/merge/it/.doctrees/pid-eaa-data.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4df6fb54c1eea6892a66206642d5bf08f4df4d7c GIT binary patch literal 30377 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 literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/it/.doctrees/pid-eaa-sd-jwt.doctree b/refs/pull/212/merge/it/.doctrees/pid-eaa-sd-jwt.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1ff0fb05a283ae1bc2f780fd119708b9f7e16e19 GIT binary patch literal 30401 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 YpVfSK6aS;u0(~do+0)aPc5t-#|6cF|w*UYD literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/it/.doctrees/revocation-lists.doctree b/refs/pull/212/merge/it/.doctrees/revocation-lists.doctree new file mode 100644 index 0000000000000000000000000000000000000000..751238e4912c62bf0df70206b2fe0b671d1054c6 GIT binary patch literal 30425 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 literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/it/.doctrees/ssi-introduction.doctree b/refs/pull/212/merge/it/.doctrees/ssi-introduction.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9e05b7cce3b1529c529daa13403b5f874a5a8bcd GIT binary patch literal 30425 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 literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/it/.doctrees/standards.doctree b/refs/pull/212/merge/it/.doctrees/standards.doctree new file mode 100644 index 0000000000000000000000000000000000000000..bd12e164ec8934a19e33d7bb101ee8ebc3f7c2dd GIT binary patch literal 25446 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 J_uqWa|39H~vVi~q literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/it/.doctrees/trust.doctree b/refs/pull/212/merge/it/.doctrees/trust.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a9a27e61c985c909d0e57051a0a044e70a963eee GIT binary patch literal 30293 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 bKaYP_^VggBpRE??a{%wyJbgw7XNmt0_$}%* literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/it/.doctrees/wallet-instance-attestation.doctree b/refs/pull/212/merge/it/.doctrees/wallet-instance-attestation.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9eed0c1abb2de8d89fed65bfa59cb0e8b37245d7 GIT binary patch literal 30557 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 literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/it/.doctrees/wallet-solution.doctree b/refs/pull/212/merge/it/.doctrees/wallet-solution.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4007e99f6852f35e32ab3908e82f62372312c961 GIT binary patch literal 30413 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 literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/it/_images/Eo_circle_green_checkmark.svg b/refs/pull/212/merge/it/_images/Eo_circle_green_checkmark.svg new file mode 100644 index 000000000..19e0bd7f0 --- /dev/null +++ b/refs/pull/212/merge/it/_images/Eo_circle_green_checkmark.svg @@ -0,0 +1,2 @@ + diff --git a/refs/pull/212/merge/it/_images/Eo_circle_red_letter-x.svg b/refs/pull/212/merge/it/_images/Eo_circle_red_letter-x.svg new file mode 100644 index 000000000..4c3c8e785 --- /dev/null +++ b/refs/pull/212/merge/it/_images/Eo_circle_red_letter-x.svg @@ -0,0 +1 @@ + diff --git a/refs/pull/212/merge/it/_sources/backup-restore.rst.txt b/refs/pull/212/merge/it/_sources/backup-restore.rst.txt new file mode 100644 index 000000000..186042348 --- /dev/null +++ b/refs/pull/212/merge/it/_sources/backup-restore.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _backup-restore.rst: + +backup-restore.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/refs/pull/212/merge/it/_sources/contribute.rst.txt b/refs/pull/212/merge/it/_sources/contribute.rst.txt new file mode 100644 index 000000000..9d984dea8 --- /dev/null +++ b/refs/pull/212/merge/it/_sources/contribute.rst.txt @@ -0,0 +1,8 @@ +.. include:: ../common/common_definitions.rst + +.. _contribute.rst: + +contribute.rst ++++++++++++++++++++++++++++ + +Instruction to join in the development here. diff --git a/refs/pull/212/merge/it/_sources/defined-terms.rst.txt b/refs/pull/212/merge/it/_sources/defined-terms.rst.txt new file mode 100644 index 000000000..e0b9acdc3 --- /dev/null +++ b/refs/pull/212/merge/it/_sources/defined-terms.rst.txt @@ -0,0 +1,89 @@ +.. include:: ../common/common_definitions.rst + +.. _defined-terms.rst: + +defined-terms.rst ++++++++++++++++++++++++++++ + +Di seguito le descrizioni di acronimi e definizioni, correlati al presente documento utili ad approfondimenti su tematiche che completano l' it-wallet e i componenti con i quali interagisce. + + +Acronimi +-------- +.. list-table:: + :widths: 20 80 + :header-rows: 1 + + * - **Acronimo** + - **Descrizione** + * - **OID4VP** + - OpenID for Verifiable Presentation + * - **PID** + - Person Identification Data + * - **VC** + - Verifiable Credential + * - **VP** + - Verifiable Presentation + * - **API** + - Application Programming Interface. Insieme componenti previsti per semplificare gli scenari di integrazione di uno specifico Sistema. + + +Definizioni +----------- + +.. list-table:: + :widths: 20 80 + :header-rows: 1 + + * - **Definizione** + - **Descrizione** + * - **Wallet Instance** + - Mobile App che gestisce, memorizza e protegge le Verifiable Credentials di un holder e ne consente la presentazione ad una Relying Party + * - **Relying Party** + - Entità che riceve da una Wallet Instance una o più VP e processa le stesse + + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/refs/pull/212/merge/it/_sources/index.rst.txt b/refs/pull/212/merge/it/_sources/index.rst.txt new file mode 100644 index 000000000..abe2399cd --- /dev/null +++ b/refs/pull/212/merge/it/_sources/index.rst.txt @@ -0,0 +1,55 @@ +.. include:: ../common/common_definitions.rst + +============================================== +The Italian EUDI Wallet implementation profile +============================================== + +[TODO INTRO] + +Introduzione + +cos'è eIDAS + +cos’è IT-Wallet + +scopo delle regole tecniche + + +In this documentation you can find the technical specification +for implementing the following components: + + - Entities of the ecosystem according to `EIDAS-ARF`_. + - Infrastructure of trust attesting realiability and eligibility of the participants. + - PID and EAAs data schemes and attribute sets. + - PID/EAA in MDL CBOR format. + - PID/EAA in `SD-JWT`_ format. + - Wallet Solution general architecture. + - Wallet Instance Attestation data model in `JWS`_ format. + - Issuance of PID/EAA according to `OpenID4VCI`_. + - Presentation of PID/EAA according to `OpenID4VP`_. + - Presentation of pseudonyms according to `SIOPv2`_. + - PID/EAA backup and restore mechanisms. + - PID/EAA revocation lists. + + +Index of content +---------------- + +.. toctree:: + :maxdepth: 2 + + ssi-introduction.rst + defined-terms.rst + trust.rst + pid-eaa-data.rst + pid-eaa-mdoc-cbor.rst + pid-eaa-sd-jwt.rst + wallet-solution.rst + wallet-instance-attestation.rst + issuance.rst + relying-party-solution.rst + pseudonyms.rst + backup-restore.rst + revocation-lists.rst + contribute.rst + standards.rst diff --git a/refs/pull/212/merge/it/_sources/issuance.rst.txt b/refs/pull/212/merge/it/_sources/issuance.rst.txt new file mode 100644 index 000000000..1effd9399 --- /dev/null +++ b/refs/pull/212/merge/it/_sources/issuance.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _issuance.rst: + +issuance.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/refs/pull/212/merge/it/_sources/pid-eaa-data.rst.txt b/refs/pull/212/merge/it/_sources/pid-eaa-data.rst.txt new file mode 100644 index 000000000..8ab0305c9 --- /dev/null +++ b/refs/pull/212/merge/it/_sources/pid-eaa-data.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _pid-eaa-data.rst: + +pid-eaa-data.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/refs/pull/212/merge/it/_sources/pid-eaa-mdoc-cbor.rst.txt b/refs/pull/212/merge/it/_sources/pid-eaa-mdoc-cbor.rst.txt new file mode 100644 index 000000000..d96df2fff --- /dev/null +++ b/refs/pull/212/merge/it/_sources/pid-eaa-mdoc-cbor.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _pid-eaa-mdoc-cbor.rst: + +pid-eaa-mdoc-cbor.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/refs/pull/212/merge/it/_sources/pid-eaa-sd-jwt.rst.txt b/refs/pull/212/merge/it/_sources/pid-eaa-sd-jwt.rst.txt new file mode 100644 index 000000000..b4daf4770 --- /dev/null +++ b/refs/pull/212/merge/it/_sources/pid-eaa-sd-jwt.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _pid-eaa-sd-jwt.rst: + +pid-eaa-sd-jwt.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/refs/pull/212/merge/it/_sources/pseudonyms.rst.txt b/refs/pull/212/merge/it/_sources/pseudonyms.rst.txt new file mode 100644 index 000000000..7b20567f9 --- /dev/null +++ b/refs/pull/212/merge/it/_sources/pseudonyms.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _pseudonyms.rst: + +pseudonyms.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/refs/pull/212/merge/it/_sources/revocation-lists.rst.txt b/refs/pull/212/merge/it/_sources/revocation-lists.rst.txt new file mode 100644 index 000000000..49cc7b174 --- /dev/null +++ b/refs/pull/212/merge/it/_sources/revocation-lists.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _revocation-lists.rst: + +revocation-lists.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/refs/pull/212/merge/it/_sources/ssi-introduction.rst.txt b/refs/pull/212/merge/it/_sources/ssi-introduction.rst.txt new file mode 100644 index 000000000..bf8e0a9e6 --- /dev/null +++ b/refs/pull/212/merge/it/_sources/ssi-introduction.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _ssi-introduction.rst: + +ssi-introduction.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/refs/pull/212/merge/it/_sources/standards.rst.txt b/refs/pull/212/merge/it/_sources/standards.rst.txt new file mode 100644 index 000000000..924e882fc --- /dev/null +++ b/refs/pull/212/merge/it/_sources/standards.rst.txt @@ -0,0 +1,8 @@ +.. include:: ../common/common_definitions.rst + +.. _standards.rst: + +Standards ++++++++++ + +TODO diff --git a/refs/pull/212/merge/it/_sources/trust.rst.txt b/refs/pull/212/merge/it/_sources/trust.rst.txt new file mode 100644 index 000000000..aa613216a --- /dev/null +++ b/refs/pull/212/merge/it/_sources/trust.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _trust.rst: + +trust.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/refs/pull/212/merge/it/_sources/wallet-instance-attestation.rst.txt b/refs/pull/212/merge/it/_sources/wallet-instance-attestation.rst.txt new file mode 100644 index 000000000..35d4b69c0 --- /dev/null +++ b/refs/pull/212/merge/it/_sources/wallet-instance-attestation.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _wallet-instance-attestation.rst: + +wallet-instance-attestation.rst ++++++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/refs/pull/212/merge/it/_sources/wallet-solution.rst.txt b/refs/pull/212/merge/it/_sources/wallet-solution.rst.txt new file mode 100644 index 000000000..bb3964a70 --- /dev/null +++ b/refs/pull/212/merge/it/_sources/wallet-solution.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _wallet-solution.rst: + +wallet-solution.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/refs/pull/212/merge/it/_static/_sphinx_javascript_frameworks_compat.js b/refs/pull/212/merge/it/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 000000000..8549469dc --- /dev/null +++ b/refs/pull/212/merge/it/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,134 @@ +/* + * _sphinx_javascript_frameworks_compat.js + * ~~~~~~~~~~ + * + * Compatability shim for jQuery and underscores.js. + * + * WILL BE REMOVED IN Sphinx 6.0 + * xref RemovedInSphinx60Warning + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/refs/pull/212/merge/it/_static/basic.css b/refs/pull/212/merge/it/_static/basic.css new file mode 100644 index 000000000..9039e027c --- /dev/null +++ b/refs/pull/212/merge/it/_static/basic.css @@ -0,0 +1,932 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +div.admonition, div.topic, aside.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic, aside.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +div.topic > :last-child, +aside.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +div.topic::after, +aside.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +/* Docutils 0.17 and older (footnotes & citations) */ +dl.footnote > dt, +dl.citation > dt { + float: left; + margin-right: 0.5em; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +/* Docutils 0.18+ (footnotes & citations) */ +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +/* Footnotes & citations ends */ + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dt:after { + content: ":"; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/refs/pull/212/merge/it/_static/css/theme.css b/refs/pull/212/merge/it/_static/css/theme.css new file mode 100644 index 000000000..6c29bebea --- /dev/null +++ b/refs/pull/212/merge/it/_static/css/theme.css @@ -0,0 +1 @@ +@charset "UTF-8";@import url("https://fonts.googleapis.com/css?family=Lora:400,700");@import url("https://fonts.googleapis.com/css?family=Roboto+Mono:400,700");@import url("https://fonts.googleapis.com/css?family=Titillium+Web:300,400,600,700");.primary-bg{background-color:#06c}.primary-color{color:#06c}.primary-border-color,.primary-border-color.border{border-color:#06c!important}.white-bg{background-color:#fff}.white-color{color:#fff}.white-border-color-,.white-border-color-.border{border-color:#fff!important}.primary-bg-a1{background-color:#bfdfff}.primary-color-a1{color:#bfdfff}.primary-border-color-a1,.primary-border-color-a1.border{border-color:#bfdfff!important}.primary-bg-a2{background-color:#93c4f5}.primary-color-a2{color:#93c4f5}.primary-border-color-a2,.primary-border-color-a2.border{border-color:#93c4f5!important}.primary-bg-a3{background-color:#6aaaeb}.primary-color-a3{color:#6aaaeb}.primary-border-color-a3,.primary-border-color-a3.border{border-color:#6aaaeb!important}.primary-bg-a4{background-color:#4392e0}.primary-color-a4{color:#4392e0}.primary-border-color-a4,.primary-border-color-a4.border{border-color:#4392e0!important}.primary-bg-a5{background-color:#207bd6}.primary-color-a5{color:#207bd6}.primary-border-color-a5,.primary-border-color-a5.border{border-color:#207bd6!important}.primary-bg-a6{background-color:#06c}.primary-color-a6{color:#06c}.primary-border-color-a6,.primary-border-color-a6.border{border-color:#06c!important}.primary-bg-a7{background-color:#0059b3}.primary-color-a7{color:#0059b3}.primary-border-color-a7,.primary-border-color-a7.border{border-color:#0059b3!important}.primary-bg-a8{background-color:#004d99}.primary-color-a8{color:#004d99}.primary-border-color-a8,.primary-border-color-a8.border{border-color:#004d99!important}.primary-bg-a9{background-color:#004080}.primary-color-a9{color:#004080}.primary-border-color-a9,.primary-border-color-a9.border{border-color:#004080!important}.primary-bg-a10{background-color:#036}.primary-color-a10{color:#036}.primary-border-color-a10,.primary-border-color-a10.border{border-color:#036!important}.primary-bg-a11{background-color:#00264d}.primary-color-a11{color:#00264d}.primary-border-color-a11,.primary-border-color-a11.border{border-color:#00264d!important}.primary-bg-a12{background-color:#001a33}.primary-color-a12{color:#001a33}.primary-border-color-a12,.primary-border-color-a12.border{border-color:#001a33!important}.primary-bg-b1{background-color:#06c}.primary-color-b1{color:#06c}.primary-border-color-b1,.primary-border-color-b1.border{border-color:#06c!important}.primary-bg-b2{background-color:#1262b3}.primary-color-b2{color:#1262b3}.primary-border-color-b2,.primary-border-color-b2.border{border-color:#1262b3!important}.primary-bg-b3{background-color:#1f5c99}.primary-color-b3{color:#1f5c99}.primary-border-color-b3,.primary-border-color-b3.border{border-color:#1f5c99!important}.primary-bg-b4{background-color:#265380}.primary-color-b4{color:#265380}.primary-border-color-b4,.primary-border-color-b4.border{border-color:#265380!important}.primary-bg-b5{background-color:#294766}.primary-color-b5{color:#294766}.primary-border-color-b5,.primary-border-color-b5.border{border-color:#294766!important}.primary-bg-b6{background-color:#26394d}.primary-color-b6{color:#26394d}.primary-border-color-b6,.primary-border-color-b6.border{border-color:#26394d!important}.primary-bg-b7{background-color:#1f2933}.primary-color-b7{color:#1f2933}.primary-border-color-b7,.primary-border-color-b7.border{border-color:#1f2933!important}.primary-bg-b8{background-color:#12161a}.primary-color-b8{color:#12161a}.primary-border-color-b8,.primary-border-color-b8.border{border-color:#12161a!important}.primary-bg-c1{background-color:#dce9f5}.primary-color-c1{color:#dce9f5}.primary-border-color-c1,.primary-border-color-c1.border{border-color:#dce9f5!important}.primary-bg-c2{background-color:#c4dcf5}.primary-color-c2{color:#c4dcf5}.primary-border-color-c2,.primary-border-color-c2.border{border-color:#c4dcf5!important}.primary-bg-c3{background-color:#abd0f5}.primary-color-c3{color:#abd0f5}.primary-border-color-c3,.primary-border-color-c3.border{border-color:#abd0f5!important}.primary-bg-c4{background-color:#93c4f5}.primary-color-c4{color:#93c4f5}.primary-border-color-c4,.primary-border-color-c4.border{border-color:#93c4f5!important}.primary-bg-c5{background-color:#7ab8f5}.primary-color-c5{color:#7ab8f5}.primary-border-color-c5,.primary-border-color-c5.border{border-color:#7ab8f5!important}.primary-bg-c6{background-color:#62abf5}.primary-color-c6{color:#62abf5}.primary-border-color-c6,.primary-border-color-c6.border{border-color:#62abf5!important}.primary-bg-c7{background-color:#499ff5}.primary-color-c7{color:#499ff5}.primary-border-color-c7,.primary-border-color-c7.border{border-color:#499ff5!important}.primary-bg-c8{background-color:#3193f5}.primary-color-c8{color:#3193f5}.primary-border-color-c8,.primary-border-color-c8.border{border-color:#3193f5!important}.primary-bg-c9{background-color:#1887f5}.primary-color-c9{color:#1887f5}.primary-border-color-c9,.primary-border-color-c9.border{border-color:#1887f5!important}.primary-bg-c10{background-color:#007af5}.primary-color-c10{color:#007af5}.primary-border-color-c10,.primary-border-color-c10.border{border-color:#007af5!important}.primary-bg-c11{background-color:#0070e0}.primary-color-c11{color:#0070e0}.primary-border-color-c11,.primary-border-color-c11.border{border-color:#0070e0!important}.primary-bg-c12{background-color:#06c}.primary-color-c12{color:#06c}.primary-border-color-c12,.primary-border-color-c12.border{border-color:#06c!important}.analogue-1-bg-a1{background-color:#e7e6ff}.analogue-1-color-a1{color:#e7e6ff}.analogue-1-border-color-a1,.analogue-1-border-color-a1.border{border-color:#e7e6ff!important}.analogue-1-bg-a2{background-color:#bbb8f5}.analogue-1-color-a2{color:#bbb8f5}.analogue-1-border-color-a2,.analogue-1-border-color-a2.border{border-color:#bbb8f5!important}.analogue-1-bg-a3{background-color:#918deb}.analogue-1-color-a3{color:#918deb}.analogue-1-border-color-a3,.analogue-1-border-color-a3.border{border-color:#918deb!important}.analogue-1-bg-a4{background-color:#6b65e0}.analogue-1-color-a4{color:#6b65e0}.analogue-1-border-color-a4,.analogue-1-border-color-a4.border{border-color:#6b65e0!important}.analogue-1-bg-a5{background-color:#4840d6}.analogue-1-color-a5{color:#4840d6}.analogue-1-border-color-a5,.analogue-1-border-color-a5.border{border-color:#4840d6!important}.analogue-1-bg-a6{background-color:#271fcc}.analogue-1-color-a6{color:#271fcc}.analogue-1-border-color-a6,.analogue-1-border-color-a6.border{border-color:#271fcc!important}.analogue-1-bg-a7{background-color:#221bb3}.analogue-1-color-a7{color:#221bb3}.analogue-1-border-color-a7,.analogue-1-border-color-a7.border{border-color:#221bb3!important}.analogue-1-bg-a8{background-color:#1d1799}.analogue-1-color-a8{color:#1d1799}.analogue-1-border-color-a8,.analogue-1-border-color-a8.border{border-color:#1d1799!important}.analogue-1-bg-a9{background-color:#191380}.analogue-1-color-a9{color:#191380}.analogue-1-border-color-a9,.analogue-1-border-color-a9.border{border-color:#191380!important}.analogue-1-bg-a10{background-color:#140f66}.analogue-1-color-a10{color:#140f66}.analogue-1-border-color-a10,.analogue-1-border-color-a10.border{border-color:#140f66!important}.analogue-1-bg-a11{background-color:#0f0b4d}.analogue-1-color-a11{color:#0f0b4d}.analogue-1-border-color-a11,.analogue-1-border-color-a11.border{border-color:#0f0b4d!important}.analogue-1-bg-a12{background-color:#0a0833}.analogue-1-color-a12{color:#0a0833}.analogue-1-border-color-a12,.analogue-1-border-color-a12.border{border-color:#0a0833!important}.analogue-2-bg-a1{background-color:#ccfffd}.analogue-2-color-a1{color:#ccfffd}.analogue-2-border-color-a1,.analogue-2-border-color-a1.border{border-color:#ccfffd!important}.analogue-2-bg-a2{background-color:#9ff5f2}.analogue-2-color-a2{color:#9ff5f2}.analogue-2-border-color-a2,.analogue-2-border-color-a2.border{border-color:#9ff5f2!important}.analogue-2-bg-a3{background-color:#75ebe7}.analogue-2-color-a3{color:#75ebe7}.analogue-2-border-color-a3,.analogue-2-border-color-a3.border{border-color:#75ebe7!important}.analogue-2-bg-a4{background-color:#4fe0dc}.analogue-2-color-a4{color:#4fe0dc}.analogue-2-border-color-a4,.analogue-2-border-color-a4.border{border-color:#4fe0dc!important}.analogue-2-bg-a5{background-color:#2bd6d0}.analogue-2-color-a5{color:#2bd6d0}.analogue-2-border-color-a5,.analogue-2-border-color-a5.border{border-color:#2bd6d0!important}.analogue-2-bg-a6{background-color:#0accc6}.analogue-2-color-a6{color:#0accc6}.analogue-2-border-color-a6,.analogue-2-border-color-a6.border{border-color:#0accc6!important}.analogue-2-bg-a7{background-color:#09b3ad}.analogue-2-color-a7{color:#09b3ad}.analogue-2-border-color-a7,.analogue-2-border-color-a7.border{border-color:#09b3ad!important}.analogue-2-bg-a8{background-color:#089994}.analogue-2-color-a8{color:#089994}.analogue-2-border-color-a8,.analogue-2-border-color-a8.border{border-color:#089994!important}.analogue-2-bg-a9{background-color:#06807b}.analogue-2-color-a9{color:#06807b}.analogue-2-border-color-a9,.analogue-2-border-color-a9.border{border-color:#06807b!important}.analogue-2-bg-a10{background-color:#056663}.analogue-2-color-a10{color:#056663}.analogue-2-border-color-a10,.analogue-2-border-color-a10.border{border-color:#056663!important}.analogue-2-bg-a11{background-color:#044d4a}.analogue-2-color-a11{color:#044d4a}.analogue-2-border-color-a11,.analogue-2-border-color-a11.border{border-color:#044d4a!important}.analogue-2-bg-a12{background-color:#033331}.analogue-2-color-a12{color:#033331}.analogue-2-border-color-a12,.analogue-2-border-color-a12.border{border-color:#033331!important}.complementary-1-bg{background-color:#f73e5a}.complementary-1-color{color:#f90}.complementary-1-border-color-,.complementary-1-border-color-.border{border-color:#f73e5a!important}.complementary-1-bg-a1{background-color:#fffcfd}.complementary-1-color-a1{color:#fffcfd}.complementary-1-border-color-a1,.complementary-1-border-color-a1.border{border-color:#fffcfd!important}.complementary-1-bg-a2{background-color:#f5d0d6}.complementary-1-color-a2{color:#f5d0d6}.complementary-1-border-color-a2,.complementary-1-border-color-a2.border{border-color:#f5d0d6!important}.complementary-1-bg-a3{background-color:#eba4af}.complementary-1-color-a3{color:#eba4af}.complementary-1-border-color-a3,.complementary-1-border-color-a3.border{border-color:#eba4af!important}.complementary-1-bg-a4{background-color:#e07b8b}.complementary-1-color-a4{color:#e07b8b}.complementary-1-border-color-a4,.complementary-1-border-color-a4.border{border-color:#e07b8b!important}.complementary-1-bg-a5{background-color:#d65669}.complementary-1-color-a5{color:#d65669}.complementary-1-border-color-a5,.complementary-1-border-color-a5.border{border-color:#d65669!important}.complementary-1-bg-a6{background-color:#cc334a}.complementary-1-color-a6{color:#cc334a}.complementary-1-border-color-a6,.complementary-1-border-color-a6.border{border-color:#cc334a!important}.complementary-1-bg-a7{background-color:#b32d41}.complementary-1-color-a7{color:#b32d41}.complementary-1-border-color-a7,.complementary-1-border-color-a7.border{border-color:#b32d41!important}.complementary-1-bg-a8{background-color:#992637}.complementary-1-color-a8{color:#992637}.complementary-1-border-color-a8,.complementary-1-border-color-a8.border{border-color:#992637!important}.complementary-1-bg-a9{background-color:#80202e}.complementary-1-color-a9{color:#80202e}.complementary-1-border-color-a9,.complementary-1-border-color-a9.border{border-color:#80202e!important}.complementary-1-bg-a10{background-color:#661a25}.complementary-1-color-a10{color:#661a25}.complementary-1-border-color-a10,.complementary-1-border-color-a10.border{border-color:#661a25!important}.complementary-1-bg-a11{background-color:#4d131c}.complementary-1-color-a11{color:#4d131c}.complementary-1-border-color-a11,.complementary-1-border-color-a11.border{border-color:#4d131c!important}.complementary-1-bg-a12{background-color:#330d12}.complementary-1-color-a12{color:#330d12}.complementary-1-border-color-a12,.complementary-1-border-color-a12.border{border-color:#330d12!important}.complementary-2-bg{background-color:#f90}.complementary-2-color{color:#f90}.complementary-2-border-color-,.complementary-2-border-color-.border{border-color:#f90!important}.complementary-2-bg-a1{background-color:#ffe6bf}.complementary-2-color-a1{color:#ffe6bf}.complementary-2-border-color-a1,.complementary-2-border-color-a1.border{border-color:#ffe6bf!important}.complementary-2-bg-a2{background-color:#f5ce93}.complementary-2-color-a2{color:#f5ce93}.complementary-2-border-color-a2,.complementary-2-border-color-a2.border{border-color:#f5ce93!important}.complementary-2-bg-a3{background-color:#ebb76a}.complementary-2-color-a3{color:#ebb76a}.complementary-2-border-color-a3,.complementary-2-border-color-a3.border{border-color:#ebb76a!important}.complementary-2-bg-a4{background-color:#e0a243}.complementary-2-color-a4{color:#e0a243}.complementary-2-border-color-a4,.complementary-2-border-color-a4.border{border-color:#e0a243!important}.complementary-2-bg-a5{background-color:#d68d20}.complementary-2-color-a5{color:#d68d20}.complementary-2-border-color-a5,.complementary-2-border-color-a5.border{border-color:#d68d20!important}.complementary-2-bg-a6{background-color:#cc7a00}.complementary-2-color-a6{color:#cc7a00}.complementary-2-border-color-a6,.complementary-2-border-color-a6.border{border-color:#cc7a00!important}.complementary-2-bg-a7{background-color:#b36b00}.complementary-2-color-a7{color:#b36b00}.complementary-2-border-color-a7,.complementary-2-border-color-a7.border{border-color:#b36b00!important}.complementary-2-bg-a8{background-color:#995c00}.complementary-2-color-a8{color:#995c00}.complementary-2-border-color-a8,.complementary-2-border-color-a8.border{border-color:#995c00!important}.complementary-2-bg-a9{background-color:#804d00}.complementary-2-color-a9{color:#804d00}.complementary-2-border-color-a9,.complementary-2-border-color-a9.border{border-color:#804d00!important}.complementary-2-bg-a10{background-color:#663d00}.complementary-2-color-a10{color:#663d00}.complementary-2-border-color-a10,.complementary-2-border-color-a10.border{border-color:#663d00!important}.complementary-2-bg-a11{background-color:#4d2e00}.complementary-2-color-a11{color:#4d2e00}.complementary-2-border-color-a11,.complementary-2-border-color-a11.border{border-color:#4d2e00!important}.complementary-2-bg-a12{background-color:#331f00}.complementary-2-color-a12{color:#331f00}.complementary-2-border-color-a12,.complementary-2-border-color-a12.border{border-color:#331f00!important}.complementary-3-bg{background-color:#00cf86}.complementary-3-color{color:#00cf86}.complementary-3-border-color-,.complementary-3-border-color-.border{border-color:#00cf86!important}.complementary-3-bg-a1{background-color:#bfffe9}.complementary-3-color-a1{color:#bfffe9}.complementary-3-border-color-a1,.complementary-3-border-color-a1.border{border-color:#bfffe9!important}.complementary-3-bg-a2{background-color:#93f5d3}.complementary-3-color-a2{color:#93f5d3}.complementary-3-border-color-a2,.complementary-3-border-color-a2.border{border-color:#93f5d3!important}.complementary-3-bg-a3{background-color:#6aebbd}.complementary-3-color-a3{color:#6aebbd}.complementary-3-border-color-a3,.complementary-3-border-color-a3.border{border-color:#6aebbd!important}.complementary-3-bg-a4{background-color:#43e0a9}.complementary-3-color-a4{color:#43e0a9}.complementary-3-border-color-a4,.complementary-3-border-color-a4.border{border-color:#43e0a9!important}.complementary-3-bg-a5{background-color:#20d696}.complementary-3-color-a5{color:#20d696}.complementary-3-border-color-a5,.complementary-3-border-color-a5.border{border-color:#20d696!important}.complementary-3-bg-a6{background-color:#00cc85}.complementary-3-color-a6{color:#00cc85}.complementary-3-border-color-a6,.complementary-3-border-color-a6.border{border-color:#00cc85!important}.complementary-3-bg-a7{background-color:#00b374}.complementary-3-color-a7{color:#00b374}.complementary-3-border-color-a7,.complementary-3-border-color-a7.border{border-color:#00b374!important}.complementary-3-bg-a8{background-color:#009963}.complementary-3-color-a8{color:#009963}.complementary-3-border-color-a8,.complementary-3-border-color-a8.border{border-color:#009963!important}.complementary-3-bg-a9{background-color:#008053}.complementary-3-color-a9{color:#008053}.complementary-3-border-color-a9,.complementary-3-border-color-a9.border{border-color:#008053!important}.complementary-3-bg-a10{background-color:#006642}.complementary-3-color-a10{color:#006642}.complementary-3-border-color-a10,.complementary-3-border-color-a10.border{border-color:#006642!important}.complementary-3-bg-a11{background-color:#004d32}.complementary-3-color-a11{color:#004d32}.complementary-3-border-color-a11,.complementary-3-border-color-a11.border{border-color:#004d32!important}.complementary-3-bg-a12{background-color:#003321}.complementary-3-color-a12{color:#003321}.complementary-3-border-color-a12,.complementary-3-border-color-a12.border{border-color:#003321!important}.analogue-1-bg{background-color:#3126ff}.analogue-1-color{color:#3126ff}.analogue-1-border-color-,.analogue-1-border-color-.border{border-color:#3126ff!important}.analogue-1-bg-b1{background-color:#3126ff}.analogue-1-color-b1{color:#3126ff}.analogue-1-border-color-b1,.analogue-1-border-color-b1.border{border-color:#3126ff!important}.analogue-1-bg-b2{background-color:#4239e6}.analogue-1-color-b2{color:#4239e6}.analogue-1-border-color-b2,.analogue-1-border-color-b2.border{border-color:#4239e6!important}.analogue-1-bg-b3{background-color:#4e47cc}.analogue-1-color-b3{color:#4e47cc}.analogue-1-border-color-b3,.analogue-1-border-color-b3.border{border-color:#4e47cc!important}.analogue-1-bg-b4{background-color:#5550b3}.analogue-1-color-b4{color:#5550b3}.analogue-1-border-color-b4,.analogue-1-border-color-b4.border{border-color:#5550b3!important}.analogue-1-bg-b5{background-color:#585499}.analogue-1-color-b5{color:#585499}.analogue-1-border-color-b5,.analogue-1-border-color-b5.border{border-color:#585499!important}.analogue-1-bg-b6{background-color:#555380}.analogue-1-color-b6{color:#555380}.analogue-1-border-color-b6,.analogue-1-border-color-b6.border{border-color:#555380!important}.analogue-1-bg-b7{background-color:#4e4d66}.analogue-1-color-b7{color:#4e4d66}.analogue-1-border-color-b7,.analogue-1-border-color-b7.border{border-color:#4e4d66!important}.analogue-1-bg-b8{background-color:#42414d}.analogue-1-color-b8{color:#42414d}.analogue-1-border-color-b8,.analogue-1-border-color-b8.border{border-color:#42414d!important}.analogue-2-bg{background-color:#0bd9d2}.analogue-2-color{color:#0bd9d2}.analogue-2-border-color-,.analogue-2-border-color-.border{border-color:#0bd9d2!important}.analogue-2-bg-b1{background-color:#0bd9d2}.analogue-2-color-b1{color:#0bd9d2}.analogue-2-border-color-b1,.analogue-2-border-color-b1.border{border-color:#0bd9d2!important}.analogue-2-bg-b2{background-color:#1dbfba}.analogue-2-color-b2{color:#1dbfba}.analogue-2-border-color-b2,.analogue-2-border-color-b2.border{border-color:#1dbfba!important}.analogue-2-bg-b3{background-color:#29a6a2}.analogue-2-color-b3{color:#29a6a2}.analogue-2-border-color-b3,.analogue-2-border-color-b3.border{border-color:#29a6a2!important}.analogue-2-bg-b4{background-color:#318c89}.analogue-2-color-b4{color:#318c89}.analogue-2-border-color-b4,.analogue-2-border-color-b4.border{border-color:#318c89!important}.analogue-2-bg-b5{background-color:#347371}.analogue-2-color-b5{color:#347371}.analogue-2-border-color-b5,.analogue-2-border-color-b5.border{border-color:#347371!important}.analogue-2-bg-b6{background-color:#315958}.analogue-2-color-b6{color:#315958}.analogue-2-border-color-b6,.analogue-2-border-color-b6.border{border-color:#315958!important}.analogue-2-bg-b7{background-color:#29403f}.analogue-2-color-b7{color:#29403f}.analogue-2-border-color-b7,.analogue-2-border-color-b7.border{border-color:#29403f!important}.analogue-2-bg-b8{background-color:#1d2626}.analogue-2-color-b8{color:#1d2626}.analogue-2-border-color-b8,.analogue-2-border-color-b8.border{border-color:#1d2626!important}.complementary-1-bg-b1{background-color:#f73e5a}.complementary-1-color-b1{color:#f73e5a}.complementary-1-border-color-b1,.complementary-1-border-color-b1.border{border-color:#f73e5a!important}.complementary-1-bg-b2{background-color:#de4e63}.complementary-1-color-b2{color:#de4e63}.complementary-1-border-color-b2,.complementary-1-border-color-b2.border{border-color:#de4e63!important}.complementary-1-bg-b3{background-color:#c45869}.complementary-1-color-b3{color:#c45869}.complementary-1-border-color-b3,.complementary-1-border-color-b3.border{border-color:#c45869!important}.complementary-1-bg-b4{background-color:#ab5e69}.complementary-1-color-b4{color:#ab5e69}.complementary-1-border-color-b4,.complementary-1-border-color-b4.border{border-color:#ab5e69!important}.complementary-1-bg-b5{background-color:#915e66}.complementary-1-color-b5{color:#915e66}.complementary-1-border-color-b5,.complementary-1-border-color-b5.border{border-color:#915e66!important}.complementary-1-bg-b6{background-color:#785a5e}.complementary-1-color-b6{color:#785a5e}.complementary-1-border-color-b6,.complementary-1-border-color-b6.border{border-color:#785a5e!important}.complementary-1-bg-b7{background-color:#5e5052}.complementary-1-color-b7{color:#5e5052}.complementary-1-border-color-b7,.complementary-1-border-color-b7.border{border-color:#5e5052!important}.complementary-1-bg-b8{background-color:#454142}.complementary-1-color-b8{color:#454142}.complementary-1-border-color-b8,.complementary-1-border-color-b8.border{border-color:#454142!important}.complementary-2-bg-b1{background-color:#f90}.complementary-2-color-b1{color:#f90}.complementary-2-border-color-b1,.complementary-2-border-color-b1.border{border-color:#f90!important}.complementary-2-bg-b2{background-color:#e69317}.complementary-2-color-b2{color:#e69317}.complementary-2-border-color-b2,.complementary-2-border-color-b2.border{border-color:#e69317!important}.complementary-2-bg-b3{background-color:#cc8b29}.complementary-2-color-b3{color:#cc8b29}.complementary-2-border-color-b3,.complementary-2-border-color-b3.border{border-color:#cc8b29!important}.complementary-2-bg-b4{background-color:#b38136}.complementary-2-color-b4{color:#b38136}.complementary-2-border-color-b4,.complementary-2-border-color-b4.border{border-color:#b38136!important}.complementary-2-bg-b5{background-color:#99743d}.complementary-2-color-b5{color:#99743d}.complementary-2-border-color-b5,.complementary-2-border-color-b5.border{border-color:#99743d!important}.complementary-2-bg-b6{background-color:#806640}.complementary-2-color-b6{color:#806640}.complementary-2-border-color-b6,.complementary-2-border-color-b6.border{border-color:#806640!important}.complementary-2-bg-b7{background-color:#66563d}.complementary-2-color-b7{color:#66563d}.complementary-2-border-color-b7,.complementary-2-border-color-b7.border{border-color:#66563d!important}.complementary-2-bg-b8{background-color:#4d4336}.complementary-2-color-b8{color:#4d4336}.complementary-2-border-color-b8,.complementary-2-border-color-b8.border{border-color:#4d4336!important}.complementary-3-bg-b1{background-color:#00cf86}.complementary-3-color-b1{color:#00cf86}.complementary-3-border-color-b1,.complementary-3-border-color-b1.border{border-color:#00cf86!important}.complementary-3-bg-b2{background-color:#12b57c}.complementary-3-color-b2{color:#12b57c}.complementary-3-border-color-b2,.complementary-3-border-color-b2.border{border-color:#12b57c!important}.complementary-3-bg-b3{background-color:#1f9c70}.complementary-3-color-b3{color:#1f9c70}.complementary-3-border-color-b3,.complementary-3-border-color-b3.border{border-color:#1f9c70!important}.complementary-3-bg-b4{background-color:#278262}.complementary-3-color-b4{color:#278262}.complementary-3-border-color-b4,.complementary-3-border-color-b4.border{border-color:#278262!important}.complementary-3-bg-b5{background-color:#2a6953}.complementary-3-color-b5{color:#2a6953}.complementary-3-border-color-b5,.complementary-3-border-color-b5.border{border-color:#2a6953!important}.complementary-3-bg-b6{background-color:#284f41}.complementary-3-color-b6{color:#284f41}.complementary-3-border-color-b6,.complementary-3-border-color-b6.border{border-color:#284f41!important}.complementary-3-bg-b7{background-color:#20362e}.complementary-3-color-b7{color:#20362e}.complementary-3-border-color-b7,.complementary-3-border-color-b7.border{border-color:#20362e!important}.complementary-3-bg-b8{background-color:#141c19}.complementary-3-color-b8{color:#141c19}.complementary-3-border-color-b8,.complementary-3-border-color-b8.border{border-color:#141c19!important}.neutral-1-bg{background-color:#17324d}.neutral-1-color{color:#17324d}.neutral-1-border-color-,.neutral-1-border-color-.border{border-color:#17324d!important}.neutral-1-bg-a1{background-color:#ebeced}.neutral-1-color-a1{color:#ebeced}.neutral-1-border-color-a1,.neutral-1-border-color-a1.border{border-color:#ebeced!important}.neutral-1-bg-a2{background-color:#d9dadb}.neutral-1-color-a2{color:#d9dadb}.neutral-1-border-color-a2,.neutral-1-border-color-a2.border{border-color:#d9dadb!important}.neutral-1-bg-a3{background-color:#c5c7c9}.neutral-1-color-a3{color:#c5c7c9}.neutral-1-border-color-a3,.neutral-1-border-color-a3.border{border-color:#c5c7c9!important}.neutral-1-bg-a4{background-color:#adb2b8}.neutral-1-color-a4{color:#adb2b8}.neutral-1-border-color-a4,.neutral-1-border-color-a4.border{border-color:#adb2b8!important}.neutral-1-bg-a5{background-color:#959da6}.neutral-1-color-a5{color:#959da6}.neutral-1-border-color-a5,.neutral-1-border-color-a5.border{border-color:#959da6!important}.neutral-1-bg-a6{background-color:#768594}.neutral-1-color-a6{color:#768594}.neutral-1-border-color-a6,.neutral-1-border-color-a6.border{border-color:#768594!important}.neutral-1-bg-a7{background-color:#5b6f82}.neutral-1-color-a7{color:#5b6f82}.neutral-1-border-color-a7,.neutral-1-border-color-a7.border{border-color:#5b6f82!important}.neutral-1-bg-a8{background-color:#435a70}.neutral-1-color-a8{color:#435a70}.neutral-1-border-color-a8,.neutral-1-border-color-a8.border{border-color:#435a70!important}.neutral-1-bg-a9{background-color:#2f475e}.neutral-1-color-a9{color:#2f475e}.neutral-1-border-color-a9,.neutral-1-border-color-a9.border{border-color:#2f475e!important}.neutral-1-bg-a10{background-color:#17324d}.neutral-1-color-a10{color:#17324d}.neutral-1-border-color-a10,.neutral-1-border-color-a10.border{border-color:#17324d!important}.neutral-2-bg{background-color:#e6ecf2}.neutral-2-color{color:#e6ecf2}.neutral-2-border-color-{border-color:#e6ecf2}.neutral-2-bg-b1{background-color:#e6ecf2}.neutral-2-color-b1{color:#e6ecf2}.neutral-2-border-color-b1,.neutral-2-border-color-b1.border{border-color:#e6ecf2!important}.neutral-2-bg-b2{background-color:#c2c7cc}.neutral-2-color-b2{color:#c2c7cc}.neutral-2-border-color-b2,.neutral-2-border-color-b2.border{border-color:#c2c7cc!important}.neutral-2-bg-b3{background-color:#9da2a6}.neutral-2-color-b3{color:#9da2a6}.neutral-2-border-color-b3,.neutral-2-border-color-b3.border{border-color:#9da2a6!important}.neutral-2-bg-b4{background-color:#797c80}.neutral-2-color-b4{color:#797c80}.neutral-2-border-color-b4,.neutral-2-border-color-b4.border{border-color:#797c80!important}.neutral-2-bg-b5{background-color:#565759}.neutral-2-color-b5{color:#565759}.neutral-2-border-color-b5,.neutral-2-border-color-b5.border{border-color:#565759!important}.neutral-2-bg-b6{background-color:#2f3133}.neutral-2-color-b6{color:#2f3133}.neutral-2-border-color-b6,.neutral-2-border-color-b6.border{border-color:#2f3133!important}.neutral-2-bg-b7{background-color:#0c0c0d}.neutral-2-color-b7{color:#0c0c0d}.neutral-2-border-color-b7,.neutral-2-border-color-b7.border{border-color:#0c0c0d!important}.neutral-2-bg-a1{background-color:#e6ecf2}.neutral-2-color-a1{color:#e6ecf2}.neutral-2-border-color-a1,.neutral-2-border-color-a1.border{border-color:#e6ecf2!important}.neutral-2-bg-a2{background-color:#bcc4cc}.neutral-2-color-a2{color:#bcc4cc}.neutral-2-border-color-a2,.neutral-2-border-color-a2.border{border-color:#bcc4cc!important}.neutral-2-bg-a3{background-color:#9aa0a6}.neutral-2-color-a3{color:#9aa0a6}.neutral-2-border-color-a3,.neutral-2-border-color-a3.border{border-color:#9aa0a6!important}.neutral-2-bg-a4{background-color:#777b80}.neutral-2-color-a4{color:#777b80}.neutral-2-border-color-a4,.neutral-2-border-color-a4.border{border-color:#777b80!important}.neutral-2-bg-a5{background-color:#535659}.neutral-2-color-a5{color:#535659}.neutral-2-border-color-a5,.neutral-2-border-color-a5.border{border-color:#535659!important}.neutral-2-bg-a6{background-color:#2f3133}.neutral-2-color-a6{color:#2f3133}.neutral-2-border-color-a6,.neutral-2-border-color-a6.border{border-color:#2f3133!important}.neutral-2-bg-a7{background-color:#17181a}.neutral-2-color-a7{color:#17181a}.neutral-2-border-color-a7,.neutral-2-border-color-a7.border{border-color:#17181a!important}.lightgrey-bg-a1{background-color:#e8f2fc}.lightgrey-color-a1{color:#e8f2fc}.lightgrey-border-color-a1,.lightgrey-border-color-a1.border{border-color:#e8f2fc!important}.lightgrey-bg-a2{background-color:#edf5fc}.lightgrey-color-a2{color:#edf5fc}.lightgrey-border-color-a2,.lightgrey-border-color-a2.border{border-color:#edf5fc!important}.lightgrey-bg-a3{background-color:#f2f7fc}.lightgrey-color-a3{color:#f2f7fc}.lightgrey-border-color-a3,.lightgrey-border-color-a3.border{border-color:#f2f7fc!important}.lightgrey-bg-a4{background-color:#f5f9fc}.lightgrey-color-a4{color:#f5f9fc}.lightgrey-border-color-a4,.lightgrey-border-color-a4.border{border-color:#f5f9fc!important}.lightgrey-bg-b1{background-color:#e6f0fa}.lightgrey-color-b1{color:#e6f0fa}.lightgrey-border-color-b1,.lightgrey-border-color-b1.border{border-color:#e6f0fa!important}.lightgrey-bg-b2{background-color:#ebf2fa}.lightgrey-color-b2{color:#ebf2fa}.lightgrey-border-color-b2,.lightgrey-border-color-b2.border{border-color:#ebf2fa!important}.lightgrey-bg-b3{background-color:#edf4fa}.lightgrey-color-b3{color:#edf4fa}.lightgrey-border-color-b3,.lightgrey-border-color-b3.border{border-color:#edf4fa!important}.lightgrey-bg-b4{background-color:#f2f6fa}.lightgrey-color-b4{color:#f2f6fa}.lightgrey-border-color-b4,.lightgrey-border-color-b4.border{border-color:#f2f6fa!important}.lightgrey-bg-c1{background-color:#f7f9fa}.lightgrey-color-c1{color:#f7f9fa}.lightgrey-border-color-c1,.lightgrey-border-color-c1.border{border-color:#f7f9fa!important}.lightgrey-bg-c2{background-color:#f5f6f7}.lightgrey-color-c2{color:#f5f6f7}.lightgrey-border-color-c2,.lightgrey-border-color-c2.border{border-color:#f5f6f7!important}:root{--blue:#0073e6;--indigo:#554dff;--purple:#9e99ff;--pink:#ffb3bf;--red:#f73e5a;--orange:#f90;--yellow:#ffda73;--green:#00cc85;--teal:#0bd9d2;--cyan:#00fff7;--white:#fff;--gray:#656566;--gray-dark:#323333;--italia:#06c;--gray-secondary:#5c6f82;--gray-tertiary:#5a768a;--gray-quaternary:#fcfdff;--primary:#0073e6;--secondary:#5c6f82;--success:#00cc85;--info:#979899;--warning:#f90;--danger:#f73e5a;--light:#e9e6f2;--dark:#17324d;--100:#e3e4e6;--200:#cacacc;--300:#b1b1b3;--400:#979899;--500:#7e7f80;--600:#656566;--700:#4c4c4d;--800:#323333;--900:#19191a;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:"Titillium Web",Geneva,Tahoma,sans-serif;--font-family-monospace:"Roboto Mono",monospace}@media print{*,:after,:before{text-shadow:none!important;-webkit-box-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 #7e7f80;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 #b1b1b3!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#d6dce3}.table .thead-dark th{color:inherit;border-color:#d6dce3}}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Titillium Web,Geneva,Tahoma,sans-serif;font-size:16px;font-size:1rem;font-weight:300;line-height:1.5;color:#19191a;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:8px}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}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}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:#0073e6;text-decoration:none;background-color:transparent}a:hover{color:#004d99;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:Roboto Mono,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:1em;padding-bottom:1em;color:#5a768a;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}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[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]{-webkit-box-sizing:border-box;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:24px;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:8px;font-weight:700;line-height:1.2}.h1,h1{font-size:40px;font-size:2.5rem}.h2,h2{font-size:32px;font-size:2rem}.h3,h3{font-size:28px;font-size:1.75rem}.h4,h4{font-size:24px;font-size:1.5rem}.h5,h5{font-size:20px;font-size:1.25rem}.h6,h6{font-size:16px;font-size:1rem}.lead{font-size:20px;font-size:1.25rem;font-weight:300}.display-1{font-size:56px;font-size:3.5rem}.display-1,.display-2{font-weight:700;line-height:1.2}.display-2{font-size:40px;font-size:2.5rem}.display-3{font-size:24px;font-size:1.5rem}.display-3,.display-4{font-weight:700;line-height:1.2}.display-4{font-size:20px;font-size:1.25rem}hr{margin-top:16px;margin-bottom:16px;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:12.432px;font-size:.777rem}.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:16px;font-size:20px;font-size:1.25rem}.blockquote-footer{display:block;font-size:12.432px;font-size:.777rem}.blockquote-footer:before{content:"\2014\00A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #b1b1b3;border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.figure{display:inline-block}.figure-img{margin-bottom:8px;line-height:1}.figure-caption{font-size:90%;color:#656566}code{font-size:87.5%;color:#17324d;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#19191a;border-radius:2px;-webkit-box-shadow:inset 0 -.1rem 0 rgba(0,0,0,.25);box-shadow:inset 0 -.1rem 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;font-size:87.5%;color:#19191a}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:6px;padding-left:6px;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:6px;padding-left:6px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-6px;margin-left:-6px}.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%;padding-right:6px;padding-left:6px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1,.col-auto{-webkit-box-flex:0}.col-1{-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-2,.col-3{-webkit-box-flex:0}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-4,.col-5{-webkit-box-flex:0}.col-5{-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-6,.col-7{-webkit-box-flex:0}.col-7{-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-8,.col-9{-webkit-box-flex:0}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-10,.col-11{-webkit-box-flex:0}.col-11{-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:16px;color:#19191a}.table td,.table th{padding:1em;vertical-align:top;border-top:1px solid #d6dce3}.table thead th{vertical-align:bottom;border-bottom:2px solid #d6dce3}.table tbody+tbody{border-top:2px solid #d6dce3}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #d6dce3}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:#f6f7f9}.table-hover tbody tr:hover{color:#19191a;background-color:#e5f1fa}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8d8f8}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7ab6f2}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#a1cbf6}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d1d7dc}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#aab4be}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c3cad1}.table-success,.table-success>td,.table-success>th{background-color:#b8f1dd}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#7ae4c0}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#a3edd3}.table-info,.table-info>td,.table-info>th{background-color:#e2e2e2}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#c9c9ca}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#d5d5d5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffe2b8}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffca7a}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffd89f}.table-danger,.table-danger>td,.table-danger>th{background-color:#fdc9d1}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#fb9ba9}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#fcb0bc}.table-light,.table-light>td,.table-light>th{background-color:#f9f8fb}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#f4f2f8}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ebe8f2}.table-dark,.table-dark>td,.table-dark>th{background-color:#bec6cd}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#8694a2}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b0b9c2}.table-100,.table-100>td,.table-100>th{background-color:#f7f7f8}.table-100 tbody+tbody,.table-100 td,.table-100 th,.table-100 thead th{border-color:#f0f1f2}.table-hover .table-100:hover,.table-hover .table-100:hover>td,.table-hover .table-100:hover>th{background-color:#e9e9ec}.table-200,.table-200>td,.table-200>th{background-color:#f0f0f1}.table-200 tbody+tbody,.table-200 td,.table-200 th,.table-200 thead th{border-color:#e3e3e4}.table-hover .table-200:hover,.table-hover .table-200:hover>td,.table-hover .table-200:hover>th{background-color:#e3e3e5}.table-300,.table-300>td,.table-300>th{background-color:#e9e9ea}.table-300 tbody+tbody,.table-300 td,.table-300 th,.table-300 thead th{border-color:#d6d6d7}.table-hover .table-300:hover,.table-hover .table-300:hover>td,.table-hover .table-300:hover>th{background-color:#dcdcde}.table-400,.table-400>td,.table-400>th{background-color:#e2e2e2}.table-400 tbody+tbody,.table-400 td,.table-400 th,.table-400 thead th{border-color:#c9c9ca}.table-hover .table-400:hover,.table-hover .table-400:hover>td,.table-hover .table-400:hover>th{background-color:#d5d5d5}.table-500,.table-500>td,.table-500>th{background-color:#dbdbdb}.table-500 tbody+tbody,.table-500 td,.table-500 th,.table-500 thead th{border-color:#bcbcbd}.table-hover .table-500:hover,.table-hover .table-500:hover>td,.table-hover .table-500:hover>th{background-color:#cecece}.table-600,.table-600>td,.table-600>th{background-color:#d4d4d4}.table-600 tbody+tbody,.table-600 td,.table-600 th,.table-600 thead th{border-color:#afafaf}.table-hover .table-600:hover,.table-hover .table-600:hover>td,.table-hover .table-600:hover>th{background-color:#c7c7c7}.table-700,.table-700>td,.table-700>th{background-color:#cdcdcd}.table-700 tbody+tbody,.table-700 td,.table-700 th,.table-700 thead th{border-color:#a2a2a2}.table-hover .table-700:hover,.table-hover .table-700:hover>td,.table-hover .table-700:hover>th{background-color:silver}.table-800,.table-800>td,.table-800>th{background-color:#c6c6c6}.table-800 tbody+tbody,.table-800 td,.table-800 th,.table-800 thead th{border-color:#949595}.table-hover .table-800:hover,.table-hover .table-800:hover>td,.table-hover .table-800:hover>th{background-color:#b9b9b9}.table-900,.table-900>td,.table-900>th{background-color:#bfbfbf}.table-900 tbody+tbody,.table-900 td,.table-900 th,.table-900 thead th{border-color:#878788}.table-hover .table-900:hover,.table-hover .table-900:hover>td,.table-hover .table-900:hover>th{background-color:#b2b2b2}.table-active,.table-active>td,.table-active>th{background-color:#e5f1fa}.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:#d0e5f6}.table .thead-dark th{color:#fff;background-color:#323333;border-color:#464646}.table .thead-light th{color:#4c4c4d;background-color:#cacacc;border-color:#d6dce3}.table-dark{color:#fff;background-color:#323333}.table-dark td,.table-dark th,.table-dark thead th{border-color:#464646}.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{color:#fff;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}.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}.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}.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}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:16px;font-size:1rem;font-weight:300;line-height:1.5;color:#4c4c4d;background-color:#fff;background-clip:padding-box;border:1px solid #979899;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{-webkit-transition:none;transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#4c4c4d;background-color:#fff;border-color:#5c6f82;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.25);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.25)}.form-control::-webkit-input-placeholder{color:#656566;opacity:1}.form-control::-moz-placeholder{color:#656566;opacity:1}.form-control::-ms-input-placeholder{color:#656566;opacity:1}.form-control::placeholder{color:#656566;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#cacacc;opacity:1}select.form-control:focus::-ms-value{color:#4c4c4d;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:20px;font-size:1.25rem;line-height:1.556}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:14px;font-size:.875rem;line-height:1.428}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#19191a;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.428em + .5rem + 2px);padding:.25rem .5rem;font-size:14px;font-size:.875rem;line-height:1.428;border-radius:2px}.form-control-lg{height:calc(1.556em + 1rem + 2px);padding:.5rem 1rem;font-size:20px;font-size:1.25rem;line-height:1.556;border-radius:8px}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#5a768a}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:12.432px;font-size:.777rem;color:#00cc85}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:1rem;margin-top:.1rem;font-size:14px;font-size:.875rem;line-height:1.5;color:#19191a;background-color:#00cc85;border-radius:4px}.form-control.is-valid,.was-validated .form-control:valid{border-color:#00cc85;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2300cc85' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#00cc85;-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.25);box-shadow:0 0 0 .2rem rgba(0,204,133,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#00cc85;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23323333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2300cc85' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#00cc85;-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.25);box-shadow:0 0 0 .2rem rgba(0,204,133,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#00cc85}.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:#00cc85}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#00cc85}.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{border-color:#00ffa6;background-color:#00ffa6}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.25);box-shadow:0 0 0 .2rem rgba(0,204,133,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#00cc85}.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{border-color:#00cc85;-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.25);box-shadow:0 0 0 .2rem rgba(0,204,133,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:12.432px;font-size:.777rem;color:#f73e5a}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:1rem;margin-top:.1rem;font-size:14px;font-size:.875rem;line-height:1.5;color:#19191a;background-color:#f73e5a;border-radius:4px}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#f73e5a;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f73e5a' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23f73e5a' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#f73e5a;-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.25);box-shadow:0 0 0 .2rem rgba(247,62,90,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#f73e5a;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23323333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f73e5a' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23f73e5a' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#f73e5a;-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.25);box-shadow:0 0 0 .2rem rgba(247,62,90,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#f73e5a}.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:#f73e5a}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#f73e5a}.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{border-color:#f96f84;background-color:#f96f84}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.25);box-shadow:0 0 0 .2rem rgba(247,62,90,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#f73e5a}.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{border-color:#f73e5a;-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.25);box-shadow:0 0 0 .2rem rgba(247,62,90,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .form-group,.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;align-items:center;margin-bottom:0}.form-inline .form-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:600;color:#19191a;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:0 solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:4px;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{-webkit-transition:none;transition:none}}.btn:hover{color:#19191a;text-decoration:none}.btn.focus,.btn:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(0,115,230,.25);box-shadow:0 0 0 .2rem rgba(0,115,230,.25)}.btn.disabled,.btn:disabled{opacity:.65;-webkit-box-shadow:none;box-shadow:none}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:not(:disabled):not(.disabled).active:focus,.btn:not(:disabled):not(.disabled):active:focus{-webkit-box-shadow:0 0 0 .2rem rgba(0,115,230,.25),inset 0 3px 5px rgba(0,0,0,.125);box-shadow:0 0 0 .2rem rgba(0,115,230,.25),inset 0 3px 5px rgba(0,0,0,.125)}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#0073e6;border-color:#0073e6;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-primary:hover{color:#fff;background-color:#0060bf;border-color:#0059b3}.btn-primary.focus,.btn-primary:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0073e6;border-color:#0073e6}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0059b3;border-color:#0053a6}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5)}.btn-secondary{color:#fff;background-color:#5c6f82;border-color:#5c6f82;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-secondary:hover{color:#fff;background-color:#4c5c6c;border-color:#475664}.btn-secondary.focus,.btn-secondary:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(92,111,130,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(92,111,130,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#5c6f82;border-color:#5c6f82}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#475664;border-color:#424f5d}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(92,111,130,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(92,111,130,.5)}.btn-success{color:#19191a;background-color:#00cc85;border-color:#00cc85;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-success:hover{color:#fff;background-color:#00a66c;border-color:#009963}.btn-success.focus,.btn-success:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,204,133,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,204,133,.5)}.btn-success.disabled,.btn-success:disabled{color:#19191a;background-color:#00cc85;border-color:#00cc85}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#009963;border-color:#008c5b}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,204,133,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,204,133,.5)}.btn-info{color:#19191a;background-color:#979899;border-color:#979899;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-info:hover{color:#19191a;background-color:#848586;border-color:#7e7e80}.btn-info.focus,.btn-info:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(151,152,153,.5)}.btn-info.disabled,.btn-info:disabled{color:#19191a;background-color:#979899;border-color:#979899}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#19191a;background-color:#7e7e80;border-color:#777879}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5)}.btn-warning{color:#19191a;background-color:#f90;border-color:#f90;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-warning:hover{color:#19191a;background-color:#d98200;border-color:#cc7a00}.btn-warning.focus,.btn-warning:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(255,153,0,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(255,153,0,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#19191a;background-color:#f90;border-color:#f90}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#19191a;background-color:#cc7a00;border-color:#bf7300}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,153,0,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,153,0,.5)}.btn-danger{color:#19191a;background-color:#f73e5a;border-color:#f73e5a;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger:hover{color:#fff;background-color:#f6193a;border-color:#f50d30}.btn-danger.focus,.btn-danger:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(247,62,90,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(247,62,90,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#19191a;background-color:#f73e5a;border-color:#f73e5a}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#f50d30;border-color:#ec092b}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(247,62,90,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(247,62,90,.5)}.btn-light{color:#19191a;background-color:#e9e6f2;border-color:#e9e6f2;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-light:hover{color:#19191a;background-color:#d3cde5;border-color:#ccc4e1}.btn-light.focus,.btn-light:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(233,230,242,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(233,230,242,.5)}.btn-light.disabled,.btn-light:disabled{color:#19191a;background-color:#e9e6f2;border-color:#e9e6f2}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#19191a;background-color:#ccc4e1;border-color:#c4bcdd}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(233,230,242,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(233,230,242,.5)}.btn-dark{color:#fff;background-color:#17324d;border-color:#17324d;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-dark:hover{color:#fff;background-color:#0e1f2f;border-color:#0b1825}.btn-dark.focus,.btn-dark:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(23,50,77,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(23,50,77,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#17324d;border-color:#17324d}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#0b1825;border-color:#08121b}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(23,50,77,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(23,50,77,.5)}.btn-100{color:#19191a;background-color:#e3e4e6;border-color:#e3e4e6;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-100:hover{color:#19191a;background-color:#cfd0d3;border-color:#c9cacd}.btn-100.focus,.btn-100:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(227,228,230,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(227,228,230,.5)}.btn-100.disabled,.btn-100:disabled{color:#19191a;background-color:#e3e4e6;border-color:#e3e4e6}.btn-100:not(:disabled):not(.disabled).active,.btn-100:not(:disabled):not(.disabled):active,.show>.btn-100.dropdown-toggle{color:#19191a;background-color:#c9cacd;border-color:#c2c3c7}.btn-100:not(:disabled):not(.disabled).active:focus,.btn-100:not(:disabled):not(.disabled):active:focus,.show>.btn-100.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(227,228,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(227,228,230,.5)}.btn-200{color:#19191a;background-color:#cacacc;border-color:#cacacc;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-200:hover{color:#19191a;background-color:#b6b7b9;border-color:#b0b1b3}.btn-200.focus,.btn-200:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(202,202,204,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(202,202,204,.5)}.btn-200.disabled,.btn-200:disabled{color:#19191a;background-color:#cacacc;border-color:#cacacc}.btn-200:not(:disabled):not(.disabled).active,.btn-200:not(:disabled):not(.disabled):active,.show>.btn-200.dropdown-toggle{color:#19191a;background-color:#b0b1b3;border-color:#a9aaad}.btn-200:not(:disabled):not(.disabled).active:focus,.btn-200:not(:disabled):not(.disabled):active:focus,.show>.btn-200.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(202,202,204,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(202,202,204,.5)}.btn-300{color:#19191a;background-color:#b1b1b3;border-color:#b1b1b3;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-300:hover{color:#19191a;background-color:#9d9ea0;border-color:#979899}.btn-300.focus,.btn-300:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(177,177,179,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(177,177,179,.5)}.btn-300.disabled,.btn-300:disabled{color:#19191a;background-color:#b1b1b3;border-color:#b1b1b3}.btn-300:not(:disabled):not(.disabled).active,.btn-300:not(:disabled):not(.disabled):active,.show>.btn-300.dropdown-toggle{color:#19191a;background-color:#979899;border-color:#909193}.btn-300:not(:disabled):not(.disabled).active:focus,.btn-300:not(:disabled):not(.disabled):active:focus,.show>.btn-300.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(177,177,179,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(177,177,179,.5)}.btn-400{color:#19191a;background-color:#979899;border-color:#979899;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-400:hover{color:#19191a;background-color:#848586;border-color:#7e7e80}.btn-400.focus,.btn-400:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(151,152,153,.5)}.btn-400.disabled,.btn-400:disabled{color:#19191a;background-color:#979899;border-color:#979899}.btn-400:not(:disabled):not(.disabled).active,.btn-400:not(:disabled):not(.disabled):active,.show>.btn-400.dropdown-toggle{color:#19191a;background-color:#7e7e80;border-color:#777879}.btn-400:not(:disabled):not(.disabled).active:focus,.btn-400:not(:disabled):not(.disabled):active:focus,.show>.btn-400.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5)}.btn-500{color:#19191a;background-color:#7e7f80;border-color:#7e7f80;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-500:hover{color:#fff;background-color:#6b6b6c;border-color:#656566}.btn-500.focus,.btn-500:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(126,127,128,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(126,127,128,.5)}.btn-500.disabled,.btn-500:disabled{color:#19191a;background-color:#7e7f80;border-color:#7e7f80}.btn-500:not(:disabled):not(.disabled).active,.btn-500:not(:disabled):not(.disabled):active,.show>.btn-500.dropdown-toggle{color:#fff;background-color:#656566;border-color:#5f5f5f}.btn-500:not(:disabled):not(.disabled).active:focus,.btn-500:not(:disabled):not(.disabled):active:focus,.show>.btn-500.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(126,127,128,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(126,127,128,.5)}.btn-600{color:#fff;background-color:#656566;border-color:#656566;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-600:hover{color:#fff;background-color:#525253;border-color:#4c4c4c}.btn-600.focus,.btn-600:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(101,101,102,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(101,101,102,.5)}.btn-600.disabled,.btn-600:disabled{color:#fff;background-color:#656566;border-color:#656566}.btn-600:not(:disabled):not(.disabled).active,.btn-600:not(:disabled):not(.disabled):active,.show>.btn-600.dropdown-toggle{color:#fff;background-color:#4c4c4c;border-color:#454546}.btn-600:not(:disabled):not(.disabled).active:focus,.btn-600:not(:disabled):not(.disabled):active:focus,.show>.btn-600.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(101,101,102,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(101,101,102,.5)}.btn-700{color:#fff;background-color:#4c4c4d;border-color:#4c4c4d;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-700:hover{color:#fff;background-color:#393939;border-color:#323233}.btn-700.focus,.btn-700:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(76,76,77,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(76,76,77,.5)}.btn-700.disabled,.btn-700:disabled{color:#fff;background-color:#4c4c4d;border-color:#4c4c4d}.btn-700:not(:disabled):not(.disabled).active,.btn-700:not(:disabled):not(.disabled):active,.show>.btn-700.dropdown-toggle{color:#fff;background-color:#323233;border-color:#2c2c2c}.btn-700:not(:disabled):not(.disabled).active:focus,.btn-700:not(:disabled):not(.disabled):active:focus,.show>.btn-700.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(76,76,77,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(76,76,77,.5)}.btn-800{color:#fff;background-color:#323333;border-color:#323333;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-800:hover{color:#fff;background-color:#1f2020;border-color:#191919}.btn-800.focus,.btn-800:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(50,51,51,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(50,51,51,.5)}.btn-800.disabled,.btn-800:disabled{color:#fff;background-color:#323333;border-color:#323333}.btn-800:not(:disabled):not(.disabled).active,.btn-800:not(:disabled):not(.disabled):active,.show>.btn-800.dropdown-toggle{color:#fff;background-color:#191919;border-color:#131313}.btn-800:not(:disabled):not(.disabled).active:focus,.btn-800:not(:disabled):not(.disabled):active:focus,.show>.btn-800.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(50,51,51,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(50,51,51,.5)}.btn-900{color:#fff;background-color:#19191a;border-color:#19191a;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-900:hover{color:#fff;background-color:#060606;border-color:#000}.btn-900.focus,.btn-900:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(25,25,26,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(25,25,26,.5)}.btn-900.disabled,.btn-900:disabled{color:#fff;background-color:#19191a;border-color:#19191a}.btn-900:not(:disabled):not(.disabled).active,.btn-900:not(:disabled):not(.disabled):active,.show>.btn-900.dropdown-toggle{color:#fff;background-color:#000;border-color:#000}.btn-900:not(:disabled):not(.disabled).active:focus,.btn-900:not(:disabled):not(.disabled):active:focus,.show>.btn-900.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(25,25,26,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(25,25,26,.5)}.btn-outline-primary{color:#0073e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #0073e6;box-shadow:inset 0 0 0 1px #0073e6}.btn-outline-primary:hover{color:#0959aa;-webkit-box-shadow:inset 0 0 0 1px #0959aa;box-shadow:inset 0 0 0 1px #0959aa}.btn-outline-primary.focus,.btn-outline-primary:focus{-webkit-box-shadow:inset 0 0 0 1px #0073e6,0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 0 0 1px #0073e6,0 0 0 .2rem rgba(0,115,230,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0073e6;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:#0073e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #0073e6;box-shadow:inset 0 0 0 1px #0073e6}.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{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5)}.btn-outline-secondary{color:#5c6f82;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #5c6f82;box-shadow:inset 0 0 0 1px #5c6f82}.btn-outline-secondary:hover{color:#50565c;-webkit-box-shadow:inset 0 0 0 1px #50565c;box-shadow:inset 0 0 0 1px #50565c}.btn-outline-secondary.focus,.btn-outline-secondary:focus{-webkit-box-shadow:inset 0 0 0 1px #5c6f82,0 0 0 .2rem rgba(92,111,130,.5);box-shadow:inset 0 0 0 1px #5c6f82,0 0 0 .2rem rgba(92,111,130,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#5c6f82;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:#5c6f82;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #5c6f82;box-shadow:inset 0 0 0 1px #5c6f82}.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{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(92,111,130,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(92,111,130,.5)}.btn-outline-success{color:#00cc85;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #00cc85;box-shadow:inset 0 0 0 1px #00cc85}.btn-outline-success:hover{color:#089161;-webkit-box-shadow:inset 0 0 0 1px #089161;box-shadow:inset 0 0 0 1px #089161}.btn-outline-success.focus,.btn-outline-success:focus{-webkit-box-shadow:inset 0 0 0 1px #00cc85,0 0 0 .2rem rgba(0,204,133,.5);box-shadow:inset 0 0 0 1px #00cc85,0 0 0 .2rem rgba(0,204,133,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#00cc85;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:#00cc85;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #00cc85;box-shadow:inset 0 0 0 1px #00cc85}.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{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,204,133,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,204,133,.5)}.btn-outline-info{color:#979899;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #979899;box-shadow:inset 0 0 0 1px #979899}.btn-outline-info:hover{color:#7f7f7f;-webkit-box-shadow:inset 0 0 0 1px #7f7f7f;box-shadow:inset 0 0 0 1px #7f7f7f}.btn-outline-info.focus,.btn-outline-info:focus{-webkit-box-shadow:inset 0 0 0 1px #979899,0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 0 0 1px #979899,0 0 0 .2rem rgba(151,152,153,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#979899;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:#979899;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #979899;box-shadow:inset 0 0 0 1px #979899}.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{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5)}.btn-outline-warning{color:#f90;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #f90;box-shadow:inset 0 0 0 1px #f90}.btn-outline-warning:hover{color:#c2780a;-webkit-box-shadow:inset 0 0 0 1px #c2780a;box-shadow:inset 0 0 0 1px #c2780a}.btn-outline-warning.focus,.btn-outline-warning:focus{-webkit-box-shadow:inset 0 0 0 1px #f90,0 0 0 .2rem rgba(255,153,0,.5);box-shadow:inset 0 0 0 1px #f90,0 0 0 .2rem rgba(255,153,0,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#f90;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:#f90;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #f90;box-shadow:inset 0 0 0 1px #f90}.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{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,153,0,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,153,0,.5)}.btn-outline-danger{color:#f73e5a;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #f73e5a;box-shadow:inset 0 0 0 1px #f73e5a}.btn-outline-danger:hover{color:#e91938;-webkit-box-shadow:inset 0 0 0 1px #e91938;box-shadow:inset 0 0 0 1px #e91938}.btn-outline-danger.focus,.btn-outline-danger:focus{-webkit-box-shadow:inset 0 0 0 1px #f73e5a,0 0 0 .2rem rgba(247,62,90,.5);box-shadow:inset 0 0 0 1px #f73e5a,0 0 0 .2rem rgba(247,62,90,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#f73e5a;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:#f73e5a;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #f73e5a;box-shadow:inset 0 0 0 1px #f73e5a}.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{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(247,62,90,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(247,62,90,.5)}.btn-outline-light{color:#e9e6f2;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e9e6f2;box-shadow:inset 0 0 0 1px #e9e6f2}.btn-outline-light:hover{color:#cec9dd;-webkit-box-shadow:inset 0 0 0 1px #cec9dd;box-shadow:inset 0 0 0 1px #cec9dd}.btn-outline-light.focus,.btn-outline-light:focus{-webkit-box-shadow:inset 0 0 0 1px #e9e6f2,0 0 0 .2rem rgba(233,230,242,.5);box-shadow:inset 0 0 0 1px #e9e6f2,0 0 0 .2rem rgba(233,230,242,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#e9e6f2;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:#e9e6f2;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e9e6f2;box-shadow:inset 0 0 0 1px #e9e6f2}.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{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(233,230,242,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(233,230,242,.5)}.btn-outline-dark{color:#17324d;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #17324d;box-shadow:inset 0 0 0 1px #17324d}.btn-outline-dark:hover{color:#0e1823;-webkit-box-shadow:inset 0 0 0 1px #0e1823;box-shadow:inset 0 0 0 1px #0e1823}.btn-outline-dark.focus,.btn-outline-dark:focus{-webkit-box-shadow:inset 0 0 0 1px #17324d,0 0 0 .2rem rgba(23,50,77,.5);box-shadow:inset 0 0 0 1px #17324d,0 0 0 .2rem rgba(23,50,77,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#17324d;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:#17324d;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #17324d;box-shadow:inset 0 0 0 1px #17324d}.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{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(23,50,77,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(23,50,77,.5)}.btn-outline-100{color:#e3e4e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e3e4e6;box-shadow:inset 0 0 0 1px #e3e4e6}.btn-outline-100:hover{color:#cbcbcb;-webkit-box-shadow:inset 0 0 0 1px #cbcbcb;box-shadow:inset 0 0 0 1px #cbcbcb}.btn-outline-100.focus,.btn-outline-100:focus{-webkit-box-shadow:inset 0 0 0 1px #e3e4e6,0 0 0 .2rem rgba(227,228,230,.5);box-shadow:inset 0 0 0 1px #e3e4e6,0 0 0 .2rem rgba(227,228,230,.5)}.btn-outline-100.disabled,.btn-outline-100:disabled{color:#e3e4e6;background-color:transparent}.btn-outline-100:not(:disabled):not(.disabled).active,.btn-outline-100:not(:disabled):not(.disabled):active,.show>.btn-outline-100.dropdown-toggle{color:#e3e4e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e3e4e6;box-shadow:inset 0 0 0 1px #e3e4e6}.btn-outline-100:not(:disabled):not(.disabled).active:focus,.btn-outline-100:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-100.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(227,228,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(227,228,230,.5)}.btn-outline-200{color:#cacacc;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #cacacc;box-shadow:inset 0 0 0 1px #cacacc}.btn-outline-200:hover{color:#b1b1b1;-webkit-box-shadow:inset 0 0 0 1px #b1b1b1;box-shadow:inset 0 0 0 1px #b1b1b1}.btn-outline-200.focus,.btn-outline-200:focus{-webkit-box-shadow:inset 0 0 0 1px #cacacc,0 0 0 .2rem rgba(202,202,204,.5);box-shadow:inset 0 0 0 1px #cacacc,0 0 0 .2rem rgba(202,202,204,.5)}.btn-outline-200.disabled,.btn-outline-200:disabled{color:#cacacc;background-color:transparent}.btn-outline-200:not(:disabled):not(.disabled).active,.btn-outline-200:not(:disabled):not(.disabled):active,.show>.btn-outline-200.dropdown-toggle{color:#cacacc;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #cacacc;box-shadow:inset 0 0 0 1px #cacacc}.btn-outline-200:not(:disabled):not(.disabled).active:focus,.btn-outline-200:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-200.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(202,202,204,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(202,202,204,.5)}.btn-outline-300{color:#b1b1b3;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #b1b1b3;box-shadow:inset 0 0 0 1px #b1b1b3}.btn-outline-300:hover{color:#989898;-webkit-box-shadow:inset 0 0 0 1px #989898;box-shadow:inset 0 0 0 1px #989898}.btn-outline-300.focus,.btn-outline-300:focus{-webkit-box-shadow:inset 0 0 0 1px #b1b1b3,0 0 0 .2rem rgba(177,177,179,.5);box-shadow:inset 0 0 0 1px #b1b1b3,0 0 0 .2rem rgba(177,177,179,.5)}.btn-outline-300.disabled,.btn-outline-300:disabled{color:#b1b1b3;background-color:transparent}.btn-outline-300:not(:disabled):not(.disabled).active,.btn-outline-300:not(:disabled):not(.disabled):active,.show>.btn-outline-300.dropdown-toggle{color:#b1b1b3;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #b1b1b3;box-shadow:inset 0 0 0 1px #b1b1b3}.btn-outline-300:not(:disabled):not(.disabled).active:focus,.btn-outline-300:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-300.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(177,177,179,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(177,177,179,.5)}.btn-outline-400{color:#979899;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #979899;box-shadow:inset 0 0 0 1px #979899}.btn-outline-400:hover{color:#7f7f7f;-webkit-box-shadow:inset 0 0 0 1px #7f7f7f;box-shadow:inset 0 0 0 1px #7f7f7f}.btn-outline-400.focus,.btn-outline-400:focus{-webkit-box-shadow:inset 0 0 0 1px #979899,0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 0 0 1px #979899,0 0 0 .2rem rgba(151,152,153,.5)}.btn-outline-400.disabled,.btn-outline-400:disabled{color:#979899;background-color:transparent}.btn-outline-400:not(:disabled):not(.disabled).active,.btn-outline-400:not(:disabled):not(.disabled):active,.show>.btn-outline-400.dropdown-toggle{color:#979899;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #979899;box-shadow:inset 0 0 0 1px #979899}.btn-outline-400:not(:disabled):not(.disabled).active:focus,.btn-outline-400:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-400.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5)}.btn-outline-500{color:#7e7f80;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #7e7f80;box-shadow:inset 0 0 0 1px #7e7f80}.btn-outline-500:hover{color:#656565;-webkit-box-shadow:inset 0 0 0 1px #656565;box-shadow:inset 0 0 0 1px #656565}.btn-outline-500.focus,.btn-outline-500:focus{-webkit-box-shadow:inset 0 0 0 1px #7e7f80,0 0 0 .2rem rgba(126,127,128,.5);box-shadow:inset 0 0 0 1px #7e7f80,0 0 0 .2rem rgba(126,127,128,.5)}.btn-outline-500.disabled,.btn-outline-500:disabled{color:#7e7f80;background-color:transparent}.btn-outline-500:not(:disabled):not(.disabled).active,.btn-outline-500:not(:disabled):not(.disabled):active,.show>.btn-outline-500.dropdown-toggle{color:#7e7f80;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #7e7f80;box-shadow:inset 0 0 0 1px #7e7f80}.btn-outline-500:not(:disabled):not(.disabled).active:focus,.btn-outline-500:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-500.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(126,127,128,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(126,127,128,.5)}.btn-outline-600{color:#656566;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #656566;box-shadow:inset 0 0 0 1px #656566}.btn-outline-600:hover{color:#4c4c4c;-webkit-box-shadow:inset 0 0 0 1px #4c4c4c;box-shadow:inset 0 0 0 1px #4c4c4c}.btn-outline-600.focus,.btn-outline-600:focus{-webkit-box-shadow:inset 0 0 0 1px #656566,0 0 0 .2rem rgba(101,101,102,.5);box-shadow:inset 0 0 0 1px #656566,0 0 0 .2rem rgba(101,101,102,.5)}.btn-outline-600.disabled,.btn-outline-600:disabled{color:#656566;background-color:transparent}.btn-outline-600:not(:disabled):not(.disabled).active,.btn-outline-600:not(:disabled):not(.disabled):active,.show>.btn-outline-600.dropdown-toggle{color:#656566;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #656566;box-shadow:inset 0 0 0 1px #656566}.btn-outline-600:not(:disabled):not(.disabled).active:focus,.btn-outline-600:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-600.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(101,101,102,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(101,101,102,.5)}.btn-outline-700{color:#4c4c4d;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #4c4c4d;box-shadow:inset 0 0 0 1px #4c4c4d}.btn-outline-700:hover{color:#333;-webkit-box-shadow:inset 0 0 0 1px #333;box-shadow:inset 0 0 0 1px #333}.btn-outline-700.focus,.btn-outline-700:focus{-webkit-box-shadow:inset 0 0 0 1px #4c4c4d,0 0 0 .2rem rgba(76,76,77,.5);box-shadow:inset 0 0 0 1px #4c4c4d,0 0 0 .2rem rgba(76,76,77,.5)}.btn-outline-700.disabled,.btn-outline-700:disabled{color:#4c4c4d;background-color:transparent}.btn-outline-700:not(:disabled):not(.disabled).active,.btn-outline-700:not(:disabled):not(.disabled):active,.show>.btn-outline-700.dropdown-toggle{color:#4c4c4d;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #4c4c4d;box-shadow:inset 0 0 0 1px #4c4c4d}.btn-outline-700:not(:disabled):not(.disabled).active:focus,.btn-outline-700:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-700.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(76,76,77,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(76,76,77,.5)}.btn-outline-800{color:#323333;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #323333;box-shadow:inset 0 0 0 1px #323333}.btn-outline-800:hover{color:#191919;-webkit-box-shadow:inset 0 0 0 1px #191919;box-shadow:inset 0 0 0 1px #191919}.btn-outline-800.focus,.btn-outline-800:focus{-webkit-box-shadow:inset 0 0 0 1px #323333,0 0 0 .2rem rgba(50,51,51,.5);box-shadow:inset 0 0 0 1px #323333,0 0 0 .2rem rgba(50,51,51,.5)}.btn-outline-800.disabled,.btn-outline-800:disabled{color:#323333;background-color:transparent}.btn-outline-800:not(:disabled):not(.disabled).active,.btn-outline-800:not(:disabled):not(.disabled):active,.show>.btn-outline-800.dropdown-toggle{color:#323333;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #323333;box-shadow:inset 0 0 0 1px #323333}.btn-outline-800:not(:disabled):not(.disabled).active:focus,.btn-outline-800:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-800.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(50,51,51,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(50,51,51,.5)}.btn-outline-900{color:#19191a;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #19191a;box-shadow:inset 0 0 0 1px #19191a}.btn-outline-900:hover{color:#000;-webkit-box-shadow:inset 0 0 0 1px #000;box-shadow:inset 0 0 0 1px #000}.btn-outline-900.focus,.btn-outline-900:focus{-webkit-box-shadow:inset 0 0 0 1px #19191a,0 0 0 .2rem rgba(25,25,26,.5);box-shadow:inset 0 0 0 1px #19191a,0 0 0 .2rem rgba(25,25,26,.5)}.btn-outline-900.disabled,.btn-outline-900:disabled{color:#19191a;background-color:transparent}.btn-outline-900:not(:disabled):not(.disabled).active,.btn-outline-900:not(:disabled):not(.disabled):active,.show>.btn-outline-900.dropdown-toggle{color:#19191a;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #19191a;box-shadow:inset 0 0 0 1px #19191a}.btn-outline-900:not(:disabled):not(.disabled).active:focus,.btn-outline-900:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-900.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(25,25,26,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(25,25,26,.5)}.btn-link{font-weight:400;color:#0073e6;text-decoration:none}.btn-link:hover{color:#004d99;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;-webkit-box-shadow:none;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#656566;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.125rem;border-radius:8px}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:2px}.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{-webkit-transition:opacity .15s linear;transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{-webkit-transition:none;transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{-webkit-transition:none;transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;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:160px;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:16px;font-size:1rem;color:#19191a;text-align:left;list-style:none;background-clip:padding-box;border:0 solid transparent;border-radius:4px;-webkit-box-shadow:0 0 30px 5px rgba(0,0,0,.05);box-shadow:0 0 30px 5px rgba(0,0,0,.05)}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;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:8px 0;overflow:hidden;border-top:1px solid #cacacc}.dropdown-item{display:block;width:100%;padding:12px 24px;clear:both;font-weight:400;color:#17324d;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#17324d;text-decoration:none;background-color:#e6ecf2}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0073e6}.dropdown-item.disabled,.dropdown-item:disabled{color:#656566;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 24px;margin-bottom:0;font-size:14px;font-size:.875rem;color:#17324d;white-space:nowrap}.dropdown-item-text{display:block;padding:12px 24px;color:#17324d}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 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-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group.show .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.show .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top: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:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.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:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:16px;font-size:1rem;font-weight:400;line-height:1.5;color:#4c4c4d;text-align:center;white-space:nowrap;background-color:#cacacc;border:1px solid #979899;border-radius:4px}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.556em + 1rem + 2px)}.input-group-lg>.custom-select,.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:20px;font-size:1.25rem;line-height:1.556;border-radius:8px}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.428em + .5rem + 2px)}.input-group-sm>.custom-select,.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:14px;font-size:.875rem;line-height:1.428;border-radius:2px}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.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}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#656566;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #b1b1b3}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:4px;border-top-right-radius:4px}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#cacacc #cacacc #b1b1b3}.nav-tabs .nav-link.disabled{color:#656566;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#4c4c4d;background-color:#fff;border-color:#b1b1b3 #b1b1b3 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:4px}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0073e6}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:8px 16px}.navbar,.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.5rem;padding-bottom:.5rem;margin-right:16px;font-size:16px;font-size:1rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:20px;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:0}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.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{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm,.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md,.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg,.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl,.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.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=utf-8,%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:transparent}.navbar-dark .navbar-toggler-icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTkuMiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDEyIDEwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0wIDRoMTJ2MkgwVjR6bTAtNGg4djJIMFYwem0wIDhoOHYySDBWOHoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==)}.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:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:0}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:0;border-bottom-left-radius:0}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:2rem}.card-title{margin-bottom:1rem}.card-subtitle{margin-top:-.5rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:2rem}.card-header{padding:1rem 2rem;margin-bottom:0;background-color:transparent;border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:-1px -1px 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:1rem 2rem;background-color:transparent;border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 -1px -1px}.card-header-tabs{margin-bottom:-1rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-1rem;margin-left:-1rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:-1px}.card-img-top{width:100%;border-top-left-radius:-1px;border-top-right-radius:-1px}.card-img-bottom{width:100%;border-bottom-right-radius:-1px;border-bottom-left-radius:-1px}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:6px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-6px;margin-left:-6px}.card-deck,.card-deck .card{-webkit-box-direction:normal}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column;margin-right:6px;margin-bottom:0;margin-left:6px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:6px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:1rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:transparent;border-radius:0}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#656566;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#656566}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:4px}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#0073e6;background-color:#fff;border:1px solid #b1b1b3}.page-link:hover{z-index:2;color:#004d99;text-decoration:none;background-color:#cacacc;border-color:#b1b1b3}.page-link:focus{z-index:2;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(0,115,230,.25);box-shadow:0 0 0 .2rem rgba(0,115,230,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.page-item:last-child .page-link{border-top-right-radius:4px;border-bottom-right-radius:4px}.page-item.active .page-link{z-index:1;color:#fff;background-color:#0073e6;border-color:#0073e6}.page-item.disabled .page-link{color:#656566;pointer-events:none;cursor:auto;background-color:#fff;border-color:#b1b1b3}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:20px;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:8px;border-bottom-left-radius:8px}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:8px;border-bottom-right-radius:8px}.pagination-sm .page-link{padding:.25rem .5rem;font-size:14px;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:2px;border-bottom-left-radius:2px}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:2px;border-bottom-right-radius:2px}.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:4px;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{-webkit-transition:none;transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.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:#0073e6}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0059b3}a.badge-primary.focus,a.badge-primary:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(0,115,230,.5);box-shadow:0 0 0 .2rem rgba(0,115,230,.5)}.badge-secondary{color:#fff;background-color:#5c6f82}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#475664}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(92,111,130,.5);box-shadow:0 0 0 .2rem rgba(92,111,130,.5)}.badge-success{color:#19191a;background-color:#00cc85}a.badge-success:focus,a.badge-success:hover{color:#19191a;background-color:#009963}a.badge-success.focus,a.badge-success:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.5);box-shadow:0 0 0 .2rem rgba(0,204,133,.5)}.badge-info{color:#19191a;background-color:#979899}a.badge-info:focus,a.badge-info:hover{color:#19191a;background-color:#7e7e80}a.badge-info.focus,a.badge-info:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(151,152,153,.5);box-shadow:0 0 0 .2rem rgba(151,152,153,.5)}.badge-warning{color:#19191a;background-color:#f90}a.badge-warning:focus,a.badge-warning:hover{color:#19191a;background-color:#cc7a00}a.badge-warning.focus,a.badge-warning:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(255,153,0,.5);box-shadow:0 0 0 .2rem rgba(255,153,0,.5)}.badge-danger{color:#19191a;background-color:#f73e5a}a.badge-danger:focus,a.badge-danger:hover{color:#19191a;background-color:#f50d30}a.badge-danger.focus,a.badge-danger:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.5);box-shadow:0 0 0 .2rem rgba(247,62,90,.5)}.badge-light{color:#19191a;background-color:#e9e6f2}a.badge-light:focus,a.badge-light:hover{color:#19191a;background-color:#ccc4e1}a.badge-light.focus,a.badge-light:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(233,230,242,.5);box-shadow:0 0 0 .2rem rgba(233,230,242,.5)}.badge-dark{color:#fff;background-color:#17324d}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#0b1825}a.badge-dark.focus,a.badge-dark:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(23,50,77,.5);box-shadow:0 0 0 .2rem rgba(23,50,77,.5)}.badge-100{color:#19191a;background-color:#e3e4e6}a.badge-100:focus,a.badge-100:hover{color:#19191a;background-color:#c9cacd}a.badge-100.focus,a.badge-100:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(227,228,230,.5);box-shadow:0 0 0 .2rem rgba(227,228,230,.5)}.badge-200{color:#19191a;background-color:#cacacc}a.badge-200:focus,a.badge-200:hover{color:#19191a;background-color:#b0b1b3}a.badge-200.focus,a.badge-200:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(202,202,204,.5);box-shadow:0 0 0 .2rem rgba(202,202,204,.5)}.badge-300{color:#19191a;background-color:#b1b1b3}a.badge-300:focus,a.badge-300:hover{color:#19191a;background-color:#979899}a.badge-300.focus,a.badge-300:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(177,177,179,.5);box-shadow:0 0 0 .2rem rgba(177,177,179,.5)}.badge-400{color:#19191a;background-color:#979899}a.badge-400:focus,a.badge-400:hover{color:#19191a;background-color:#7e7e80}a.badge-400.focus,a.badge-400:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(151,152,153,.5);box-shadow:0 0 0 .2rem rgba(151,152,153,.5)}.badge-500{color:#19191a;background-color:#7e7f80}a.badge-500:focus,a.badge-500:hover{color:#19191a;background-color:#656566}a.badge-500.focus,a.badge-500:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(126,127,128,.5);box-shadow:0 0 0 .2rem rgba(126,127,128,.5)}.badge-600{color:#fff;background-color:#656566}a.badge-600:focus,a.badge-600:hover{color:#fff;background-color:#4c4c4c}a.badge-600.focus,a.badge-600:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(101,101,102,.5);box-shadow:0 0 0 .2rem rgba(101,101,102,.5)}.badge-700{color:#fff;background-color:#4c4c4d}a.badge-700:focus,a.badge-700:hover{color:#fff;background-color:#323233}a.badge-700.focus,a.badge-700:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(76,76,77,.5);box-shadow:0 0 0 .2rem rgba(76,76,77,.5)}.badge-800{color:#fff;background-color:#323333}a.badge-800:focus,a.badge-800:hover{color:#fff;background-color:#191919}a.badge-800.focus,a.badge-800:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(50,51,51,.5);box-shadow:0 0 0 .2rem rgba(50,51,51,.5)}.badge-900{color:#fff;background-color:#19191a}a.badge-900:focus,a.badge-900:hover{color:#fff;background-color:#000}a.badge-900.focus,a.badge-900:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(25,25,26,.5);box-shadow:0 0 0 .2rem rgba(25,25,26,.5)}@-webkit-keyframes progress-bar-stripes{0%{background-position:16px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:16px 0}to{background-position:0 0}}.progress{height:16px;overflow:hidden;font-size:12px;font-size:.75rem;background-color:#cacacc;border-radius:0;-webkit-box-shadow:inset 0 .1rem .1rem rgba(0,0,0,.1);box-shadow:inset 0 .1rem .1rem rgba(0,0,0,.1)}.progress,.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex}.progress-bar{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#0073e6;-webkit-transition:width .6s ease;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{-webkit-transition:none;transition:none}}.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:16px 16px}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#0073e6;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#00264d;text-decoration:none}.list-group-item-action:active{color:#19191a;background-color:#cacacc}.list-group-item{position:relative;display:block;padding:1rem 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:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item.disabled,.list-group-item:disabled{color:#656566;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0073e6;border-color:#0073e6}.list-group-horizontal{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#003c78;background-color:#b8d8f8}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#003c78;background-color:#a1cbf6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#003c78;border-color:#003c78}.list-group-item-secondary{color:#303a44;background-color:#d1d7dc}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#303a44;background-color:#c3cad1}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#303a44;border-color:#303a44}.list-group-item-success{color:#006a45;background-color:#b8f1dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#006a45;background-color:#a3edd3}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#006a45;border-color:#006a45}.list-group-item-info{color:#4f4f50;background-color:#e2e2e2}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#4f4f50;background-color:#d5d5d5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#4f4f50;border-color:#4f4f50}.list-group-item-warning{color:#855000;background-color:#ffe2b8}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#855000;background-color:#ffd89f}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#855000;border-color:#855000}.list-group-item-danger{color:#80202f;background-color:#fdc9d1}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#80202f;background-color:#fcb0bc}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#80202f;border-color:#80202f}.list-group-item-light{color:#79787e;background-color:#f9f8fb}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#79787e;background-color:#ebe8f2}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#79787e;border-color:#79787e}.list-group-item-dark{color:#0c1a28;background-color:#bec6cd}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#0c1a28;background-color:#b0b9c2}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#0c1a28;border-color:#0c1a28}.list-group-item-100{color:#767778;background-color:#f7f7f8}.list-group-item-100.list-group-item-action:focus,.list-group-item-100.list-group-item-action:hover{color:#767778;background-color:#e9e9ec}.list-group-item-100.list-group-item-action.active{color:#fff;background-color:#767778;border-color:#767778}.list-group-item-200{color:#69696a;background-color:#f0f0f1}.list-group-item-200.list-group-item-action:focus,.list-group-item-200.list-group-item-action:hover{color:#69696a;background-color:#e3e3e5}.list-group-item-200.list-group-item-action.active{color:#fff;background-color:#69696a;border-color:#69696a}.list-group-item-300{color:#5c5c5d;background-color:#e9e9ea}.list-group-item-300.list-group-item-action:focus,.list-group-item-300.list-group-item-action:hover{color:#5c5c5d;background-color:#dcdcde}.list-group-item-300.list-group-item-action.active{color:#fff;background-color:#5c5c5d;border-color:#5c5c5d}.list-group-item-400{color:#4f4f50;background-color:#e2e2e2}.list-group-item-400.list-group-item-action:focus,.list-group-item-400.list-group-item-action:hover{color:#4f4f50;background-color:#d5d5d5}.list-group-item-400.list-group-item-action.active{color:#fff;background-color:#4f4f50;border-color:#4f4f50}.list-group-item-500{color:#424243;background-color:#dbdbdb}.list-group-item-500.list-group-item-action:focus,.list-group-item-500.list-group-item-action:hover{color:#424243;background-color:#cecece}.list-group-item-500.list-group-item-action.active{color:#fff;background-color:#424243;border-color:#424243}.list-group-item-600{color:#353535;background-color:#d4d4d4}.list-group-item-600.list-group-item-action:focus,.list-group-item-600.list-group-item-action:hover{color:#353535;background-color:#c7c7c7}.list-group-item-600.list-group-item-action.active{color:#fff;background-color:#353535;border-color:#353535}.list-group-item-700{color:#282828;background-color:#cdcdcd}.list-group-item-700.list-group-item-action:focus,.list-group-item-700.list-group-item-action:hover{color:#282828;background-color:silver}.list-group-item-700.list-group-item-action.active{color:#fff;background-color:#282828;border-color:#282828}.list-group-item-800{color:#1a1b1b;background-color:#c6c6c6}.list-group-item-800.list-group-item-action:focus,.list-group-item-800.list-group-item-action:hover{color:#1a1b1b;background-color:#b9b9b9}.list-group-item-800.list-group-item-action.active{color:#fff;background-color:#1a1b1b;border-color:#1a1b1b}.list-group-item-900{color:#0d0d0e;background-color:#bfbfbf}.list-group-item-900.list-group-item-action:focus,.list-group-item-900.list-group-item-action:hover{color:#0d0d0e;background-color:#b2b2b2}.list-group-item-900.list-group-item-action.active{color:#fff;background-color:#0d0d0e;border-color:#0d0d0e}.close{float:right;font-size:24px;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translateY(-50px);transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{-webkit-transition:none;transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-scrollable{display:-webkit-box;display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:8px;-webkit-box-shadow:0 .25rem .5rem rgba(0,0,0,.5);box-shadow:0 .25rem .5rem rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.8}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.5rem;border-bottom:0 solid #b1b1b3;border-top-left-radius:8px;border-top-right-radius:8px}.modal-header .close{padding:1.5rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.5rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1.5rem;border-top:0 solid #b1b1b3;border-bottom-right-radius:8px;border-bottom-left-radius:8px}.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.5rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3rem)}.modal-dialog-centered{min-height:calc(100% - 3rem)}.modal-dialog-centered:before{height:calc(100vh - 3rem)}.modal-content{-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.5);box-shadow:0 .5rem 1rem rgba(0,0,0,.5)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:Titillium Web,Geneva,Tahoma,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:14px;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:1}.tooltip .arrow{position:absolute;display:block;width:12.8px;width:.8rem;height:6.4px;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:#004a4d}.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:6.4px;width:.4rem;height:12.8px;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:#004a4d}.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:#004a4d}.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:6.4px;width:.4rem;height:12.8px;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:#004a4d}.tooltip-inner{max-width:32em;padding:1rem;color:#fff;text-align:center;background-color:#004a4d;border-radius:4px}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:Titillium Web,Geneva,Tahoma,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:14px;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:8px;-webkit-box-shadow:0 .25rem .5rem rgba(0,0,0,.2);box-shadow:0 .25rem .5rem rgba(0,0,0,.2)}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:16px;width:1rem;height:8px;height:.5rem;margin:0 8px}.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)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 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-width:.5rem .5rem 0;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);width:8px;width:.5rem;height:16px;height:1rem;margin:8px 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 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-width:.5rem .5rem .5rem 0;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)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem;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:16px;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);width:8px;width:.5rem;height:16px;height:1rem;margin:8px 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:16px;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:7px;border-top-right-radius:7px}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#19191a}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{-webkit-transition:none;transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;-webkit-transition:opacity 0s .6s;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{-webkit-transition:none;transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;color:#5c6f82;text-align:center;opacity:1;-webkit-transition:opacity .15s ease;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{-webkit-transition:none;transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#5c6f82;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:32px;height:32px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%235c6f82' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%235c6f82' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:auto;margin-left:auto;list-style:none}.carousel-indicators li{-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;-webkit-transition:opacity .6s ease;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{-webkit-transition:none;transition:none}}.carousel-indicators .active{opacity:1}.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:#0073e6!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0059b3!important}.bg-secondary{background-color:#5c6f82!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#475664!important}.bg-success{background-color:#00cc85!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#009963!important}.bg-info{background-color:#979899!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#7e7e80!important}.bg-warning{background-color:#f90!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#cc7a00!important}.bg-danger{background-color:#f73e5a!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#f50d30!important}.bg-light{background-color:#e9e6f2!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#ccc4e1!important}.bg-dark{background-color:#17324d!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#0b1825!important}.bg-100{background-color:#e3e4e6!important}a.bg-100:focus,a.bg-100:hover,button.bg-100:focus,button.bg-100:hover{background-color:#c9cacd!important}.bg-200{background-color:#cacacc!important}a.bg-200:focus,a.bg-200:hover,button.bg-200:focus,button.bg-200:hover{background-color:#b0b1b3!important}.bg-300{background-color:#b1b1b3!important}.bg-400,a.bg-300:focus,a.bg-300:hover,button.bg-300:focus,button.bg-300:hover{background-color:#979899!important}a.bg-400:focus,a.bg-400:hover,button.bg-400:focus,button.bg-400:hover{background-color:#7e7e80!important}.bg-500{background-color:#7e7f80!important}.bg-600,a.bg-500:focus,a.bg-500:hover,button.bg-500:focus,button.bg-500:hover{background-color:#656566!important}a.bg-600:focus,a.bg-600:hover,button.bg-600:focus,button.bg-600:hover{background-color:#4c4c4c!important}.bg-700{background-color:#4c4c4d!important}a.bg-700:focus,a.bg-700:hover,button.bg-700:focus,button.bg-700:hover{background-color:#323233!important}.bg-800{background-color:#323333!important}a.bg-800:focus,a.bg-800:hover,button.bg-800:focus,button.bg-800:hover{background-color:#191919!important}.bg-900{background-color:#19191a!important}a.bg-900:focus,a.bg-900:hover,button.bg-900:focus,button.bg-900:hover{background-color:#000!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #b1b1b3!important}.border-top{border-top:1px solid #b1b1b3!important}.border-right{border-right:1px solid #b1b1b3!important}.border-bottom{border-bottom:1px solid #b1b1b3!important}.border-left{border-left:1px solid #b1b1b3!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:#0073e6!important}.border-secondary{border-color:#5c6f82!important}.border-success{border-color:#00cc85!important}.border-info{border-color:#979899!important}.border-warning{border-color:#f90!important}.border-danger{border-color:#f73e5a!important}.border-light{border-color:#e9e6f2!important}.border-dark{border-color:#17324d!important}.border-100{border-color:#e3e4e6!important}.border-200{border-color:#cacacc!important}.border-300{border-color:#b1b1b3!important}.border-400{border-color:#979899!important}.border-500{border-color:#7e7f80!important}.border-600{border-color:#656566!important}.border-700{border-color:#4c4c4d!important}.border-800{border-color:#323333!important}.border-900{border-color:#19191a!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:2px!important}.rounded{border-radius:4px!important}.rounded-top{border-top-left-radius:4px!important}.rounded-right,.rounded-top{border-top-right-radius:4px!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:4px!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:4px!important}.rounded-left{border-top-left-radius:4px!important}.rounded-lg{border-radius:8px!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!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:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.8571428571%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column,.flex-row{-webkit-box-direction:normal!important}.flex-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse,.flex-row-reverse{-webkit-box-direction:reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column,.flex-sm-row{-webkit-box-direction:normal!important}.flex-sm-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column,.flex-md-row{-webkit-box-direction:normal!important}.flex-md-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column,.flex-lg-row{-webkit-box-direction:normal!important}.flex-lg-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column,.flex-xl-row{-webkit-box-direction:normal!important}.flex-xl-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{-webkit-box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important;box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important;box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{-webkit-box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important;box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{-webkit-box-shadow:none!important;box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.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:4px!important}.mt-1,.my-1{margin-top:4px!important}.mr-1,.mx-1{margin-right:4px!important}.mb-1,.my-1{margin-bottom:4px!important}.ml-1,.mx-1{margin-left:4px!important}.m-2{margin:8px!important}.mt-2,.my-2{margin-top:8px!important}.mr-2,.mx-2{margin-right:8px!important}.mb-2,.my-2{margin-bottom:8px!important}.ml-2,.mx-2{margin-left:8px!important}.m-3{margin:16px!important}.mt-3,.my-3{margin-top:16px!important}.mr-3,.mx-3{margin-right:16px!important}.mb-3,.my-3{margin-bottom:16px!important}.ml-3,.mx-3{margin-left:16px!important}.m-4{margin:24px!important}.mt-4,.my-4{margin-top:24px!important}.mr-4,.mx-4{margin-right:24px!important}.mb-4,.my-4{margin-bottom:24px!important}.ml-4,.mx-4{margin-left:24px!important}.m-5{margin:48px!important}.mt-5,.my-5{margin-top:48px!important}.mr-5,.mx-5{margin-right:48px!important}.mb-5,.my-5{margin-bottom:48px!important}.ml-5,.mx-5{margin-left:48px!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:4px!important}.pt-1,.py-1{padding-top:4px!important}.pr-1,.px-1{padding-right:4px!important}.pb-1,.py-1{padding-bottom:4px!important}.pl-1,.px-1{padding-left:4px!important}.p-2{padding:8px!important}.pt-2,.py-2{padding-top:8px!important}.pr-2,.px-2{padding-right:8px!important}.pb-2,.py-2{padding-bottom:8px!important}.pl-2,.px-2{padding-left:8px!important}.p-3{padding:16px!important}.pt-3,.py-3{padding-top:16px!important}.pr-3,.px-3{padding-right:16px!important}.pb-3,.py-3{padding-bottom:16px!important}.pl-3,.px-3{padding-left:16px!important}.p-4{padding:24px!important}.pt-4,.py-4{padding-top:24px!important}.pr-4,.px-4{padding-right:24px!important}.pb-4,.py-4{padding-bottom:24px!important}.pl-4,.px-4{padding-left:24px!important}.p-5{padding:48px!important}.pt-5,.py-5{padding-top:48px!important}.pr-5,.px-5{padding-right:48px!important}.pb-5,.py-5{padding-bottom:48px!important}.pl-5,.px-5{padding-left:48px!important}.m-n1{margin:-4px!important}.mt-n1,.my-n1{margin-top:-4px!important}.mr-n1,.mx-n1{margin-right:-4px!important}.mb-n1,.my-n1{margin-bottom:-4px!important}.ml-n1,.mx-n1{margin-left:-4px!important}.m-n2{margin:-8px!important}.mt-n2,.my-n2{margin-top:-8px!important}.mr-n2,.mx-n2{margin-right:-8px!important}.mb-n2,.my-n2{margin-bottom:-8px!important}.ml-n2,.mx-n2{margin-left:-8px!important}.m-n3{margin:-16px!important}.mt-n3,.my-n3{margin-top:-16px!important}.mr-n3,.mx-n3{margin-right:-16px!important}.mb-n3,.my-n3{margin-bottom:-16px!important}.ml-n3,.mx-n3{margin-left:-16px!important}.m-n4{margin:-24px!important}.mt-n4,.my-n4{margin-top:-24px!important}.mr-n4,.mx-n4{margin-right:-24px!important}.mb-n4,.my-n4{margin-bottom:-24px!important}.ml-n4,.mx-n4{margin-left:-24px!important}.m-n5{margin:-48px!important}.mt-n5,.my-n5{margin-top:-48px!important}.mr-n5,.mx-n5{margin-right:-48px!important}.mb-n5,.my-n5{margin-bottom:-48px!important}.ml-n5,.mx-n5{margin-left:-48px!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:4px!important}.mt-sm-1,.my-sm-1{margin-top:4px!important}.mr-sm-1,.mx-sm-1{margin-right:4px!important}.mb-sm-1,.my-sm-1{margin-bottom:4px!important}.ml-sm-1,.mx-sm-1{margin-left:4px!important}.m-sm-2{margin:8px!important}.mt-sm-2,.my-sm-2{margin-top:8px!important}.mr-sm-2,.mx-sm-2{margin-right:8px!important}.mb-sm-2,.my-sm-2{margin-bottom:8px!important}.ml-sm-2,.mx-sm-2{margin-left:8px!important}.m-sm-3{margin:16px!important}.mt-sm-3,.my-sm-3{margin-top:16px!important}.mr-sm-3,.mx-sm-3{margin-right:16px!important}.mb-sm-3,.my-sm-3{margin-bottom:16px!important}.ml-sm-3,.mx-sm-3{margin-left:16px!important}.m-sm-4{margin:24px!important}.mt-sm-4,.my-sm-4{margin-top:24px!important}.mr-sm-4,.mx-sm-4{margin-right:24px!important}.mb-sm-4,.my-sm-4{margin-bottom:24px!important}.ml-sm-4,.mx-sm-4{margin-left:24px!important}.m-sm-5{margin:48px!important}.mt-sm-5,.my-sm-5{margin-top:48px!important}.mr-sm-5,.mx-sm-5{margin-right:48px!important}.mb-sm-5,.my-sm-5{margin-bottom:48px!important}.ml-sm-5,.mx-sm-5{margin-left:48px!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:4px!important}.pt-sm-1,.py-sm-1{padding-top:4px!important}.pr-sm-1,.px-sm-1{padding-right:4px!important}.pb-sm-1,.py-sm-1{padding-bottom:4px!important}.pl-sm-1,.px-sm-1{padding-left:4px!important}.p-sm-2{padding:8px!important}.pt-sm-2,.py-sm-2{padding-top:8px!important}.pr-sm-2,.px-sm-2{padding-right:8px!important}.pb-sm-2,.py-sm-2{padding-bottom:8px!important}.pl-sm-2,.px-sm-2{padding-left:8px!important}.p-sm-3{padding:16px!important}.pt-sm-3,.py-sm-3{padding-top:16px!important}.pr-sm-3,.px-sm-3{padding-right:16px!important}.pb-sm-3,.py-sm-3{padding-bottom:16px!important}.pl-sm-3,.px-sm-3{padding-left:16px!important}.p-sm-4{padding:24px!important}.pt-sm-4,.py-sm-4{padding-top:24px!important}.pr-sm-4,.px-sm-4{padding-right:24px!important}.pb-sm-4,.py-sm-4{padding-bottom:24px!important}.pl-sm-4,.px-sm-4{padding-left:24px!important}.p-sm-5{padding:48px!important}.pt-sm-5,.py-sm-5{padding-top:48px!important}.pr-sm-5,.px-sm-5{padding-right:48px!important}.pb-sm-5,.py-sm-5{padding-bottom:48px!important}.pl-sm-5,.px-sm-5{padding-left:48px!important}.m-sm-n1{margin:-4px!important}.mt-sm-n1,.my-sm-n1{margin-top:-4px!important}.mr-sm-n1,.mx-sm-n1{margin-right:-4px!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-4px!important}.ml-sm-n1,.mx-sm-n1{margin-left:-4px!important}.m-sm-n2{margin:-8px!important}.mt-sm-n2,.my-sm-n2{margin-top:-8px!important}.mr-sm-n2,.mx-sm-n2{margin-right:-8px!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-8px!important}.ml-sm-n2,.mx-sm-n2{margin-left:-8px!important}.m-sm-n3{margin:-16px!important}.mt-sm-n3,.my-sm-n3{margin-top:-16px!important}.mr-sm-n3,.mx-sm-n3{margin-right:-16px!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-16px!important}.ml-sm-n3,.mx-sm-n3{margin-left:-16px!important}.m-sm-n4{margin:-24px!important}.mt-sm-n4,.my-sm-n4{margin-top:-24px!important}.mr-sm-n4,.mx-sm-n4{margin-right:-24px!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-24px!important}.ml-sm-n4,.mx-sm-n4{margin-left:-24px!important}.m-sm-n5{margin:-48px!important}.mt-sm-n5,.my-sm-n5{margin-top:-48px!important}.mr-sm-n5,.mx-sm-n5{margin-right:-48px!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-48px!important}.ml-sm-n5,.mx-sm-n5{margin-left:-48px!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:4px!important}.mt-md-1,.my-md-1{margin-top:4px!important}.mr-md-1,.mx-md-1{margin-right:4px!important}.mb-md-1,.my-md-1{margin-bottom:4px!important}.ml-md-1,.mx-md-1{margin-left:4px!important}.m-md-2{margin:8px!important}.mt-md-2,.my-md-2{margin-top:8px!important}.mr-md-2,.mx-md-2{margin-right:8px!important}.mb-md-2,.my-md-2{margin-bottom:8px!important}.ml-md-2,.mx-md-2{margin-left:8px!important}.m-md-3{margin:16px!important}.mt-md-3,.my-md-3{margin-top:16px!important}.mr-md-3,.mx-md-3{margin-right:16px!important}.mb-md-3,.my-md-3{margin-bottom:16px!important}.ml-md-3,.mx-md-3{margin-left:16px!important}.m-md-4{margin:24px!important}.mt-md-4,.my-md-4{margin-top:24px!important}.mr-md-4,.mx-md-4{margin-right:24px!important}.mb-md-4,.my-md-4{margin-bottom:24px!important}.ml-md-4,.mx-md-4{margin-left:24px!important}.m-md-5{margin:48px!important}.mt-md-5,.my-md-5{margin-top:48px!important}.mr-md-5,.mx-md-5{margin-right:48px!important}.mb-md-5,.my-md-5{margin-bottom:48px!important}.ml-md-5,.mx-md-5{margin-left:48px!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:4px!important}.pt-md-1,.py-md-1{padding-top:4px!important}.pr-md-1,.px-md-1{padding-right:4px!important}.pb-md-1,.py-md-1{padding-bottom:4px!important}.pl-md-1,.px-md-1{padding-left:4px!important}.p-md-2{padding:8px!important}.pt-md-2,.py-md-2{padding-top:8px!important}.pr-md-2,.px-md-2{padding-right:8px!important}.pb-md-2,.py-md-2{padding-bottom:8px!important}.pl-md-2,.px-md-2{padding-left:8px!important}.p-md-3{padding:16px!important}.pt-md-3,.py-md-3{padding-top:16px!important}.pr-md-3,.px-md-3{padding-right:16px!important}.pb-md-3,.py-md-3{padding-bottom:16px!important}.pl-md-3,.px-md-3{padding-left:16px!important}.p-md-4{padding:24px!important}.pt-md-4,.py-md-4{padding-top:24px!important}.pr-md-4,.px-md-4{padding-right:24px!important}.pb-md-4,.py-md-4{padding-bottom:24px!important}.pl-md-4,.px-md-4{padding-left:24px!important}.p-md-5{padding:48px!important}.pt-md-5,.py-md-5{padding-top:48px!important}.pr-md-5,.px-md-5{padding-right:48px!important}.pb-md-5,.py-md-5{padding-bottom:48px!important}.pl-md-5,.px-md-5{padding-left:48px!important}.m-md-n1{margin:-4px!important}.mt-md-n1,.my-md-n1{margin-top:-4px!important}.mr-md-n1,.mx-md-n1{margin-right:-4px!important}.mb-md-n1,.my-md-n1{margin-bottom:-4px!important}.ml-md-n1,.mx-md-n1{margin-left:-4px!important}.m-md-n2{margin:-8px!important}.mt-md-n2,.my-md-n2{margin-top:-8px!important}.mr-md-n2,.mx-md-n2{margin-right:-8px!important}.mb-md-n2,.my-md-n2{margin-bottom:-8px!important}.ml-md-n2,.mx-md-n2{margin-left:-8px!important}.m-md-n3{margin:-16px!important}.mt-md-n3,.my-md-n3{margin-top:-16px!important}.mr-md-n3,.mx-md-n3{margin-right:-16px!important}.mb-md-n3,.my-md-n3{margin-bottom:-16px!important}.ml-md-n3,.mx-md-n3{margin-left:-16px!important}.m-md-n4{margin:-24px!important}.mt-md-n4,.my-md-n4{margin-top:-24px!important}.mr-md-n4,.mx-md-n4{margin-right:-24px!important}.mb-md-n4,.my-md-n4{margin-bottom:-24px!important}.ml-md-n4,.mx-md-n4{margin-left:-24px!important}.m-md-n5{margin:-48px!important}.mt-md-n5,.my-md-n5{margin-top:-48px!important}.mr-md-n5,.mx-md-n5{margin-right:-48px!important}.mb-md-n5,.my-md-n5{margin-bottom:-48px!important}.ml-md-n5,.mx-md-n5{margin-left:-48px!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:4px!important}.mt-lg-1,.my-lg-1{margin-top:4px!important}.mr-lg-1,.mx-lg-1{margin-right:4px!important}.mb-lg-1,.my-lg-1{margin-bottom:4px!important}.ml-lg-1,.mx-lg-1{margin-left:4px!important}.m-lg-2{margin:8px!important}.mt-lg-2,.my-lg-2{margin-top:8px!important}.mr-lg-2,.mx-lg-2{margin-right:8px!important}.mb-lg-2,.my-lg-2{margin-bottom:8px!important}.ml-lg-2,.mx-lg-2{margin-left:8px!important}.m-lg-3{margin:16px!important}.mt-lg-3,.my-lg-3{margin-top:16px!important}.mr-lg-3,.mx-lg-3{margin-right:16px!important}.mb-lg-3,.my-lg-3{margin-bottom:16px!important}.ml-lg-3,.mx-lg-3{margin-left:16px!important}.m-lg-4{margin:24px!important}.mt-lg-4,.my-lg-4{margin-top:24px!important}.mr-lg-4,.mx-lg-4{margin-right:24px!important}.mb-lg-4,.my-lg-4{margin-bottom:24px!important}.ml-lg-4,.mx-lg-4{margin-left:24px!important}.m-lg-5{margin:48px!important}.mt-lg-5,.my-lg-5{margin-top:48px!important}.mr-lg-5,.mx-lg-5{margin-right:48px!important}.mb-lg-5,.my-lg-5{margin-bottom:48px!important}.ml-lg-5,.mx-lg-5{margin-left:48px!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:4px!important}.pt-lg-1,.py-lg-1{padding-top:4px!important}.pr-lg-1,.px-lg-1{padding-right:4px!important}.pb-lg-1,.py-lg-1{padding-bottom:4px!important}.pl-lg-1,.px-lg-1{padding-left:4px!important}.p-lg-2{padding:8px!important}.pt-lg-2,.py-lg-2{padding-top:8px!important}.pr-lg-2,.px-lg-2{padding-right:8px!important}.pb-lg-2,.py-lg-2{padding-bottom:8px!important}.pl-lg-2,.px-lg-2{padding-left:8px!important}.p-lg-3{padding:16px!important}.pt-lg-3,.py-lg-3{padding-top:16px!important}.pr-lg-3,.px-lg-3{padding-right:16px!important}.pb-lg-3,.py-lg-3{padding-bottom:16px!important}.pl-lg-3,.px-lg-3{padding-left:16px!important}.p-lg-4{padding:24px!important}.pt-lg-4,.py-lg-4{padding-top:24px!important}.pr-lg-4,.px-lg-4{padding-right:24px!important}.pb-lg-4,.py-lg-4{padding-bottom:24px!important}.pl-lg-4,.px-lg-4{padding-left:24px!important}.p-lg-5{padding:48px!important}.pt-lg-5,.py-lg-5{padding-top:48px!important}.pr-lg-5,.px-lg-5{padding-right:48px!important}.pb-lg-5,.py-lg-5{padding-bottom:48px!important}.pl-lg-5,.px-lg-5{padding-left:48px!important}.m-lg-n1{margin:-4px!important}.mt-lg-n1,.my-lg-n1{margin-top:-4px!important}.mr-lg-n1,.mx-lg-n1{margin-right:-4px!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-4px!important}.ml-lg-n1,.mx-lg-n1{margin-left:-4px!important}.m-lg-n2{margin:-8px!important}.mt-lg-n2,.my-lg-n2{margin-top:-8px!important}.mr-lg-n2,.mx-lg-n2{margin-right:-8px!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-8px!important}.ml-lg-n2,.mx-lg-n2{margin-left:-8px!important}.m-lg-n3{margin:-16px!important}.mt-lg-n3,.my-lg-n3{margin-top:-16px!important}.mr-lg-n3,.mx-lg-n3{margin-right:-16px!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-16px!important}.ml-lg-n3,.mx-lg-n3{margin-left:-16px!important}.m-lg-n4{margin:-24px!important}.mt-lg-n4,.my-lg-n4{margin-top:-24px!important}.mr-lg-n4,.mx-lg-n4{margin-right:-24px!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-24px!important}.ml-lg-n4,.mx-lg-n4{margin-left:-24px!important}.m-lg-n5{margin:-48px!important}.mt-lg-n5,.my-lg-n5{margin-top:-48px!important}.mr-lg-n5,.mx-lg-n5{margin-right:-48px!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-48px!important}.ml-lg-n5,.mx-lg-n5{margin-left:-48px!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:4px!important}.mt-xl-1,.my-xl-1{margin-top:4px!important}.mr-xl-1,.mx-xl-1{margin-right:4px!important}.mb-xl-1,.my-xl-1{margin-bottom:4px!important}.ml-xl-1,.mx-xl-1{margin-left:4px!important}.m-xl-2{margin:8px!important}.mt-xl-2,.my-xl-2{margin-top:8px!important}.mr-xl-2,.mx-xl-2{margin-right:8px!important}.mb-xl-2,.my-xl-2{margin-bottom:8px!important}.ml-xl-2,.mx-xl-2{margin-left:8px!important}.m-xl-3{margin:16px!important}.mt-xl-3,.my-xl-3{margin-top:16px!important}.mr-xl-3,.mx-xl-3{margin-right:16px!important}.mb-xl-3,.my-xl-3{margin-bottom:16px!important}.ml-xl-3,.mx-xl-3{margin-left:16px!important}.m-xl-4{margin:24px!important}.mt-xl-4,.my-xl-4{margin-top:24px!important}.mr-xl-4,.mx-xl-4{margin-right:24px!important}.mb-xl-4,.my-xl-4{margin-bottom:24px!important}.ml-xl-4,.mx-xl-4{margin-left:24px!important}.m-xl-5{margin:48px!important}.mt-xl-5,.my-xl-5{margin-top:48px!important}.mr-xl-5,.mx-xl-5{margin-right:48px!important}.mb-xl-5,.my-xl-5{margin-bottom:48px!important}.ml-xl-5,.mx-xl-5{margin-left:48px!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:4px!important}.pt-xl-1,.py-xl-1{padding-top:4px!important}.pr-xl-1,.px-xl-1{padding-right:4px!important}.pb-xl-1,.py-xl-1{padding-bottom:4px!important}.pl-xl-1,.px-xl-1{padding-left:4px!important}.p-xl-2{padding:8px!important}.pt-xl-2,.py-xl-2{padding-top:8px!important}.pr-xl-2,.px-xl-2{padding-right:8px!important}.pb-xl-2,.py-xl-2{padding-bottom:8px!important}.pl-xl-2,.px-xl-2{padding-left:8px!important}.p-xl-3{padding:16px!important}.pt-xl-3,.py-xl-3{padding-top:16px!important}.pr-xl-3,.px-xl-3{padding-right:16px!important}.pb-xl-3,.py-xl-3{padding-bottom:16px!important}.pl-xl-3,.px-xl-3{padding-left:16px!important}.p-xl-4{padding:24px!important}.pt-xl-4,.py-xl-4{padding-top:24px!important}.pr-xl-4,.px-xl-4{padding-right:24px!important}.pb-xl-4,.py-xl-4{padding-bottom:24px!important}.pl-xl-4,.px-xl-4{padding-left:24px!important}.p-xl-5{padding:48px!important}.pt-xl-5,.py-xl-5{padding-top:48px!important}.pr-xl-5,.px-xl-5{padding-right:48px!important}.pb-xl-5,.py-xl-5{padding-bottom:48px!important}.pl-xl-5,.px-xl-5{padding-left:48px!important}.m-xl-n1{margin:-4px!important}.mt-xl-n1,.my-xl-n1{margin-top:-4px!important}.mr-xl-n1,.mx-xl-n1{margin-right:-4px!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-4px!important}.ml-xl-n1,.mx-xl-n1{margin-left:-4px!important}.m-xl-n2{margin:-8px!important}.mt-xl-n2,.my-xl-n2{margin-top:-8px!important}.mr-xl-n2,.mx-xl-n2{margin-right:-8px!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-8px!important}.ml-xl-n2,.mx-xl-n2{margin-left:-8px!important}.m-xl-n3{margin:-16px!important}.mt-xl-n3,.my-xl-n3{margin-top:-16px!important}.mr-xl-n3,.mx-xl-n3{margin-right:-16px!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-16px!important}.ml-xl-n3,.mx-xl-n3{margin-left:-16px!important}.m-xl-n4{margin:-24px!important}.mt-xl-n4,.my-xl-n4{margin-top:-24px!important}.mr-xl-n4,.mx-xl-n4{margin-right:-24px!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-24px!important}.ml-xl-n4,.mx-xl-n4{margin-left:-24px!important}.m-xl-n5{margin:-48px!important}.mt-xl-n5,.my-xl-n5{margin-top:-48px!important}.mr-xl-n5,.mx-xl-n5{margin-right:-48px!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-48px!important}.ml-xl-n5,.mx-xl-n5{margin-left:-48px!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:Roboto Mono,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!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-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#004d99!important}a.text-primary:focus,a.text-primary:hover{color:#004080!important}.text-secondary{color:#3d4955!important}a.text-secondary:focus,a.text-secondary:hover{color:#323c46!important}.text-success{color:#008053!important}a.text-success:focus,a.text-success:hover{color:#006642!important}.text-info{color:#717273!important}a.text-info:focus,a.text-info:hover{color:#646566!important}.text-warning{color:#a36200!important}a.text-warning:focus,a.text-warning:hover{color:#995c00!important}.text-danger{color:#e00929!important}a.text-danger:focus,a.text-danger:hover{color:#c70825!important}.text-light{color:#bdb4d8!important}a.text-light:focus,a.text-light:hover{color:#aea3d0!important}.text-dark{color:#050b12!important}a.text-dark:focus,a.text-dark:hover{color:#000!important}.text-100{color:#bbbdc1!important}a.text-100:focus,a.text-100:hover{color:#aeb0b5!important}.text-200{color:#a3a4a7!important}a.text-200:focus,a.text-200:hover{color:#96979a!important}.text-300{color:#8a8b8d!important}a.text-300:focus,a.text-300:hover{color:#7d7e80!important}.text-400{color:#717273!important}a.text-400:focus,a.text-400:hover{color:#646566!important}.text-500{color:#585859!important}a.text-500:focus,a.text-500:hover{color:#4b4c4c!important}.text-600{color:#3f3f40!important}a.text-600:focus,a.text-600:hover{color:#323233!important}.text-700{color:#262626!important}a.text-700:focus,a.text-700:hover{color:#191919!important}.text-800{color:#0c0c0d!important}.text-900,a.text-800:focus,a.text-800:hover,a.text-900:focus,a.text-900:hover{color:#000!important}.text-body{color:#19191a!important}.text-muted{color:#5a768a!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}body,html{font-size:16px;line-height:1.5}@media (min-width:576px){body,html{font-size:18px;line-height:1.555}}.h1,h1{letter-spacing:-1px}@media (min-width:576px){.h1,h1{font-size:2.666rem;letter-spacing:-1.3px;line-height:1.25}}.h2,h2{line-height:1.25}@media (min-width:576px){.h2,h2{font-size:2.222rem;line-height:1.2;letter-spacing:-2px}}.h3,h3{line-height:1.1428}@media (min-width:576px){.h3,h3{font-size:1.777rem;line-height:1.25}}.h4,h4{line-height:1.1666}@media (min-width:576px){.h4,h4{font-size:1.555rem;line-height:1.428;font-weight:600}}.h5,h5{font-weight:400}@media (min-width:576px){.h5,h5{font-size:1.333rem}}.h6,h6{font-weight:600;line-height:1.5}.display-1{font-size:49.776px;font-size:3.111rem}@media (min-width:576px){.display-1{font-size:3.111rem;line-height:1.428}}.blockquote,blockquote{font-family:Lora,Georgia,serif;margin:1.5rem 0}caption{font-size:12.432px;font-size:.777rem;line-height:1.4285}b,strong{font-weight:600}.small,small{font-size:15px;font-size:.9375rem;font-weight:400}@media (min-width:576px){.small,small{font-size:.8888rem}}.x-small{font-size:14px;font-size:.875rem;font-weight:400}@media (min-width:576px){.x-small{font-size:.7777rem}}.blockquote-footer{color:#656566}.bg-dark .blockquote-footer{color:#979899}.row.variable-gutters{margin-right:-6px;margin-left:-6px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:6px;padding-left:6px}@media (min-width:576px){.row.variable-gutters{margin-right:-6px;margin-left:-6px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:6px;padding-left:6px}}@media (min-width:768px){.row.variable-gutters{margin-right:-10px;margin-left:-10px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:10px;padding-left:10px}}@media (min-width:992px){.row.variable-gutters{margin-right:-10px;margin-left:-10px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:10px;padding-left:10px}}@media (min-width:1200px){.row.variable-gutters{margin-right:-14px;margin-left:-14px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:14px;padding-left:14px}}.table td,.table th{text-align:left;border-bottom:1px solid #d6dce3;border-top:none}.breadcrumb-container .breadcrumb{padding:24px;border-radius:0}.breadcrumb-container .breadcrumb .breadcrumb-item{padding-left:0}.breadcrumb-container .breadcrumb .breadcrumb-item+.breadcrumb-item:before{display:none}.breadcrumb-container .breadcrumb .breadcrumb-item i{padding-right:.5em}.breadcrumb-container .breadcrumb .breadcrumb-item a{color:#5b6f82;font-weight:600}.breadcrumb-container .breadcrumb .breadcrumb-item.active a{font-weight:400;pointer-events:none}.breadcrumb-container .breadcrumb .breadcrumb-item span.separator{display:inline-block;font-weight:600;padding:0 .5em}.breadcrumb-container .breadcrumb.dark{background:#435a70}.breadcrumb-container .breadcrumb.dark .breadcrumb-item a,.breadcrumb-container .breadcrumb.dark .breadcrumb-item span.separator{color:#fff}.breadcrumb-container .breadcrumb.dark .breadcrumb-item i{color:#0bd9d2}.modal-content,.modal-header{border-radius:0}[data-toggle=collapse] .collapse-icon:before{content:"";display:inline-block;width:0;height:0;border-top:.5rem solid;border-right:.5rem solid transparent;border-bottom:0;border-left:.5rem solid transparent;vertical-align:3px;vertical-align:.1875rem}[data-toggle=collapse].collapsed .collapse-icon:before{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.collapse-div{border-bottom:1px solid #e3e4e6}.collapse-div .collapse-div{border:1px solid #e3e4e6;border-top:0}.collapse-header{position:relative}.collapse-header [data-toggle=collapse]{width:100%;text-align:left;border:0;background-color:transparent;border-top:1px solid #e3e4e6;padding:14px 24px;cursor:pointer;color:#5c6f82;font-weight:600}.collapse-header [data-toggle=collapse][aria-expanded=false]{color:#0073e6}.collapse-header [data-toggle=collapse][aria-expanded=false]:after{content:"\e818"}.collapse-header [data-toggle=collapse][aria-expanded=true]:before{height:2px;width:56px;border-radius:2px;background-color:#0073e6;position:absolute;top:0;display:block;content:"";left:20px}.collapse-header [data-toggle=collapse][aria-expanded=false]:hover:after,.collapse-header [data-toggle=collapse][aria-expanded=true]:hover:after{text-decoration:none}.collapse-header [data-toggle=collapse]:after{content:"\e810";font-family:italia-icon-font;font-style:normal;font-weight:400;float:right;text-decoration:inherit;width:1em;margin-right:.2em;margin-top:5px;text-align:center;font-variant:normal;text-transform:none;line-height:1em}.collapse-header [data-toggle=collapse]:hover{background-color:#e6ecf2;text-decoration:underline}.collapse-header [data-toggle=collapse]:active{background-color:#0073e6;color:#fff;border-color:#0073e6}.collapse-body{padding:12px 24px 42px}.collapse-body .collapse-header button[aria-expanded=true]:before{height:0;width:0}.carousel{background-color:#444e57;padding:3.5em 3em 3em}.carousel-control-next,.carousel-control-prev{top:1em;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.carousel-control-prev{left:auto;right:6em}.carousel-control-next{right:3em}.carousel-caption{position:static;padding-bottom:0}.carousel-indicators li{background-color:rgba(101,220,223,.5)}.carousel-indicators .active{background-color:#5c6f82}.list-group-item{padding:1rem}.list-group-item.disabled,.list-group-item:disabled{cursor:default}.list-group-item-action:focus,.list-group-item-action:hover{text-decoration:underline;background-color:#d9e6f2}.list-group-item-action.disabled:focus,.list-group-item-action.disabled:hover,.list-group-item-action:disabled:focus,.list-group-item-action:disabled:hover{text-decoration:none;background-color:transparent;border-top-color:transparent}.list-group-item.active:focus,.list-group-item.active:hover{background-color:#0073e6}.alert{position:relative;margin-bottom:1rem;border:1px solid #b1b1b3;padding:1rem 1rem 1rem 4em}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3.5rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.8rem 1rem;color:inherit}.alert-success{border-left:8px solid #00cc85}.alert-info,.alert-success{background-position:1em .8em;background-repeat:no-repeat}.alert-info{border-left:8px solid #979899}.alert-warning{border-left:8px solid #f90}.alert-danger,.alert-warning{background-position:1em .8em;background-repeat:no-repeat}.alert-danger{border-left:8px solid #f73e5a;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M16 1.6C24 1.6 30.4 8 30.4 16S24 30.4 16 30.4 1.6 24 1.6 16 8 1.6 16 1.6zM16 0C7.2 0 0 7.2 0 16s7.2 16 16 16 16-7.2 16-16S24.8 0 16 0z'/%3E%3Cpath d='M14.4 24c0-.96.64-1.6 1.6-1.6s1.6.64 1.6 1.6c0 .96-.64 1.6-1.6 1.6s-1.6-.64-1.6-1.6zm.64-3.2l-.32-14.4h2.56l-.32 14.4z'/%3E%3C/svg%3E")}.alert-warning{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M14.333 26c0-1 .667-1.667 1.667-1.667S17.667 25 17.667 26 17 27.667 16 27.667 14.333 27 14.333 26zM15 22.667l-.333-15h2.667l-.333 15z'/%3E%3Cpath d='M16 2.667c1 0 2 .5 2.5 1.333l10.333 20.833c.5.833.5 2 0 2.833s-1.5 1.5-2.5 1.5H5.666c-1 0-2-.5-2.5-1.5-.5-.833-.5-2 0-2.833L13.499 4c.5-.833 1.5-1.333 2.5-1.333zM16 1c-1.5 0-3 .833-4 2.333L1.667 24.166c-1.667 3 .5 6.833 4 6.833h20.667c3.5 0 5.667-3.833 4-6.833L20.001 3.333c-1-1.667-2.5-2.333-4-2.333z'/%3E%3C/svg%3E")}.alert-success{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M32 6.682l-2.824-2.635-18.447 18.635-8.094-8.094L0 17.412l8.094 7.906h-.188l2.824 2.635 2.635-2.635z'/%3E%3C/svg%3E")}.alert-info{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M16 1.6C24 1.6 30.4 8 30.4 16S24 30.4 16 30.4 1.6 24 1.6 16 8.16 1.6 16 1.6zM16 0C7.2 0 0 7.2 0 16s7.2 16 16 16 16-7.2 16-16S24.8 0 16 0z'/%3E%3Cpath d='M14.72 9.76V6.72h2.88v3.04h-2.88zm0 15.84V12h2.88v13.6h-2.88z'/%3E%3C/svg%3E")}.btn{padding:12px 24px;font-size:16px;white-space:normal}.btn-group-lg>.btn,.btn-group-sm>.btn,.btn-lg,.btn-sm,.btn-xs{border-radius:4px;line-height:1.5}.btn-xs{padding:8px;font-size:14px;line-height:1.428}.btn-group-sm>.btn,.btn-sm{padding:10px 20px;font-size:14px;line-height:1.428}.btn-group-lg>.btn,.btn-lg{padding:14px 28px;font-size:18px;line-height:1.556}.btn-block{border-radius:0}.btn-primary.disabled,.btn-primary:disabled{color:#bfc2c9;background-color:#e6e9f2;border-color:#dfe4f2}.btn-outline-secondary{background:#fcfdff;-webkit-box-shadow:inset 0 0 0 1px #e6e9f2;box-shadow:inset 0 0 0 1px #e6e9f2}.btn-outline-secondary:hover{-webkit-box-shadow:inset 0 0 0 1px #c9cedc;box-shadow:inset 0 0 0 1px #c9cedc}.bg-dark .btn-link{color:#fff}.bg-dark .btn-primary{color:#19191a;background-color:#fff;border-color:#0073e6;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);color:#0073e6}.bg-dark .btn-primary:hover{color:#19191a;background-color:#fff;border-color:#0059b3}.bg-dark .btn-primary.focus,.bg-dark .btn-primary:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.5)}.bg-dark .btn-primary.disabled,.bg-dark .btn-primary:disabled{color:#19191a;background-color:#fff;border-color:#0073e6}.bg-dark .btn-primary:not(:disabled):not(.disabled).active,.bg-dark .btn-primary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-primary.dropdown-toggle{color:#19191a;background-color:#fff;border-color:#0053a6}.bg-dark .btn-primary:not(:disabled):not(.disabled).active:focus,.bg-dark .btn-primary:not(:disabled):not(.disabled):active:focus,.show>.bg-dark .btn-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5)}.bg-dark .btn-primary.disabled,.bg-dark .btn-primary:disabled,.bg-dark .btn-primary:hover{color:#0059b3}.bg-dark .btn-outline-primary{color:#fff;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;-webkit-box-shadow:inset 0 0 0 2px #fff;box-shadow:inset 0 0 0 2px #fff}.bg-dark .btn-outline-primary:hover{color:#e6e6e6;-webkit-box-shadow:inset 0 0 0 1px #e6e6e6;box-shadow:inset 0 0 0 1px #e6e6e6}.bg-dark .btn-outline-primary.focus,.bg-dark .btn-outline-primary:focus{-webkit-box-shadow:inset 0 0 0 1px #e6e6e6,0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 0 0 1px #e6e6e6,0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-primary.disabled,.bg-dark .btn-outline-primary:disabled{color:#fff;background-color:transparent}.bg-dark .btn-outline-primary:not(:disabled):not(.disabled).active,.bg-dark .btn-outline-primary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-outline-primary.dropdown-toggle{color:#e6e6e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e6e6e6;box-shadow:inset 0 0 0 1px #e6e6e6}.bg-dark .btn-outline-primary:not(:disabled):not(.disabled).active:focus,.bg-dark .btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.bg-dark .btn-outline-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-primary:hover{-webkit-box-shadow:inset 0 0 0 2px #e6e6e6;box-shadow:inset 0 0 0 2px #e6e6e6}.bg-dark .btn-outline-primary.focus,.bg-dark .btn-outline-primary:focus{-webkit-box-shadow:inset 0 0 0 2px #fff,0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 0 0 2px #fff,0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-primary:not(:disabled):not(.disabled).active,.bg-dark .btn-outline-primary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-outline-primary.dropdown-toggle{-webkit-box-shadow:inset 0 0 0 2px #fff;box-shadow:inset 0 0 0 2px #fff}.bg-dark .btn-secondary{background-color:#0073e6;border-color:#fff;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);color:#fff}.bg-dark .btn-secondary:hover{color:#fff;background-color:#0d86ff;border-color:#e6e6e6}.bg-dark .btn-secondary.focus,.bg-dark .btn-secondary:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-secondary.disabled,.bg-dark .btn-secondary:disabled{color:#fff;background-color:#0073e6;border-color:#fff}.bg-dark .btn-secondary:not(:disabled):not(.disabled).active,.bg-dark .btn-secondary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-secondary.dropdown-toggle{color:#fff;background-color:#1a8cff;border-color:#dfdfdf}.bg-dark .btn-secondary:not(:disabled):not(.disabled).active:focus,.bg-dark .btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.bg-dark .btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-secondary{color:#fff;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;-webkit-box-shadow:none;box-shadow:none}.bg-dark .btn-outline-secondary:hover{color:#e6e6e6;-webkit-box-shadow:inset 0 0 0 1px #e6e6e6;box-shadow:inset 0 0 0 1px #e6e6e6}.bg-dark .btn-outline-secondary.focus,.bg-dark .btn-outline-secondary:focus{-webkit-box-shadow:inset 0 0 0 1px #e6e6e6,0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 0 0 1px #e6e6e6,0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-secondary.disabled,.bg-dark .btn-outline-secondary:disabled{color:#fff;background-color:transparent}.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled).active,.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-outline-secondary.dropdown-toggle{color:#e6e6e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e6e6e6;box-shadow:inset 0 0 0 1px #e6e6e6}.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.bg-dark .btn-outline-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-secondary:hover{-webkit-box-shadow:none;box-shadow:none}.bg-dark .btn-outline-secondary.focus,.bg-dark .btn-outline-secondary:focus{-webkit-box-shadow:0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled).active,.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-outline-secondary.dropdown-toggle{-webkit-box-shadow:none;box-shadow:none}.form-group{position:relative;margin-bottom:4px;padding:1.5rem 0 1rem}.form-group button,.form-group input,.form-group optgroup,.form-group select,.form-group textarea{color:#17324d}.form-group label{position:absolute;color:#5c6f82;font-weight:600;line-height:40px;line-height:2.5rem;-webkit-transition:.2s ease-out;transition:.2s ease-out;top:24px;top:1.5rem;font-size:16px;font-size:1rem;cursor:text;display:block;width:100%;padding:0 .75rem;z-index:6}.form-group small.form-text{position:absolute;margin:0;padding:0 .75rem;font-size:12.432px;font-size:.777rem}.form-group.active label{-webkit-transform:translateY(-75%);transform:translateY(-75%);font-size:12.432px;font-size:.777rem}.form-group.active .ico-prefix,.form-group.active label{color:#5c6f82}.form-row .form-group{padding-bottom:0}input[type=date],input[type=datetime-local],input[type=email],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],select,textarea{border:none;border-bottom:1px solid #5c6f82;border-radius:0;outline:0;height:40px;height:2.5rem;width:100%;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:all .3s;transition:all .3s;font-weight:700}select,textarea{border:1px solid #5c6f82}input[type=file]+label{background-color:transparent}.form-control-plaintext+label,.form-group input.form-control-file+label,.form-group label.active,.form-group select.form-control+label,.input-group+label,.input-group~label,:disabled .form-group label{-webkit-transform:translateY(-75%);transform:translateY(-75%);font-size:12.432px;font-size:.777rem;background:transparent}:disabled .form-group label{top:0}.form-group.active .form-file-name{padding-bottom:1.95rem}.form-control-plaintext{padding:.375rem .75rem;background-color:#fff}.form-control:active,.form-control:focus{-webkit-box-shadow:none!important;box-shadow:none!important}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{background-position:100%!important;background-repeat:no-repeat!important;background-size:45px 45%!important;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2300cc85' viewBox='0 0 192 512'%3E%3Cpath d='M435.848 83.466L172.804 346.51l-96.652-96.652c-4.686-4.686-12.284-4.686-16.971 0l-28.284 28.284c-4.686 4.686-4.686 12.284 0 16.971l133.421 133.421c4.686 4.686 12.284 4.686 16.971 0l299.813-299.813c4.686-4.686 4.686-12.284 0-16.971l-28.284-28.284c-4.686-4.686-12.284-4.686-16.97 0z'/%3E%3C/svg%3E")}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{background-position:100%!important;background-repeat:no-repeat!important;background-size:45px 45%!important;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f73e5a' viewBox='0 0 384 512'%3E%3Cpath d='M231.6 256l130.1-130.1c4.7-4.7 4.7-12.3 0-17l-22.6-22.6c-4.7-4.7-12.3-4.7-17 0L192 216.4 61.9 86.3c-4.7-4.7-12.3-4.7-17 0l-22.6 22.6c-4.7 4.7-4.7 12.3 0 17L152.4 256 22.3 386.1c-4.7 4.7-4.7 12.3 0 17l22.6 22.6c4.7 4.7 12.3 4.7 17 0L192 295.6l130.1 130.1c4.7 4.7 12.3 4.7 17 0l22.6-22.6c4.7-4.7 4.7-12.3 0-17L231.6 256z'/%3E%3C/svg%3E")}.custom-select.warning,.form-control.warning{background-position:100%!important;background-repeat:no-repeat!important;background-size:25px 45%!important;border-color:#f90;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f90' viewBox='0 0 192 512'%3E%3Cpath d='M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z'/%3E%3C/svg%3E")}.custom-select.is-valid~.warning-feedback,.form-control.is-valid~.warning-feedback{display:block}.warning-feedback{display:none;width:100%;margin-top:.25rem;font-size:12.432px;font-size:.777rem;color:#f90}.invalid-feedback,.valid-feedback,.warning-feedback{margin-left:.75rem}.form-file input[type=file]{filter:alpha(opacity=0);margin:0;max-width:100%;opacity:0}.form-file .form-file-name{border-bottom:1px solid rgba(0,0,0,.15);border-radius:0;color:#464a4c;left:0;overflow:hidden;padding:.5rem .6rem 2rem;max-height:32px;max-height:2rem;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:5}.form-file .form-file-name,.form-file .form-file-name:before{background-color:#fff;line-height:1.7;position:absolute;right:0;top:0}.form-file .form-file-name:before{bottom:-1px;color:#0073e6;content:"Sfoglia";display:block;height:40px;height:2.5rem;padding:.4rem 1rem 1.5rem;border:1px solid #0073e6;z-index:6;border-top-right-radius:4px}.input-group-text{background-color:#f8f8f8;border:0;border-radius:0!important;border-bottom:1px solid #555}.input-group-prepend{margin-right:0}.input-group-append{margin-left:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:0 1rem;border-radius:0}.ico-prefix{position:absolute;width:48px;width:3rem;font-size:28.8px;font-size:1.8rem;z-index:10;text-align:center}.ico-prefix~.form-file-name{padding-left:3.5rem}.ico-prefix~.select-wrapper .select-dropdown,.ico-prefix~input,.ico-prefix~label,.ico-prefix~textarea{padding-left:3rem}.form-group.active .ico-prefix~label,.ico-prefix~.custom-select~label,.ico-prefix~label.active{padding-left:.75rem}.form-group .form-check,.form-row .form-check,.row .form-check{padding-left:0;margin-top:1rem}.form-check [type=checkbox],.form-check [type=radio]{position:absolute;left:-9999px}.form-check [type=checkbox]+label,.form-check [type=radio]+label{position:relative;padding-left:36px;cursor:pointer;display:inline-block;height:32px;line-height:32px;font-size:16px;font-size:1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.form-check [type=checkbox]+label:after,.form-check [type=checkbox]+label:before{content:"";left:0;position:absolute;-webkit-transition:.2s;transition:.2s;z-index:1;border-style:solid;border-width:2px}.form-check [type=checkbox]+label:before{top:0;width:17px;height:17px;border:1px solid #e6e9f2;border-radius:1px;margin:2px 5px;-webkit-transform:rotate(37deg);transform:rotate(37deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.form-check [type=checkbox]+label:after{border-radius:4px;height:20px;width:20px;margin:6px 5px;top:0}.form-check [type=checkbox]:checked+label:before{top:6px;left:1px;width:8px;height:13px;border-color:transparent #fff #fff transparent;border-style:solid;border-width:2px;-webkit-transform:rotate(40deg);transform:rotate(40deg);-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:.8}.form-check [type=checkbox]:checked+label:after{border-color:#0073e6;background-color:#0073e6;z-index:0}.form-check [type=checkbox]:not(:checked)+label:after{background-color:transparent;border-color:#5c6f82;z-index:0}.form-check [type=checkbox]:not(:checked)+label:before{width:0;height:0;border-color:transparent;left:6px;top:10px}.form-check [type=checkbox]:disabled+label{cursor:not-allowed}.form-check [type=checkbox]:disabled:not(:checked)+label:after{border-color:#e6e9f2;background-color:#fff}.form-check [type=checkbox]:disabled:checked+label:after{background-color:#e6e9f2;border-color:#e6e9f2}.form-check [type=radio]+label{-webkit-transition:.2s ease;transition:.2s ease}.form-check [type=radio]+label:after,.form-check [type=radio]+label:before{content:"";position:absolute;left:0;top:0;margin:5px;width:22px;height:22px;z-index:0;border-radius:50%;border-style:solid;border-width:2px;-webkit-transition:.2s ease;transition:.2s ease}.form-check [type=radio]:not(:checked)+label:after,.form-check [type=radio]:not(:checked)+label:before{border-color:#5c6f82}.form-check [type=radio]:not(:checked)+label:after{z-index:-1;-webkit-transform:scale(0);transform:scale(0)}.form-check [type=radio]:checked+label:after{border-color:#0073e6;background-color:#0073e6;z-index:0;-webkit-transform:scale(.64);transform:scale(.64)}.form-check [type=radio]:checked+label:before{border-color:#0073e6}.form-check [type=radio]:disabled+label{cursor:not-allowed}.form-check [type=radio]:disabled:not(:checked)+label:after,.form-check [type=radio]:disabled:not(:checked)+label:before{border-color:#e6e9f2}.form-check [type=radio]:disabled:checked+label:after{border-color:#e6e9f2;background-color:#e6e9f2}.form-check [type=radio]:disabled:checked+label:before{border-color:#e6e9f2}.form-check.form-check-group{padding:0 0 8px;margin-bottom:16px;-webkit-box-shadow:inset 0 -1px 0 0 rgba(1,1,1,.1);box-shadow:inset 0 -1px 0 0 rgba(1,1,1,.1)}.form-check.form-check-group [type=checkbox]+label,.form-check.form-check-group [type=radio]+label{position:static;padding-left:8px;padding-right:52px}.form-check.form-check-group [type=checkbox]+label:after,.form-check.form-check-group [type=checkbox]+label:before,.form-check.form-check-group [type=radio]+label:after,.form-check.form-check-group [type=radio]+label:before{right:15px;left:auto}.form-check.form-check-group [type=checkbox]:checked+label:before{right:26px}.form-check.form-check-group [type=radio]:checked+label:before{right:15px}.form-check.form-check-group .form-text{opacity:.6;margin:0;padding-left:8px;padding-right:52px}.toggles,.toggles *{-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.toggles label{cursor:pointer;width:100%;margin:0 8px 8px;height:32px;line-height:32px;font-weight:700}.toggles label input[type=checkbox]{opacity:0;width:0;height:0}.toggles label input[type=checkbox]+.lever{content:"";position:relative;width:46px;height:16px;background-color:#e6e9f2;border-radius:10px;-webkit-transition:background .3s ease;transition:background .3s ease;vertical-align:middle;float:right;margin:8px 16px 0}.toggles label input[type=checkbox]+.lever:after,.toggles label input[type=checkbox]+.lever:before{content:"";position:absolute;display:inline-block;width:26px;height:26px;border-radius:50%;left:0;top:-5px;left:-3px;-webkit-transition:left .3s ease,background .1s ease,-webkit-transform .1s ease;transition:left .3s ease,background .1s ease,-webkit-transform .1s ease;transition:left .3s ease,background .1s ease,transform .1s ease;transition:left .3s ease,background .1s ease,transform .1s ease,-webkit-transform .1s ease}.toggles label input[type=checkbox]+.lever:before{background-color:rgba(0,115,230,.15)}.toggles label input[type=checkbox]+.lever:after{background-color:#5c6f82;background-size:10px 10px;background-repeat:no-repeat;background-position:50%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='10' height='10' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.364 4.95l3.535 3.535L8.485 9.9 4.95 6.364 1.414 9.899 0 8.485 3.536 4.95 0 1.414 1.414 0 4.95 3.536 8.485 0 9.9 1.414 6.364 4.95z' fill='%23FFF' fill-rule='evenodd' opacity='.8'/%3E%3C/svg%3E");border:2px solid #fff}.toggles label input[type=checkbox]:checked+.lever{background-color:#e6e9f2}.toggles label input[type=checkbox]:checked+.lever:after,.toggles label input[type=checkbox]:checked+.lever:before{left:23px}.toggles label input[type=checkbox]:checked+.lever:after{background-color:#0073e6;background-size:14px 14px;background-repeat:no-repeat;background-position:50%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='14' height='11' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.879 7.536l7.07-7.072 1.415 1.415-7.071 7.07-1.414 1.415L.636 6.121 2.05 4.707 4.88 7.536z' fill='%23FFF' fill-rule='evenodd' opacity='.5'/%3E%3C/svg%3E")}.toggles label input[type=checkbox][disabled]+.lever{cursor:default;background-color:#e6e9f2}.toggles label input[type=checkbox][disabled]+.lever:after,.toggles label input[type=checkbox][disabled]:checked+.lever:after{background-color:#e6e9f2}.select-wrapper{position:relative}.select-wrapper .search-wrap input{width:100%;border:none;border-bottom:1px solid #0073e6;font-size:14.4px;font-size:.9rem;padding:0 .5em}.select-wrapper .dropdown-menu{background-color:#fff;border-radius:0;-webkit-box-shadow:0 2px 4px 3px rgba(0,0,0,.1);box-shadow:0 2px 4px 3px rgba(0,0,0,.1);margin:0;display:none;min-width:100px;max-height:240px;overflow-y:auto;position:absolute;padding:.3rem;z-index:999;will-change:width,height;list-style-type:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.select-wrapper .dropdown-menu.show{display:block}.select-wrapper .dropdown-menu li{clear:both;color:#000;cursor:pointer;line-height:32px;width:100%;text-align:left;text-transform:none}.select-wrapper .dropdown-menu li.optgroup>span{color:#ccc;padding:0}.select-wrapper .dropdown-menu li:not(.disabled):focus,.select-wrapper .dropdown-menu li:not(.disabled):hover{background-color:#eee}.select-wrapper .dropdown-menu li.active>span:after{content:"";background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiB2aWV3Qm94PSIwIDAgNDQ4LjggNDQ4LjgiPjxwYXRoIGZpbGw9IiMwMDZERjAiIGQ9Ik0xNDIuOCAzMjMuODVMMzUuNyAyMTYuNzUgMCAyNTIuNDVsMTQyLjggMTQyLjggMzA2LTMwNi0zNS43LTM1Ljd6Ii8+PC9zdmc+");background-size:16px 16px;background-repeat:no-repeat;background-position:50%;float:right;display:block;height:32px;width:16px;opacity:.5}.select-wrapper .dropdown-menu li>a,.select-wrapper .dropdown-menu li>span{font-size:14px;color:#5c6f82;font-weight:600;display:block;padding:0 .5rem}.select-wrapper .dropdown-menu li>a.filtrable label,.select-wrapper .dropdown-menu li>a [type=checkbox],.select-wrapper .dropdown-menu li>span.filtrable label,.select-wrapper .dropdown-menu li>span [type=checkbox]{display:none}.select-wrapper .dropdown-menu li.disabled>span{cursor:unset;color:#ccc}.select-wrapper .dropdown-menu li>a>i{height:inherit;line-height:inherit}.select-wrapper .select-dropdown{color:#17324d;border-bottom:1px solid #5c6f82;position:relative;cursor:pointer;background-color:transparent;outline:0;width:100%;font-size:16px;font-size:1rem;margin:0 0 15px;display:block;line-height:24px;padding:12px 38px 12px 16px}.select-wrapper .select-dropdown:disabled{color:rgba(0,0,0,.3);border-bottom-color:rgba(0,0,0,.3);cursor:default}.select-wrapper .select-dropdown ul{list-style-type:none;padding:0}.select-wrapper .select-dropdown ul li.disabled,.select-wrapper .select-dropdown ul li.disabled>span,.select-wrapper .select-dropdown ul li.optgroup{color:rgba(0,0,0,.3);background-color:transparent!important;cursor:context-menu}.select-wrapper .select-dropdown ul li.optgroup{border-top:1px solid #eee}.select-wrapper .select-dropdown ul li.optgroup.selected>span{color:rgba(0,0,0,.7)}.select-wrapper .select-dropdown ul li.optgroup>span{color:rgba(0,0,0,.4)}.select-wrapper .caret{color:#757575;position:absolute;right:12px;line-height:16px;top:calc(50% - 8px)}.select-wrapper .caret .disabled{color:rgba(0,0,0,.46)}.select-wrapper.show .select-dropdown{color:#0073e6;border-bottom:1px solid #0073e6}.select-wrapper.show .caret{color:#0073e6}.select-wrapper+label{padding:0 .75rem!important;position:absolute;top:-18px;font-size:12.8px;font-size:.8rem}.select-wrapper select.custom-select{display:none!important}.select-wrapper select:disabled{color:rgba(0,0,0,.3)}.btn-eye{background-position:50%!important;background-repeat:no-repeat!important;width:28px;height:22px;position:absolute;right:8px;right:.5rem;top:36px;top:2.25rem;z-index:10;color:#5c6f82;cursor:pointer}.eye-on{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%235c6f82' viewBox='0 0 576 512'%3E%3Cpath d='M272.702 359.139c-80.483-9.011-136.212-86.886-116.93-167.042l116.93 167.042zM288 392c-102.556 0-192.092-54.701-240-136 21.755-36.917 52.1-68.342 88.344-91.658l-27.541-39.343C67.001 152.234 31.921 188.741 6.646 231.631a47.999 47.999 0 0 0 0 48.739C63.004 376.006 168.14 440 288 440a332.89 332.89 0 0 0 39.648-2.367l-32.021-45.744A284.16 284.16 0 0 1 288 392zm281.354-111.631c-33.232 56.394-83.421 101.742-143.554 129.492l48.116 68.74c3.801 5.429 2.48 12.912-2.949 16.712L450.23 509.83c-5.429 3.801-12.912 2.48-16.712-2.949L102.084 33.399c-3.801-5.429-2.48-12.912 2.949-16.712L125.77 2.17c5.429-3.801 12.912-2.48 16.712 2.949l55.526 79.325C226.612 76.343 256.808 72 288 72c119.86 0 224.996 63.994 281.354 159.631a48.002 48.002 0 0 1 0 48.738zM528 256c-44.157-74.933-123.677-127.27-216.162-135.007C302.042 131.078 296 144.83 296 160c0 30.928 25.072 56 56 56s56-25.072 56-56l-.001-.042c30.632 57.277 16.739 130.26-36.928 171.719l26.695 38.135C452.626 346.551 498.308 306.386 528 256z'/%3E%3C/svg%3E")}.eye-off{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%235c6f82' viewBox='0 0 576 512'%3E%3Cpath d='M569.354 231.631C512.97 135.949 407.81 72 288 72 168.14 72 63.004 135.994 6.646 231.631a47.999 47.999 0 0 0 0 48.739C63.031 376.051 168.19 440 288 440c119.86 0 224.996-63.994 281.354-159.631a47.997 47.997 0 0 0 0-48.738zM288 392c-102.556 0-192.091-54.701-240-136 44.157-74.933 123.677-127.27 216.162-135.007C273.958 131.078 280 144.83 280 160c0 30.928-25.072 56-56 56s-56-25.072-56-56l.001-.042C157.794 179.043 152 200.844 152 224c0 75.111 60.889 136 136 136s136-60.889 136-136c0-31.031-10.4-59.629-27.895-82.515C451.704 164.638 498.009 205.106 528 256c-47.908 81.299-137.444 136-240 136z'/%3E%3C/svg%3E")}.psw-wrapper{padding:0 .75rem}.psw-meter{height:3px;max-width:180px}.psw-meter .col-3{height:3px}.psw-percent,.psw-text{font-size:12px;font-size:.75rem;display:block;padding:.25rem 0;font-weight:500}.psw-percent{margin-right:5px}@-webkit-keyframes dropdownFadeIn{0%{opacity:0;margin-top:0}to{opacity:1;margin-top:16px}}@keyframes dropdownFadeIn{0%{opacity:0;margin-top:0}to{opacity:1;margin-top:16px}}@-webkit-keyframes dropdownFadeInTop{0%{opacity:0;margin-top:0}to{opacity:1;margin-top:-16px}}@keyframes dropdownFadeInTop{0%{opacity:0;margin-top:0}to{opacity:1;margin-top:-16px}}.btn-dropdown{color:#06c;padding:0 4px;background-color:transparent;font-size:16px;font-size:1rem;border-radius:0}.btn-dropdown:not(:disabled):not(.disabled):active{-webkit-box-shadow:none;box-shadow:none}.btn-dropdown:after{content:"";font-size:12.8px;font-size:.8rem;font-family:italia-icon-font;font-style:normal;font-weight:400;speak:none;border:none;display:inline-block;vertical-align:0;width:auto;height:auto;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.btn-dropdown[aria-expanded=true]:after{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.dropdown-menu{border-radius:0 0 4px 4px}.dropdown-menu.full-width{width:100%}.dropdown-menu.full-width .link-list li{display:inline-block;width:auto}.dropdown-menu.full-width .link-list li:focus,.dropdown-menu.full-width .link-list li:hover{background:none;text-decoration:underline}.dropdown-menu .link-list{margin-bottom:0}.dropdown-menu .link-list h3{line-height:2.3em;margin-bottom:0}.dropdown-menu:before{content:"";position:absolute;top:-6px;left:24px;width:18px;height:18px;border-radius:4px;background-color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.dropdown-menu[x-placement=top-start]{border-radius:4px 4px 0 0}.dropdown-menu[x-placement=top-start]:before{bottom:-6px;top:auto}.dropdown-menu.dark{background-color:#435a70}.dropdown-menu.dark .link-list-wrapper ul span.divider{background:#2e465e}.dropdown-menu.dark .link-list-wrapper ul li a:hover span,.dropdown-menu.dark .link-list-wrapper ul li a span,.dropdown-menu.dark .link-list-wrapper ul li h3,.dropdown-menu.dark .link-list-wrapper ul li i{color:#fff}.dropdown-menu.dark .link-list-wrapper ul li a:not(.active):not(.disabled):hover i{color:#4fe0dc}.dropdown-menu.dark .link-list-wrapper ul li a.disabled span{color:#adb2b8}.dropdown-menu.dark:before{background-color:#435a70}nav.pagination-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination-wrapper,nav.pagination-wrapper.pagination-total{-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}nav.pagination-wrapper.pagination-total{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination-wrapper.pagination-total ul{margin-bottom:.5rem}nav.pagination-wrapper.pagination-total p{font-size:14.222px;font-size:.8888888889rem;color:#5b6f82;margin-bottom:1rem;font-weight:600;text-align:center}nav.pagination-wrapper .form-group{margin-left:2.5rem;width:72px;width:4.5rem;margin-top:0}nav.pagination-wrapper .form-group label{font-size:14.222px;font-size:.8888888889rem;color:#9da2a6}nav.pagination-wrapper .form-group.active label{font-size:12.8px;font-size:.8rem}nav.pagination-wrapper .btn.dropdown-toggle{font-size:14.222px;font-size:.8888888889rem;color:#5b6f82;font-weight:600;padding:12px;height:40px;height:2.5rem;border:none;width:100%}nav.pagination-wrapper .btn.dropdown-toggle:after{color:#0073e6;margin-left:.5rem}.pagination{-ms-flex-wrap:wrap;flex-wrap:wrap}.pagination .page-item{margin-right:5px}.pagination .page-item.disabled a.page-link,.pagination .page-item.disabled a.page-link i[class^=it-]{color:#c2c7cc}.pagination .page-item span.page-link{pointer-events:none}.pagination .page-item .page-link{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:40px;height:2.5rem;min-width:40px;min-width:2.5rem;border-radius:4px;border:none;font-size:14.222px;font-size:.8888888889rem;font-weight:600;color:#5b6f82;background-color:transparent}.pagination .page-item .page-link[aria-current]{border:1px solid #06c;color:#06c;pointer-events:none}.pagination .page-item .page-link.text,.pagination .page-item .page-link i[class^=it-]{color:#0073e6}.pagination .page-item .page-link i[class^=it-]{font-size:11.2px;font-size:.7rem}.pagination .page-item .page-link span.d-inline-block{margin-right:.5rem}.pagination .page-item .page-link:hover{color:#06c;background-color:transparent}.pagination .page-item .page-link:hover i[class^=it-]{color:#06c}@media (min-width:576px){.pagination .page-item .page-link{height:2.6666666667rem;min-width:2.6666666667rem}nav.pagination-wrapper .btn.dropdown-toggle{height:2.6666666667rem}}@media (min-width:768px){nav.pagination-wrapper{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}nav.pagination-wrapper .dropdown{margin-left:2.6666666667rem}}@media (max-width:767.98px){.offcanvas-collapse{position:fixed;top:56px;bottom:0;left:1em;width:100%;overflow-y:auto;background-color:#323333;-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out;-webkit-transform:translateX(100%);transform:translateX(100%)}.offcanvas-collapse.open{-webkit-transform:translateX(-1rem);transform:translateX(-1rem)}}.nav-tabs{position:relative;background-color:#fff;border-bottom:0}.nav-tabs:after{content:"";position:absolute;z-index:-1;-webkit-box-shadow:0 0 2rem rgba(0,0,0,.15);box-shadow:0 0 2rem rgba(0,0,0,.15);bottom:0;left:10%;right:10%;width:80%;height:50%;border-radius:100%}.nav-tabs .nav-link{border-radius:0;font-weight:600;color:#5c6f82;border:none;border-bottom:2px solid transparent}.nav-tabs .nav-link.disabled{color:#b1b1b3;font-weight:400}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{border-bottom:2px solid #06c;color:#06c;cursor:inherit}.nav-tabs .nav-item{margin-bottom:0}.nav-tabs.nav-dark{background-color:#455b71}.nav-tabs.nav-dark .nav-link{color:#c7d1d0}.nav-tabs.nav-dark .nav-item.show .nav-link,.nav-tabs.nav-dark .nav-link.active{background-color:#455b71;color:#00fff7;border-bottom:2px solid #00fff7}.it-ico-sm{font-size:28px;font-size:1.75rem}.it-ico{font-size:20px;font-size:1.25rem}.it-ico-lg{font-size:24px;font-size:1.5rem}.cookiebar{bottom:0;left:0;right:0;display:none;position:fixed;width:100%;z-index:1100}.cookiebar.cookiebar-top{bottom:auto;top:0}.cookiebar.show{display:block}.hero{padding:1rem;margin-bottom:1rem;background-color:#cacacc;border-radius:0}@media (min-width:576px){.hero{padding:1rem}}.hero .hero-heading{font-size:32px;font-size:2rem;font-weight:700;color:#00264d;margin-bottom:.8rem}.hero-fluid{padding-right:0;padding-left:0;border-radius:0}.forward{display:block;text-align:center;font-size:48px;font-size:3rem;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.forward:hover{text-decoration:none}.return-to-top{position:fixed;bottom:16px;right:16px;background:#0073e6;background:rgba(0,115,230,.7);width:48px;height:48px;display:block;text-decoration:none;border-radius:50%;display:none;text-align:center;z-index:1}.return-to-top,.return-to-top i{-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.return-to-top i{color:#fff;margin:0;position:relative;top:8px;font-size:20px}.return-to-top i:before{margin:0}.return-to-top:hover{background:rgba(0,115,230,.9);text-decoration:none}.return-to-top:hover i{color:#fff;top:4px}.autocomplete-clear{visibility:hidden;position:absolute;z-index:2;right:4px;right:.25rem;top:8px;top:.5rem;background:transparent;border:none;cursor:pointer}.autocomplete-clear svg{fill:#a6a6a6}.autocomplete-wrap{position:absolute;left:0;right:0;background:#fff;-webkit-box-shadow:0 2px 5px rgba(0,0,0,.25);box-shadow:0 2px 5px rgba(0,0,0,.25);z-index:100;max-height:240px;overflow-y:auto;padding-left:0;list-style-type:none}.autocomplete-wrap li{cursor:pointer;padding:12px 16px;font-size:14px;font-size:.875rem}.autocomplete-wrap li:hover{background:#eee}.link-list-wrapper ul{padding:0;list-style-type:none}.link-list-wrapper ul.link-sublist{padding-left:24px}.link-list-wrapper ul li a{font-size:.889em;line-height:2.3em;display:block;padding:0 24px;position:relative}.link-list-wrapper ul li a:hover:not(.disabled){text-decoration:none}.link-list-wrapper ul li a:hover:not(.disabled) span{color:#06c;text-decoration:underline}.link-list-wrapper ul li a:hover:not(.disabled) p{color:#06c;text-decoration:none}.link-list-wrapper ul li a.disabled:hover{text-decoration:none}.link-list-wrapper ul li a.medium{font-weight:600}.link-list-wrapper ul li a span{color:#06c;display:block;margin-right:24px}.link-list-wrapper ul li a.right-icon i.right{position:absolute;top:0;right:24px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.link-list-wrapper ul li a.right-icon i.right.secondary{color:#9da2a6}.link-list-wrapper ul li a.right-icon[aria-expanded=true] i.right{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.link-list-wrapper ul li a.active span{color:#17324d;text-decoration:underline}.link-list-wrapper ul li a.disabled{cursor:not-allowed}.link-list-wrapper ul li a.disabled.left-icon i,.link-list-wrapper ul li a.disabled.left-icon i.secondary,.link-list-wrapper ul li a.disabled.right-icon i,.link-list-wrapper ul li a.disabled.right-icon i.secondary,.link-list-wrapper ul li a.disabled span{color:#adb2b8}.link-list-wrapper ul li a.left-icon{display:-webkit-box;display:-ms-flexbox;display:flex}.link-list-wrapper ul li a.left-icon i.left{margin-right:8px}.link-list-wrapper ul li a.large{font-size:1em}.link-list-wrapper ul li a p{font-size:.778em;line-height:normal;color:#5b6f82}.link-list-wrapper ul li a.avatar{display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:8px}.link-list-wrapper ul li a.avatar .avatar{display:block;border-radius:50px;margin-right:8px}.link-list-wrapper ul li h3{font-size:1em;color:#17324d;padding:0 24px}.link-list-wrapper ul li h3 a{line-height:inherit;font-size:1em;padding:0}.link-list-wrapper ul .divider{display:block;height:1px;background:#ebeced;margin:8px 0}.link-list-wrapper ul .toggles label{padding:0 24px;font-size:.889em;line-height:2.3em;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;height:auto;font-weight:inherit;margin:0}.link-list-wrapper ul .toggles input[type=checkbox]+.lever{margin:8px 0 0}.link-list-wrapper ul .form-check.form-check-group{padding:0 24px;-webkit-box-shadow:none;box-shadow:none}.link-list-wrapper ul .form-check.form-check-group [type=checkbox]+label{padding-left:0;font-size:.889em;line-height:2.3em;height:inherit;margin-bottom:0}.link-list-wrapper ul .form-check.form-check-group [type=checkbox]+label:after{right:24px}.link-list-wrapper ul .form-check.form-check-group [type=checkbox]+label:before{right:35px}.link-list-wrapper ul .form-check.form-check-group [type=checkbox][disabled]+label{color:#adb2b8}@media (min-width:576px){.link-list-wrapper ul li a.large{font-size:1em;line-height:2.7em}}@media (min-width:768px){.link-list-wrapper ul li a.large{line-height:2.7em}}@-webkit-keyframes megamenuFadeIn{0%{opacity:0;margin-top:16px}to{opacity:1;margin-top:16px}}@keyframes megamenuFadeIn{0%{opacity:0;margin-top:16px}to{opacity:1;margin-top:16px}}.navbar{background:#06c}.navbar .navbar-collapsable{position:fixed;top:0;right:0;left:0;bottom:0;z-index:10;background:rgba(0,0,0,.6);display:none}.navbar .navbar-collapsable .menu-wrapper{background:#06c;position:absolute;top:0;bottom:0;right:0;left:48px;pointer-events:all;overflow-y:auto;-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition:all .3s;transition:all .3s}.navbar .navbar-collapsable .navbar-nav{margin-top:102px;padding:24px 0}.navbar .navbar-collapsable .navbar-nav li a.nav-link{color:#fff;font-weight:400;padding:12px 24px;position:relative}.navbar .navbar-collapsable .navbar-nav li a.nav-link.active{border-left:2px solid #fff}.navbar .navbar-collapsable.expanded .close-div,.navbar .navbar-collapsable.expanded .menu-wrapper{-webkit-transform:translateX(0);transform:translateX(0)}.navbar .close-div{-webkit-transform:translateX(100%);transform:translateX(100%);padding:24px;position:fixed;left:48px;right:0;top:0;background:#06c;z-index:10;-webkit-transition:all .3s;transition:all .3s}.navbar .close-div .close-menu{background:transparent;color:#fff;text-align:center;font-size:.75em;text-transform:uppercase;padding:0}.navbar .close-div .close-menu span{display:block;text-align:center;font-size:2em}.navbar .close-div .close-menu span:before{margin-right:0}.navbar .dropdown-menu{background:transparent;-webkit-box-shadow:none;box-shadow:none}.navbar .dropdown-menu:before{display:none}.navbar .dropdown-menu .link-list-wrapper{padding-left:24px;padding-right:24px}.navbar .dropdown-menu .link-list-wrapper ul li a h3,.navbar .dropdown-menu .link-list-wrapper ul li a span,.navbar .dropdown-menu .link-list-wrapper ul li h3{color:#fff}.navbar .dropdown-toggle{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar .dropdown-toggle:after{font-family:italia-icon-font;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:auto;height:auto;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;content:"\e818";vertical-align:auto;border:none;border-bottom:0;font-size:.8em;line-height:2em;-webkit-transform-origin:center;transform-origin:center;-webkit-transition:all .3s;transition:all .3s}.navbar .dropdown-toggle[aria-expanded=true]:after{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.custom-navbar-toggler{background:none;border:none}.custom-navbar-toggler span{color:#fff;font-size:1.625em}.inline-menu .link-list-wrapper .link-list,.inline-menu .link-list-wrapper .link-list li a{position:relative}.inline-menu .link-list-wrapper .link-list li a i{color:#6aaaeb}.inline-menu .link-list-wrapper .link-list li a:after{content:"";display:block;width:2px;background:#06c;position:absolute;right:0;top:0;height:100%;-webkit-transform-origin:center;transform-origin:center;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transition:all .3s;transition:all .3s;z-index:1}.inline-menu .link-list-wrapper .link-list li a.active span{color:#06c;text-decoration:none}.inline-menu .link-list-wrapper .link-list li a[aria-expanded=true]:after{-webkit-transform:scaleY(1);transform:scaleY(1)}.inline-menu .link-list-wrapper .link-list:after{content:"";display:block;width:2px;background:-webkit-gradient(linear,left top,left bottom,from(#e6ecf2),to(rgba(230,236,242,.3)));background:linear-gradient(180deg,#e6ecf2 0,rgba(230,236,242,.3));position:absolute;right:0;top:0;height:100%}@media (min-width:992px){.navbar{background:#06c;padding:0}.navbar .navbar-collapsable{position:relative;z-index:auto;background:none;display:block!important}.navbar .navbar-collapsable,.navbar .navbar-collapsable .menu-wrapper{top:auto;right:auto;left:auto;bottom:auto;-webkit-transition:none;transition:none}.navbar .navbar-collapsable .menu-wrapper{position:inherit;overflow-y:visible;-webkit-transform:none;transform:none}.navbar .navbar-collapsable .navbar-nav{margin-top:0;padding:0 24px}.navbar .navbar-collapsable .navbar-nav li a.nav-link{font-weight:400;padding:12px 24px}.navbar .navbar-collapsable .navbar-nav li a.nav-link.active{border-left:0;border-bottom:2px solid #fff}.navbar .navbar-collapsable .navbar-nav li a.nav-link.disabled{opacity:.5;cursor:not-allowed}.navbar .close-div{display:none}.navbar .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#19191a;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:0 solid transparent;border-radius:4px;-webkit-box-shadow:0 0 30px 5px rgba(0,0,0,.05);box-shadow:0 0 30px 5px rgba(0,0,0,.05)}.navbar .dropdown-menu.show{-webkit-animation:dropdownFadeIn .3s forwards;animation:dropdownFadeIn .3s forwards;top:calc(100% - 16px)}.navbar .dropdown-menu:before{display:block}.navbar .dropdown-menu .link-list-wrapper{padding-left:0;padding-right:0}.navbar .dropdown-menu .link-list-wrapper ul li a h3,.navbar .dropdown-menu .link-list-wrapper ul li a span{color:#06c}.navbar .dropdown-menu .link-list-wrapper ul li h3{color:#19191a}.navbar .dropdown-toggle{display:block;-webkit-box-pack:inherit;-ms-flex-pack:inherit;justify-content:inherit}.navbar .dropdown-toggle:after{content:"";font-size:.8rem;font-family:italia-icon-font;font-style:normal;font-weight:400;speak:none;border:none;display:inline-block;vertical-align:0;width:auto;height:auto;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.navbar.megamenu .navbar-collapsable{width:100%}.navbar.megamenu .navbar-collapsable .nav-item{position:static}.navbar.megamenu .navbar-collapsable .nav-item a{position:relative}.navbar.megamenu .navbar-collapsable .nav-item a:before{content:"";position:absolute;top:auto;bottom:-12px;left:24px;width:18px;height:18px;border-radius:4px;background-color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0;-webkit-transition:opacity .3s;transition:opacity .3s}.navbar.megamenu .navbar-collapsable .nav-item.show a:before{opacity:1}.navbar.megamenu .navbar-collapsable .dropdown-menu{min-width:auto;left:24px;right:24px}.navbar.megamenu .navbar-collapsable .dropdown-menu:before{display:none}.navbar.megamenu .navbar-collapsable .dropdown-menu.show{-webkit-animation:megamenuFadeIn .3s forwards;animation:megamenuFadeIn .3s forwards}.custom-navbar-toggler{display:none}}.skiplinks{background-color:#0bd9d2;text-align:center}.skiplinks a{display:inline-block;padding:.5rem;display:block;font-weight:600;color:#5b6f82;text-decoration:underline}.componente-base{background-color:#0073e6;color:#fff;cursor:pointer;padding:8px}.focus--keyboard,.form-check [type=checkbox]:focus+label,.toggles label input[type=checkbox]:focus+.lever{border-color:#f90;-webkit-box-shadow:0 0 6px 2px #f90;box-shadow:0 0 6px 2px #f90;outline:none}.focus--mouse,.form-check [type=checkbox]:focus.focus--mouse+label,.toggles label input[type=checkbox]:focus.focus--mouse+.lever{border-color:inherit;-webkit-box-shadow:none;box-shadow:none;outline:none}.bg-primary--dark{background-color:#06c}.bg-primary--mid-dark{background-color:#004e95}.bg-primary--darken{background-color:#002b4d}.text-grey{color:#ccc}.text-sans-serif{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}.text-serif{font-family:Lora,serif}.text-light-blue{color:#e6f3fe}.text-blue{color:#0073e6}.border-dark-blue{border-color:#193e5e!important}.border-medium-blue{border-color:#06c!important}.border-grey-light{border-color:#eaebed!important}.border-width-2{border-width:2px!important}.stopScrolling--vertical{overflow-y:hidden}.deactive{display:none!important}@font-face{font-family:docs-icons;src:url(../font/docs.eot);src:url(../font/docs-italia.eot#iefix) format("embedded-opentype"),url(../font/docs-italia.ttf) format("truetype"),url(../font/docs-italia.woff) format("woff"),url(../font/docs-italia.svg#docs) format("svg");font-weight:400;font-style:normal}[class*=" docs-icon-"],[class^=docs-icon-]{font-family:docs-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:middle;color:inherit;font-size:20.8px;font-size:1.3rem;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.docs-icon-more:before{content:""}.docs-icon-expand:before{content:""}.docs-icon-collapse:before{content:""}.docs-icon-plus:before{content:""}.docs-icon-minus:before{content:""}.docs-icon-document:before{content:""}.docs-icon-edit:before{content:""}.docs-icon-download:before{content:""}.docs-icon-info:before{content:""}.docs-icon-compare:before{content:""}.docs-icon-github:before{content:""}.docs-icon-share:before{content:""}.docs-icon-search:before{content:""}.docs-icon-link:before{content:""}.docs-icon-external-link:before{content:""}.docs-icon-comment:before{content:""}.docs-icon-attention:before,.docs-icon-warning:before{content:""}.docs-icon-example:before{content:""}.docs-icon-procedure:before{content:""}.docs-icon-hint:before{content:""}.docs-icon-note:before{content:""}.docs-icon-step:before{content:""}.docs-icon-pdf:before{content:""}.docs-icon-html:before{content:""}.docs-icon-project:before{content:""}.docs-icon-publisher:before{content:""}.docs-icon-docs:before{content:""}.docs-icon-user:before{content:""}.small{font-size:14px}.navbar-dark--text-white{color:#fff}.navbar-dark .lang-selector .nav-link,.navbar-dark .navbar-nav .nav-link{color:#fff!important}.navbar.bg-white{background-color:#fff}.navbar.primary-bg-a7{background-color:#0059b3}@media (min-width:992px){.dropdown-menu.dropdown-menu-right:before{right:24px;left:auto}}@media (min-width:992px){.navbar .dropdown-menu.dropdown-menu-right{left:auto;right:0}}@media (max-width:991.98px){.dropdown-menu-right{right:auto;left:auto}}.btn-group.show .dropdown-menu[x-placement=bottom-start],.dropdown.show .dropdown-menu[x-placement=bottom-start]{-webkit-animation:dropdownFadeIn .3s forwards;animation:dropdownFadeIn .3s forwards}.btn-group.show .dropdown-menu[x-placement=top-start],.dropdown.show .dropdown-menu[x-placement=top-start]{-webkit-animation:dropdownFadeInTop .3s forwards;animation:dropdownFadeInTop .3s forwards}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-menu:before{z-index:-1}.injected{display:none}body{color:#596771;background-color:#002b4d}body.no-scroll{overflow-y:hidden}p{font-family:Lora,serif}h1,h2,h3,h4,h5{color:#000;margin-bottom:2rem}img{max-width:100%;height:auto}.container-fluid--desktop{max-width:1450px}@-webkit-keyframes pulsate{0%{-webkit-transform:scale(.1);transform:scale(.1);opacity:0}50%{opacity:1}to{-webkit-transform:scale(1.2);transform:scale(1.2);opacity:0}}@keyframes pulsate{0%{-webkit-transform:scale(.1);transform:scale(.1);opacity:0}50%{opacity:1}to{-webkit-transform:scale(1.2);transform:scale(1.2);opacity:0}}.loading{overflow:hidden}.loading:after{position:absolute;background:#0073e6;height:100%;width:100%;z-index:10;content:"";left:0;top:0}.loading:before{border:5px solid #fff;margin:-15px 0 0 -15px;border-radius:30px;position:absolute;content:"";z-index:11;height:30px;left:50%;top:50%;opacity:0;width:30px;-webkit-animation:pulsate 1s ease-out;animation:pulsate 1s ease-out;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.loading.no-bg:after{background:none;position:relative}.dropdown-menu{background-color:#fff;padding:.5rem;margin:0;border-radius:.2rem;-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);z-index:100}.dropdown-menu .dropdown-item{color:#0073e6}.dropdown-menu .dropdown-item.active,.dropdown-menu .dropdown-item:active{font-weight:600;text-decoration:inherit;background-color:inherit}#version-list .dropdown-toggle .current-version{max-width:8em;text-overflow:ellipsis;overflow:hidden;display:inline-block;font-size:inherit;font-weight:400}#version-list .version-list-wrapper{max-height:10.2em;max-width:18em;overflow-y:scroll}#version-list .dropdown-item{text-overflow:ellipsis;max-width:16em;overflow-x:hidden}.document-actions .dropdown-toggle:after{vertical-align:middle;line-height:1.5}@media (max-width:767.98px){.document-actions .dropdown-toggle:after{font-family:italia-icon-font!important;border:none;margin:0 2em 0 0;width:auto;height:auto;float:right;content:"\e818";vertical-align:middle;font-size:.8em;line-height:2em;-webkit-transform-origin:center;transform-origin:center;-webkit-transition:all .3s;transition:all .3s}.document-actions .dropdown-toggle[aria-expanded=true]:after{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.document-actions .dropdown-toggle:hover{text-decoration:none}.document-actions .dropdown-menu.show{position:static!important;-webkit-transform:none!important;transform:none!important;-webkit-box-shadow:none;box-shadow:none;padding:0;margin-top:16px;-webkit-animation:none;animation:none}.document-actions .dropdown-menu.show:before{display:none}}.header{font-size:16px;font-size:1rem}.header .navbar-brand{font-size:14.224px;font-size:.889rem;font-weight:600}.header .navbar-brand a{text-decoration:none}.header .navbar .dropdown-toggle:after{margin:0 .2rem;font-size:11.2px;font-size:.7rem}.header .nav-item{margin-left:.2rem}@media (min-width:992px){.header .nav-item{border-left:0;margin-left:0}}.header .nav-item.active{font-weight:600}.header .nav-item:not(.nav-text):not(.nav-item--no-underline).active,.header .nav-item:not(.nav-text):not(.nav-item--no-underline):hover{border-left:.2rem solid #fff;margin-left:0}@media (min-width:992px){.header .nav-item:not(.nav-text):not(.nav-item--no-underline).active,.header .nav-item:not(.nav-text):not(.nav-item--no-underline):hover{border-left:0;margin-left:0;border-bottom:2px solid #fff;margin-bottom:0}}.slim-header{font-size:14.224px;font-size:.889rem}.slim-header .navbar-toggler .navbar__icon{font-size:11.2px;font-size:.7rem;line-height:3em;display:inline-block;-webkit-transform:scaleY(-1);transform:scaleY(-1);-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.slim-header .navbar-toggler.collapsed .navbar__icon{-webkit-transform:scaleY(1);transform:scaleY(1)}.slim-header .navbar-toggler .dropdown-toggle:after{content:""}.slim-header.navbar .divider{border-top:.05rem solid #799ebc;padding-right:1px;width:10%;margin-top:.75rem;margin-bottom:1rem;margin-left:.2rem;padding-bottom:1px}.slim-header.navbar .divider:first-child{margin-top:1px}.slim-header.navbar .divider.divider--w-100{width:100%}@media (min-width:992px){.slim-header.navbar .divider.divider--w-100{width:inherit}}@media (min-width:992px){.slim-header.navbar .divider{border-top:0;width:inherit;margin-top:inherit;margin-bottom:inherit;border-right:.05rem solid #06c;padding-right:1px;margin-left:0}}.secondary-nav{font-weight:600}@media (max-width:991.98px){.secondary-nav.secondary-nav--offcanvas{-webkit-transform:translateX(-100%);transform:translateX(-100%);z-index:10;background-color:#fff;color:#06c;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;position:fixed;top:0;left:0;bottom:0;right:25%;overflow-y:auto}.secondary-nav.secondary-nav--offcanvas.active{-webkit-transform:translateX(0);transform:translateX(0)}}.secondary-nav .navbar-nav li{padding:.5rem;border-bottom:.2rem solid transparent}.secondary-nav .nav-item:not(.nav-text):not(.nav-item--no-underline).active,.secondary-nav .nav-item:not(.nav-text):not(.nav-item--no-underline):hover{border-bottom:.2rem solid #fff}@media (max-width:991.98px){.article-intro-more .dropdown.show:before{content:"";width:100vw;height:100%;position:fixed;top:0;left:0;background-color:rgba(0,0,0,.5);z-index:999}}.article-intro-more .dropdown .dropdown-toggle:after{display:none}.article-intro-more .dropdown .dropdown-menu{background-color:#fff;padding:.5rem;margin:0;border-radius:.2rem;-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);z-index:100}@media (max-width:991.98px){.article-intro-more .dropdown .dropdown-menu{position:fixed!important;z-index:1001!important;top:calc(50% - 140px)!important;left:calc(50% - 140px)!important;-webkit-transform:none!important;transform:none!important}.article-intro-more .dropdown .dropdown-menu:before{display:none}}.article-intro-more .dropdown .dropdown-menu .dropdown-item{color:#0073e6}@media (max-width:991.98px){.lang-selector .dropdown.show:before{content:"";width:100vw;height:100%;position:fixed;top:0;left:0;background-color:rgba(0,0,0,.5);z-index:999}}.lang-selector .dropdown .dropdown-menu{background-color:#fff;padding:.5rem;margin:0;border-radius:.2rem;-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);z-index:100}@media (max-width:991.98px){.lang-selector .dropdown .dropdown-menu{position:fixed!important;z-index:1001!important;top:calc(50% - 80px)!important;left:calc(50% - 80px)!important;-webkit-transform:none!important;transform:none!important}.lang-selector .dropdown .dropdown-menu:before{display:none}}.lang-selector .dropdown .dropdown-menu .dropdown-item{color:#0073e6}.lang-selector .dropdown .dropdown-menu .dropdown-item.active,.lang-selector .dropdown .dropdown-menu .dropdown-item:active{font-weight:600;text-decoration:inherit;background-color:inherit}.h1--header{font-size:21.328px;font-size:1.333rem;font-weight:600;line-height:1.2;letter-spacing:unset}@media (min-width:576px){.h1--header{font-size:1.8rem}}.h1--header span{font-size:11.2px;font-size:.7rem;font-weight:400}.svg--header{width:39px;height:36px}@media (min-width:576px){.svg--header{width:65px;height:60px}}.h2--header{font-size:14px;font-weight:300;letter-spacing:unset}.docs__document-info{color:#fff;font-size:14.4px;font-size:.9rem;vertical-align:bottom}.docs__document-info .docs__document-info__icon{font-size:19.2px;font-size:1.2rem;vertical-align:bottom}.docs__document-info .docs__document-info__ownership .docs__document-info__label{font-size:12.8px;font-size:.8rem}.docs__document-info .docs__document-info__ownership .docs__document-info__icon{font-size:16px;font-size:1rem}.doc-header{-webkit-box-shadow:0 0 120px 0 rgba(0,0,0,.1);box-shadow:0 0 120px 0 rgba(0,0,0,.1);position:relative;z-index:10;color:#0073e6;font-size:16px;font-weight:600}.doc-header .progress-container{width:100%;height:4px;height:.25rem;background:#e6f3fe}.doc-header .progress-bar{height:4px;height:.25rem;background:#06c;width:0}.docs-italia #cerca{border:1px solid #ccc;font-size:12.8px;font-size:.8rem;font-weight:100}.docs-italia #cerca::-webkit-input-placeholder{color:#ccc}.docs-italia #cerca::-moz-placeholder{color:#ccc}.docs-italia #cerca::-ms-input-placeholder{color:#ccc}.docs-italia #cerca::placeholder{color:#ccc}.social{color:#fff}.social .social__label{font-size:15.2px;font-size:.95rem}.social .social__link{color:#fff;font-size:16px;font-size:1rem}.social .social__link:active,.social .social__link:hover{text-decoration:none}#rtd-search-form{border:1px solid #ccc}#rtd-search-form input[type=text]{border:none;height:100%}#rtd-search-form .input-group-append button{background-color:#fff}#rtd-search-form .input-group-append button .docs-icon-search{font-size:19.2px;font-size:1.2rem}#documentInfo .tag{font-family:Titillium Web,Geneva,Tahoma,sans-serif}.offcanvas-menu{position:fixed;z-index:1000;width:100vw;height:100vh;top:0;left:0;right:0;bottom:0}.offcanvas-menu.animate--left{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);-webkit-transition:-webkit-transform .4s;transition:-webkit-transform .4s;transition:transform .4s;transition:transform .4s,-webkit-transform .4s;-webkit-transition-timing-function:cubic-bezier(.7,0,.3,1);transition-timing-function:cubic-bezier(.7,0,.3,1)}.offcanvas-menu.js-active{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:-webkit-transform .8s;transition:-webkit-transform .8s;transition:transform .8s;transition:transform .8s,-webkit-transform .8s;-webkit-transition-timing-function:cubic-bezier(.7,0,.3,1);transition-timing-function:cubic-bezier(.7,0,.3,1)}.offcanvas-menu .offcanvas-menu__inner{width:80%;background-color:#fff;height:100vh;-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:all .5s ease-out;transition:all .5s ease-out}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__header{padding:1.5rem 1.8rem 1rem}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__header .offcanvas-menu__title{font-weight:600;font-size:19.2px;font-size:1.2rem}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav{padding:.5rem 0 0;margin:0}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item{list-style:none;margin:0;padding:.5rem 1rem}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item:first-child,.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item:nth-child(4){position:relative}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item:first-child:before,.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item:nth-child(4):before{content:"";width:64px;height:1px;left:32px;left:2rem;border-top:1px solid rgba(0,102,204,.2);position:absolute;top:0}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item .offcanvas-menu__nav__link{padding:.5rem 1rem;font-size:16px;font-size:1rem;display:block}.offcanvas-menu.deactive .offcanvas-menu__inner{margin-left:-80%;overflow:hidden}.offcanvas-menu .offcanvas-menu__extra{width:20%;height:100vh;position:fixed;right:0;top:0}body:before{position:fixed;top:0;left:0;z-index:999;bottom:0;right:0;background:rgba(0,0,0,.5);content:"";opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);-webkit-transition:opacity .4s,-webkit-transform 0s .4s;transition:opacity .4s,-webkit-transform 0s .4s;transition:opacity .4s,transform 0s .4s;transition:opacity .4s,transform 0s .4s,-webkit-transform 0s .4s;-webkit-transition-timing-function:cubic-bezier(.7,0,.3,1);transition-timing-function:cubic-bezier(.7,0,.3,1)}body.show-menu:before{opacity:1;-webkit-transition:opacity .8s;transition:opacity .8s;-webkit-transition-timing-function:cubic-bezier(.7,0,.3,1);transition-timing-function:cubic-bezier(.7,0,.3,1);-webkit-transform:translateZ(0);transform:translateZ(0)}#desktop-menu{-webkit-transform:translate(0);transform:translate(0);-webkit-transform:translateZ(0);transform:translateZ(0);will-change:position,transform;padding-bottom:5rem}#desktop-menu>button:first-of-type{margin-top:1.5rem}.col--nav{width:100%}@media (min-width:768px){.col--nav{width:420px;float:left;border-right:1px solid #eeeff0;padding-left:4.5rem}}.docs-menu{will-change:min-height;display:none}@media (min-width:768px){.docs-menu{display:block}}@media (max-width:767.98px){.docs-offcanvas-menu{-webkit-transform:translateX(100%);transform:translateX(100%);z-index:10;background-color:#fff;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;position:fixed;top:0;left:0;bottom:0;right:0;overflow-y:auto}.docs-offcanvas-menu.active{-webkit-transform:translateX(0);transform:translateX(0)}}@media (min-width:768px){.docs-offcanvas-menu{display:none}}.navbar-toggler--wrap{position:fixed;bottom:0;left:0;right:0;z-index:9;background-color:#fff;-webkit-box-shadow:-1px -2px 62px -13px rgba(0,0,0,.25);box-shadow:-1px -2px 62px -13px rgba(0,0,0,.25)}@media (min-width:768px){.navbar-toggler--wrap{display:none}}.navbar-toggler{color:#06c;padding:1rem 1rem 1rem 2rem}.navbar-toggler__chapter{color:#000;font-size:12.8px;font-size:.8rem}.sidebar-tabs{position:fixed;top:0;left:0;right:0;background-color:#fff;-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;z-index:11;-webkit-box-shadow:-1px -2px 62px -13px rgba(0,0,0,.25);box-shadow:-1px -2px 62px -13px rgba(0,0,0,.25)}.sidebar-tabs.active{-webkit-transform:translateX(0);transform:translateX(0)}@media (min-width:768px){.sidebar-tabs{display:none}}.sidebar-btn{text-transform:uppercase;color:#06c;font-weight:700;cursor:pointer;border:0;border-bottom:3px solid #0073e6;background:none}@media (min-width:768px){.sidebar-btn{border-bottom:2px solid #bbd8f1}}.sidebar-btn.sidebar-btn--mobile{display:inline-block;font-size:11.2px;font-size:.7rem;text-align:center;border:0}.sidebar-btn.sidebar-btn--mobile.active.show{border-bottom:3px solid #0073e6;text-decoration:none}@media (min-width:768px){.sidebar-btn.sidebar-btn--mobile.active.show{border-bottom:2px solid #bbd8f1}}.form-check [type=checkbox]:focus.focus--mouse+label.sidebar-btn,.sidebar-btn.focus--mouse,.toggles label input[type=checkbox]:focus.focus--mouse+.sidebar-btn.lever{border-color:#0073e6!important}@media (min-width:768px){.form-check [type=checkbox]:focus.focus--mouse+label.sidebar-btn,.sidebar-btn.focus--mouse,.toggles label input[type=checkbox]:focus.focus--mouse+.sidebar-btn.lever{border-color:#bbd8f1!important}}.sidebar-btn .it-collapse,.sidebar-btn .it-expand{font-size:9.6px;font-size:.6rem;line-height:2.5}.sidebar-btn .it-expand{display:inline-block}.sidebar-btn.collapsed .it-expand,.sidebar-btn .it-collapse{display:none}.sidebar-btn.collapsed .it-collapse{display:inline-block}@media (min-width:768px){.sidebar-btn{display:block;width:100%;text-align:left}}@media (max-width:767.98px){.sidebar-btn.collapsed .it-collapse,.sidebar-btn.collapsed .it-expand,.sidebar-btn .it-collapse,.sidebar-btn .it-expand{display:none}}.main-container{overflow:hidden;position:relative;background-color:#fff}.doc-content__consultation{position:absolute;right:0;left:0;top:0;background-color:#4bd4d6;text-align:left;text-transform:uppercase;font-weight:700;color:#000;padding:.5rem 0 .5rem 2rem}@media (min-width:992px){.doc-content__consultation{padding-left:4rem}}@media (min-width:1200px){.doc-content__consultation{-webkit-transform:rotate(45deg) translate(45px,-125px);transform:rotate(45deg) translate(45px,-125px);width:320px;-webkit-transform-origin:left;transform-origin:left;z-index:1;left:auto;text-align:center;padding-left:0}}.col-content{padding:4rem 2rem}@media (min-width:992px){.col-content{padding:4rem 4rem 5rem}}.caption-wrap{clear:both}.caption-wrap .caption--table{margin-top:1rem;margin-bottom:1rem;display:block;font-family:Lora,serif;font-style:italic;font-size:12px;font-size:.75rem;padding:0}@media (min-width:992px){.caption-wrap .caption--table{width:calc(100% - 200px);float:left}}.caption-wrap .reference--wrap{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;margin-top:1rem;margin-bottom:2rem;font-size:.9em}@media (min-width:768px){.caption-wrap .reference--wrap{width:200px;float:right;padding-left:2rem}}.caption-number{font-weight:700;color:#000}.chapter-header{margin-bottom:1rem;margin-left:.5rem}.chapter-nav{position:relative}@media (min-width:992px){.chapter-nav{width:200px;float:left}}.figure-fixed-wrap{display:block;width:100%;overflow-x:auto}.figure-fixed{max-width:none}.title__background{width:100%;background-color:#e6f3fe;position:absolute;top:-1px;height:auto;left:-8px;left:-.5rem;display:none;right:0;z-index:0}.title__background:after{content:"";position:absolute;left:100%;-webkit-transform:translateX(-50%);transform:translateX(-50%);top:0;bottom:0;width:0;height:0;border-left:20px solid transparent;border-right:20px solid transparent;border-top:20px solid #e6f3fe}.std-term{background-color:#bffffd;color:#000;padding:.2rem}.footer-buttons--next{clear:both;margin-top:4rem}.footer-buttons--next a{background-color:#0073e6;color:#fff;padding:.5rem 1rem;border-radius:.2rem;font-weight:700;display:inline-block}.footer-buttons--prev{margin-bottom:2.5rem}.reference-icon{vertical-align:middle;display:inline-block}#doc-content{width:100%;position:relative}@media (min-width:768px){#doc-content{width:calc(100% - 420px);float:left}}#doc-content a.reference[href]{text-decoration:underline}#doc-content .useful-docs .mimetype{display:none}#doc-content .useful-docs ul{list-style-type:none;padding-left:0}#doc-content .useful-docs li{border-top:1px solid #ccc;padding-top:1rem;padding-bottom:1rem;vertical-align:middle}#doc-content .useful-docs li:after{display:none}#doc-content .useful-docs [class*=" docs-icon-"],#doc-content .useful-docs [class^=docs-icon-]{font-size:30.4px;font-size:1.9rem;color:#0073e6}#doc-content ul.simple,#doc-content ul.simple ul{list-style-type:disc}#doc-content ul.simple li,#doc-content ul.simple ul li{position:relative;margin-bottom:.5rem;font-size:14.4px;font-size:.9rem}#doc-content ul.simple li ul li,#doc-content ul.simple ul li ul li{margin-top:.5rem}#doc-content .section{clear:both}#doc-content .section:after{content:"";display:table;clear:both}@media (min-width:992px){#doc-content .section>*{width:calc(100% - 200px);float:left;clear:left}}@media (min-width:992px){#doc-content .section .caption-wrap,#doc-content .section .chapter-header,#doc-content .section .figure,#doc-content .section .full-width,#doc-content .section .section,#doc-content .section .table-responsive,#doc-content .section>.toctree-wrapper.compound{width:100%}}#doc-content .section .figure{width:100%}#doc-content .section .figure[id],#doc-content .section .rubric.ref[id],#doc-content .section .section[id],#doc-content .section .table[id]{border-top:4.2rem solid transparent}#doc-content .section .glossary dt:not([id=""]){margin-top:-4em;padding-top:4em}#doc-content .section ol.loweralpha,#doc-content .section ol.loweralpha li{list-style:lower-alpha}#doc-content .section ol.upperalpha,#doc-content .section ol.upperalpha li{list-style:upper-alpha}#doc-content .section ol.upperroman,#doc-content .section ol.upperroman li{list-style:upper-roman}#doc-content .section ol,#doc-content .section ol.arabic{list-style:decimal}#doc-content .topic-title{color:#000;font-weight:700;font-size:22.4px;font-size:1.4rem;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .topic.procedure{margin-bottom:3rem}#doc-content .topic.procedure em{font-weight:700}#doc-content .topic.procedure ol{padding-left:1rem}#doc-content .topic.procedure ol li{position:relative;margin-bottom:1rem;padding-left:1rem;counter-increment:list;list-style-type:none;font-family:Lora,serif}#doc-content .topic.procedure ol li:after{position:absolute;left:-16px;left:-1rem;top:0;width:16px;width:1rem;height:24px;height:1.5rem;z-index:1;content:counter(list);color:#fff;text-align:center;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600}#doc-content .topic.procedure .topic-title{text-transform:uppercase;font-size:17.6px;font-size:1.1rem;font-weight:700;color:#002b4d;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;padding-bottom:.2rem;background:-webkit-gradient(linear,left top,left bottom,from(#004e95),to(#004e95)) no-repeat 100% 100%/calc(100% - 2rem) 2px;background:linear-gradient(#004e95,#004e95) no-repeat 100% 100%/calc(100% - 2rem) 2px;margin-bottom:1rem}#doc-content .topic.procedure .topic-title [class*=" docs-icon-"],#doc-content .topic.procedure .topic-title [class^=docs-icon-]{margin-right:.5rem}#doc-content .topic.procedure .procedure__img{padding-left:1.5rem;margin-bottom:2rem;margin-left:.5rem;margin-top:2rem;border-left:1px solid #799ebc}#doc-content .topic.procedure .procedure__img img{-webkit-box-shadow:0 0 61px 0 rgba(0,0,0,.15);box-shadow:0 0 61px 0 rgba(0,0,0,.15)}#doc-content .topic.procedure .procedure-internal-title{text-transform:uppercase;color:#000;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:12.8px;font-size:.8rem;font-weight:700}#doc-content .topic.procedure .docs-icon-step{color:#004e95;position:absolute;left:-24px;left:-1.5rem;font-size:32px;font-size:2rem}@media (min-width:992px){#doc-content .title-wrap{width:calc(100% - 200px);float:left;clear:left;position:relative}#doc-content .title-wrap h2{line-height:60px}#doc-content .title-wrap h3{line-height:46px}#doc-content .title-wrap h1,#doc-content .title-wrap h2,#doc-content .title-wrap h3{display:inline;cursor:pointer;position:relative;color:#000;box-shadow:.5rem 0 0 #fff,-.5rem 0 0 #fff;-webkit-box-shadow:.5rem 0 0 #fff,-.5rem 0 0 #fff;-webkit-box-decoration-break:clone;-ms-box-decoration-break:clone;-o-box-decoration-break:clone;box-decoration-break:clone;left:-.5rem;z-index:1}#doc-content .title-wrap h1 .title__chapter,#doc-content .title-wrap h2 .title__chapter,#doc-content .title-wrap h3 .title__chapter{position:relative;color:#0073e6}#doc-content .title-wrap h1{line-height:71px}#doc-content .title-wrap h1 .title__chapter{position:relative;background-color:#0073e6;color:#fff;margin-right:.5rem;padding-left:.5rem;padding-right:.5rem;display:inline-block;z-index:1}#doc-content .title-wrap h1 .title__chapter:after,#doc-content .title-wrap h1 .title__chapter:before{content:"";top:0;bottom:0;width:.5rem;background-color:#0073e6;position:absolute}#doc-content .title-wrap h1 .title__chapter:after{right:100%}#doc-content .title-wrap h1 .title__chapter:before{left:100%}}#doc-content .title-wrap.active h1,#doc-content .title-wrap.active h2,#doc-content .title-wrap.active h3{-webkit-box-shadow:.5rem 0 0 #e6f3fe,-.5rem 0 0 #e6f3fe;box-shadow:.5rem 0 0 #e6f3fe,-.5rem 0 0 #e6f3fe;background-color:#e6f3fe}#doc-content .title-wrap.active .title__background{display:block}#doc-content .headerlink{display:none}#doc-content .document-info{padding:0}#doc-content .document-info .docutils.field-list{width:100%;margin-bottom:2rem;border-bottom:1px solid #ccc;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;display:grid}#doc-content .document-info .docutils.field-list tr{display:block;margin-bottom:2rem}@media (min-width:576px){#doc-content .document-info .docutils.field-list tr{width:50%;float:left}}#doc-content .document-info .docutils.field-list .field-body,#doc-content .document-info .docutils.field-list .field-name{display:block;font-weight:400}#doc-content .document-info .docutils.field-list .field-body{color:#06c;text-decoration:underline}#doc-content dd>p{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .highlights{font-size:24px;font-size:1.5rem;font-family:Lora,serif}#doc-content blockquote.epigraph{margin-top:2rem;padding-left:2rem;border-left:4px solid #00c4c8;color:#596771;font-size:19.2px;font-size:1.2rem;margin-bottom:2rem}#doc-content blockquote.epigraph .attribution{margin-bottom:0;font-size:16px;font-size:1rem}#doc-content .question-and-answers blockquote{margin-top:.5rem;margin-bottom:0}#doc-content .question-and-answers blockquote>div{font-weight:700;font-family:Lora,serif}#doc-content .question-and-answers .pull-quote{max-width:490px;margin-bottom:2rem}#doc-content .question-and-answers .pull-quote ul{list-style-type:none;padding-left:1.5rem}#doc-content .question-and-answers .pull-quote ul li{display:inline-block;margin-top:1rem}#doc-content .question-and-answers .pull-quote ul li:after{display:none}#doc-content .question-and-answers .pull-quote ul li a{padding:.2rem .5rem;margin-right:.2rem;background-color:#bffffd;color:#000;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;border-bottom:2px dotted #ccc}#doc-content .question-and-answers .pull-quote>div>p{text-transform:uppercase;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;color:#0b0b0b;margin-bottom:0;font-weight:100}#doc-content .question-and-answers .pull-quote:nth-of-type(odd){float:left;clear:right}#doc-content .question-and-answers .pull-quote:nth-of-type(odd) blockquote>div,#doc-content .question-and-answers .pull-quote:nth-of-type(odd) ul{padding-left:1.5rem;border-left:5px solid #00c4c8}#doc-content .question-and-answers .pull-quote:nth-of-type(2n){float:right;text-align:right;clear:left}#doc-content .question-and-answers .pull-quote:nth-of-type(2n) blockquote>div,#doc-content .question-and-answers .pull-quote:nth-of-type(2n) ul{padding-right:1.5rem;border-right:5px solid #00c4c8}#doc-content .question-and-answers .glossary.docutils{display:none}#doc-content .highlighted{background:#bffffd;display:inline-block;font-weight:700}.highlight{padding:1rem;margin-bottom:1em}.highlight pre{margin:0;padding-bottom:1em}.highlighttable .highlight{padding:0}.code .highlight{background:none}code:not(.download) .pre{background-color:#efc;padding:.2rem}code.download{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:100%}#doc-content .admonition{margin-bottom:2rem;margin-top:2rem;padding-left:2rem;border-left:4px solid;color:#596771}#doc-content .admonition .more{padding:0}#doc-content .admonition .admonition-title{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;text-transform:uppercase;font-weight:700}#doc-content .admonition .admonition-title [class*=" docs-icon-"],#doc-content .admonition .admonition-title [class^=docs-icon-]{font-size:24px;font-size:1.5rem;margin-right:.5rem}#doc-content .admonition .admonition__hidden-paragraph{display:none}#doc-content .admonition .admonition__toggle-wrap{border-top:1px solid #ccc;padding-top:1rem;margin-top:1.5rem}#doc-content .admonition .admonition__toggle-btn{cursor:pointer;background:none;border:none;color:#0073e6;padding-left:0}#doc-content .admonition .admonition__toggle-btn [class*=" docs-icon-"],#doc-content .admonition .admonition__toggle-btn [class^=docs-icon-]{font-size:9.6px;font-size:.6rem;margin-left:.5rem;position:relative}#doc-content .admonition .admonition__toggle-btn [class*=" docs-icon-"]:after,#doc-content .admonition .admonition__toggle-btn [class^=docs-icon-]:after{content:"";width:16px;width:1rem;height:16px;height:1rem;border:2px solid #0073e6;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);position:absolute;border-radius:50%}#doc-content .admonition .admonition__toggle-btn .admonition__toggle-show-less:first-letter,#doc-content .admonition .admonition__toggle-btn .admonition__toggle-show-more:first-letter{text-transform:uppercase}#doc-content .admonition .admonition__toggle-btn .admonition__toggle-show-less{display:none}#doc-content .admonition .admonition__toggle-btn .admonition__toggle-show-more{display:inline-block}#doc-content .admonition .admonition__toggle-btn.active .admonition__toggle-show-more{display:none}#doc-content .admonition .admonition__toggle-btn.active .admonition__toggle-show-less{display:inline-block}#doc-content .admonition.display-page{background-color:#f9fafb;padding:2rem;position:relative;border:none}#doc-content .admonition.display-page:after,#doc-content .admonition.display-page:before{content:"";width:0;height:0;right:0;top:0;position:absolute;z-index:1}#doc-content .admonition.display-page:before{border-bottom:50px solid transparent;border-right:50px solid #fff}#doc-content .admonition.display-page:after{border-top:50px solid transparent;border-bottom:50px solid #ccc;border-right:50px solid transparent;-webkit-transform:translateY(-50%);transform:translateY(-50%)}#doc-content .admonition.display-page .admonition__hidden-paragraph p,#doc-content .admonition.display-page>p,#doc-content .admonition.display-page li{font-size:12.8px;font-size:.8rem;color:#002b4d}#doc-content .admonition.display-page ol{counter-reset:list}#doc-content .admonition.display-page ol li{margin-bottom:1rem;position:relative;list-style-type:none;counter-increment:list;color:#002b4d;font-family:Lora,serif;text-indent:16px;text-indent:1rem}#doc-content .admonition.display-page ol li:after{position:absolute;left:-16px;left:-1rem;top:0;width:17.6px;width:1.1rem;height:24px;height:1.5rem;z-index:1;content:counter(list) ".";text-align:center;font-weight:700}#doc-content .admonition.display-page ol li:before{position:absolute;left:-32px;left:-2rem;top:.65em;height:1px;z-index:1;content:"";font-weight:700;background-color:#002b4d;width:16px;width:1rem}#doc-content .admonition.display-page .admonition-title,#doc-content .admonition.display-page .code-block__header{color:#004e95;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .admonition.display-page .admonition-title{padding-bottom:.2rem;display:inline-block;background:-webkit-gradient(linear,left top,left bottom,from(#004e95),to(#004e95)) no-repeat 100% 100%/calc(100% - 2.2rem) 2px;background:linear-gradient(#004e95,#004e95) no-repeat 100% 100%/calc(100% - 2.2rem) 2px;margin-bottom:1rem;overflow:hidden}#doc-content .admonition.display-page .admonition-internal-title{text-transform:uppercase;font-size:12.8px;font-size:.8rem;font-weight:700;color:#002b4d;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .admonition.display-page .linenodiv pre{color:#8998a5;font-weight:400}#doc-content .admonition.display-page .highlighttable pre{font-size:12.8px;font-size:.8rem}#doc-content .admonition.admonition-consultation{padding-bottom:1rem;border-bottom:1px solid #ccc;position:relative}#doc-content .admonition.admonition-consultation a{text-decoration:underline}#doc-content .admonition.admonition-consultation .last{font-family:Lora,serif}#doc-content .admonition.admonition-consultation .admonition-title{color:#000;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .admonition.admonition-consultation .admonition-title [class*=" docs-icon-"],#doc-content .admonition.admonition-consultation .admonition-title [class^=docs-icon-]{font-size:19.2px;font-size:1.2rem}#doc-content .admonition.error{border-color:#d83750}#doc-content .admonition.error .admonition-title{color:#d83750}#doc-content .admonition.note{border-color:#004e95}#doc-content .admonition.note .admonition-title{color:#004e95}#doc-content .admonition.attention,#doc-content .admonition.warning{border-color:#df7d26}#doc-content .admonition.attention .admonition-title,#doc-content .admonition.warning .admonition-title{color:#df7d26}#doc-content .admonition.important{border-color:#008255}#doc-content .admonition.important .admonition-title{color:#008255}#doc-content .admonition.important .last{font-weight:700;font-size:19.2px;font-size:1.2rem}#doc-content .admonition.hint{border-color:#008255}#doc-content .admonition.hint .admonition-title{color:#008255}#doc-content .admonition.hint .reference.internal{font-size:12.8px;font-size:.8rem;position:relative}#doc-content .admonition.hint .reference.internal:after{content:"";width:6.4px;width:.4rem;height:6.4px;height:.4rem;border-top:1px solid #0073e6;border-right:1px solid #0073e6;left:100%;-webkit-transform:rotate(45deg) translateY(-50%);transform:rotate(45deg) translateY(-50%);position:absolute;top:50%}#doc-content .admonition.admonition-may,#doc-content .admonition.admonition-must,#doc-content .admonition.admonition-must-not,#doc-content .admonition.admonition-should,#doc-content .admonition.admonition-should-not,#doc-content .admonition.admonition-use,#doc-content .admonition.admonition-use-not{margin-top:2rem;border:2px solid;border-radius:1em;padding:2em;position:relative}#doc-content .admonition.admonition-may .admonition__header,#doc-content .admonition.admonition-must-not .admonition__header,#doc-content .admonition.admonition-must .admonition__header,#doc-content .admonition.admonition-should-not .admonition__header,#doc-content .admonition.admonition-should .admonition__header,#doc-content .admonition.admonition-use-not .admonition__header,#doc-content .admonition.admonition-use .admonition__header{display:inline-block;position:relative;padding:0 1em;background:#fff}#doc-content .admonition.admonition-may .admonition__header .admonition-title,#doc-content .admonition.admonition-must-not .admonition__header .admonition-title,#doc-content .admonition.admonition-must .admonition__header .admonition-title,#doc-content .admonition.admonition-should-not .admonition__header .admonition-title,#doc-content .admonition.admonition-should .admonition__header .admonition-title,#doc-content .admonition.admonition-use-not .admonition__header .admonition-title,#doc-content .admonition.admonition-use .admonition__header .admonition-title{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;margin:0}#doc-content .admonition.admonition-may:before,#doc-content .admonition.admonition-must-not:before,#doc-content .admonition.admonition-must:before,#doc-content .admonition.admonition-should-not:before,#doc-content .admonition.admonition-should:before,#doc-content .admonition.admonition-use-not:before,#doc-content .admonition.admonition-use:before{position:absolute;right:4em;top:-.65em;width:6em;padding:0 1em;display:inline-block;background-color:#fff}#doc-content .admonition.admonition-may,#doc-content .admonition.admonition-must,#doc-content .admonition.admonition-must-not,#doc-content .admonition.admonition-should,#doc-content .admonition.admonition-should-not{border-color:#004080}#doc-content .admonition.admonition-may .admonition__header,#doc-content .admonition.admonition-must-not .admonition__header,#doc-content .admonition.admonition-must .admonition__header,#doc-content .admonition.admonition-should-not .admonition__header,#doc-content .admonition.admonition-should .admonition__header{top:-2.8em}#doc-content .admonition.admonition-may .admonition__header .admonition-title,#doc-content .admonition.admonition-must-not .admonition__header .admonition-title,#doc-content .admonition.admonition-must .admonition__header .admonition-title,#doc-content .admonition.admonition-should-not .admonition__header .admonition-title,#doc-content .admonition.admonition-should .admonition__header .admonition-title{color:#004080}#doc-content .admonition.admonition-use{border-color:#00cf86}#doc-content .admonition.admonition-use .admonition__header .admonition-title{color:#00cf86}#doc-content .admonition.admonition-use .admonition__header .admonition-title:before{content:""}#doc-content .admonition.admonition-use-not{border-color:#d1344c}#doc-content .admonition.admonition-use-not .admonition__header .admonition-title{color:#d1344c}#doc-content .admonition.admonition-use-not .admonition__header .admonition-title:before{content:""}#doc-content .admonition.admonition-use-not .admonition__header,#doc-content .admonition.admonition-use .admonition__header{top:-3.2em}#doc-content .admonition.admonition-use-not .admonition__header .admonition-title:before,#doc-content .admonition.admonition-use .admonition__header .admonition-title:before{font-family:docs-icons;margin-right:.5rem;font-size:1.6em;vertical-align:middle}#doc-content .admonition.admonition-must:before{content:url(../images/must.svg)}#doc-content .admonition.admonition-should:before{content:url(../images/should.svg)}#doc-content .admonition.admonition-must-not:before{content:url(../images/must_not.svg)}#doc-content .admonition.admonition-should-not:before{content:url(../images/should_not.svg)}#doc-content .admonition.admonition-may:before{content:url(../images/may.svg)}.footer *{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}.footer a:hover{text-decoration:none}.footer .in-collaboration{font-size:.8em}.footer .team-logo--icon{width:54px}.footer .team-logo--text{font-size:16px;font-size:1rem;line-height:18px;max-width:160px;text-transform:uppercase}.footer .agid-logo--icon{width:8em}@media (min-width:768px){.footer .agid-logo--icon{width:10em}}.footer .agid-logo--separator{border-left-width:2px!important;height:30px}@media (min-width:768px){.footer .agid-logo--separator{height:40px}}.footer .agid-logo--text{width:112px;width:7rem;line-height:1.2;font-size:1em;display:inline-block;vertical-align:middle}@media (min-width:768px){.footer .agid-logo--text{font-size:1.1em;width:8rem}}.footer .small-prints{color:#00fff8;font-weight:600}.footer .social{font-size:1em;color:#fff}.footer .social .icon{color:#00264d;background-color:#fff;padding:.3em;border-radius:100%;font-size:22px}.footer .colophon{border-top:1px solid hsla(0,0%,100%,.1);margin-top:1.5em}@media (min-width:992px){.footer .colophon{margin-top:2em}}.footer-menu__link:hover{color:#fff}.t_translate-wrap{display:none}.doc-tooltip{background-color:#fff;font-family:Lora,serif;-webkit-box-shadow:0 0 100px 0 rgba(0,0,0,.15);box-shadow:0 0 100px 0 rgba(0,0,0,.15)}.doc-tooltip.bs-popover-auto[x-placement^=bottom]:before,.doc-tooltip.bs-popover-auto[x-placement^=top]:before,.doc-tooltip.bs-popover-bottom:before,.doc-tooltip.bs-popover-top:before{content:"";width:0;height:0;border-top:40px solid transparent;border-bottom:40px solid transparent;border-left:40px solid #fff;position:absolute;left:0;z-index:-1}.doc-tooltip.bs-popover-auto[x-placement^=top]:before,.doc-tooltip.bs-popover-top:before{bottom:-40px}.doc-tooltip.bs-popover-auto[x-placement^=bottom]:before,.doc-tooltip.bs-popover-bottom:before{top:-40px}.doc-tooltip.bs-popover-auto[x-placement^=bottom]:after,.doc-tooltip.bs-popover-auto[x-placement^=top]:after,.doc-tooltip.bs-popover-bottom:after,.doc-tooltip.bs-popover-top:after{content:"";width:15px;height:15px;-webkit-transform:rotate(45deg);transform:rotate(45deg);position:absolute;left:5px;z-index:-2}.doc-tooltip.bs-popover-auto[x-placement^=top]:after,.doc-tooltip.bs-popover-top:after{-webkit-box-shadow:5px 5px 70px 8px rgba(0,0,0,.15);box-shadow:5px 5px 70px 8px rgba(0,0,0,.15);bottom:-20px}.doc-tooltip.bs-popover-auto[x-placement^=bottom]:after,.doc-tooltip.bs-popover-bottom:after{-webkit-box-shadow:-5px -5px 70px 8px rgba(0,0,0,.15);box-shadow:-5px -5px 70px 8px rgba(0,0,0,.15);top:-20px}.doc-tooltip.doc-tooltip--note:after,.doc-tooltip.doc-tooltip--note:before{content:none}.tooltip__wrap{overflow:hidden;width:330px;padding:2rem;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}.tooltip__title{overflow:hidden;font-style:italic;margin-bottom:.5rem;font-size:1em;letter-spacing:0}.tooltip__content{font-size:14.4px;font-size:.9rem;font-style:italic;margin-bottom:0}.tooltip__close-btn{position:absolute;top:16px;top:1rem;right:16px;right:1rem;width:20px;height:20px;padding:0;background:none;border:0;cursor:pointer}.tooltip__close-btn:after,.tooltip__close-btn:before{content:"";position:absolute;height:20px;width:1px;background-color:#0073e6;top:0;left:50%}.tooltip__close-btn:after{-webkit-transform:rotate(45deg) translateX(-50%);transform:rotate(45deg) translateX(-50%)}.tooltip__close-btn:before{-webkit-transform:rotate(-45deg) translateX(-50%);transform:rotate(-45deg) translateX(-50%)}.tooltip__link{color:#0073e6;font-size:12.8px;font-size:.8rem;font-weight:100;text-transform:uppercase;letter-spacing:0;position:relative;display:inline-block;margin-top:1rem}.tooltip__link:after{content:"";position:absolute;left:100%;top:0;width:30px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAGCAYAAAAVMmT4AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gUPDDQNy1r5IQAAAH5JREFUGNNj+I8HTD704v+ZR1/gfCYGPODNlz8MLv3XGc4+/srAwMDAwHjx6df//jNuYVX84esfhg9f/jAI8LAw3G4yYGD8+vPv/ztvfmBVPP3wK4YZ+14wdIfJM5Q4SzIw/v///z8uZzRsf8rAw8bEUOIsCRHA58EXn36h8AF2435mx6vmAAAAAABJRU5ErkJggg==");background-repeat:no-repeat;bottom:0;background-position:50%}@media (max-width:991.98px){.chapter-nav__list--hidden:not(.show){display:none}}@media (min-width:992px){.chapter-nav__list--hidden{visibility:hidden;opacity:0;-webkit-transition:visibility .35s,opacity .35s;transition:visibility .35s,opacity .35s}.chapter-nav__list--hidden.active{visibility:visible;opacity:1}}@media (max-width:991.98px){.chapter-nav__list-wrap{max-width:300px;margin-left:auto;margin-right:auto;border-radius:4px}}@media (min-width:992px){.chapter-nav__wrap{position:absolute;left:2rem;top:1rem}}.chapter-link{background:none;border:none;color:#0073e6;padding:0;display:inline-block;font-size:.9em;font-weight:400;cursor:pointer;vertical-align:middle}.chapter-link:hover{text-decoration:underline}.chapter-link__title{float:left}.chapter-link__counter{margin-right:.3rem;display:inline-block;float:left}.chapter-nav__list{list-style-type:none;margin-bottom:0;padding:1rem}@media (min-width:992px){.chapter-nav__list{padding:0}}.chapter-nav__title{padding:1rem;color:#000;font-size:12.8px;font-size:.8rem;font-weight:700;border-bottom:1px solid #ccc}.chapter-nav__title .title__chapter{color:#8998a5}@media (min-width:992px){.chapter-nav__title{display:none}}.chapter-nav__item:not(:last-child){margin-bottom:1rem}@media (min-width:992px){.chapter-nav__item:not(:last-child){margin-bottom:0}}.chapter-nav__list--visible{margin-top:1rem}@media (min-width:992px){.chapter-nav__list--visible{margin-top:-.5rem}}.chapter-nav__list--visible .chapter-nav__item{display:inline-block}@media (min-width:992px){.chapter-nav__list--visible .chapter-nav__item{display:block}}#doc-content ::-webkit-scrollbar{width:1em;height:14px}#doc-content ::-webkit-scrollbar-track{background-color:#e6f3fe;border-radius:7px;border:2px solid #fff}#doc-content ::-webkit-scrollbar-thumb{background-color:#0073e6;border-radius:7px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAHCAYAAAABIM1CAAAALUlEQVQoU2N88+m/hggf4w0GLODJp//CLEwMUhI8jJexyT/7/l+OcdSAQRAGABbrTN6F2sNMAAAAAElFTkSuQmCC");background-repeat:no-repeat;background-position:50%}#doc-content table:not(.footnote){border:0}#doc-content table:not(.footnote) td{border-right:0;border-left:0}#doc-content table:not(.footnote):not(.highlighttable) td{min-width:220px}#doc-content table:not(.footnote) thead .head{border-right:0;border-left:0;text-transform:uppercase;color:#000;font-size:12px;font-size:.75rem;vertical-align:top}#doc-content table:not(.footnote) tr{font-size:12px;font-size:.75rem}#doc-content .footnote-reference{color:#193e5e;border:1px solid #193e5e;border-radius:3px;padding:0 .4rem;line-height:1.4}#doc-content .note-action{margin-top:.5rem}#doc-content .note-back-btn,#doc-content .note-close-btn{background:none;border:0;display:inline-block;color:#0073e6;font-size:1.2em;cursor:pointer}#doc-content .note-back-btn{position:relative}#doc-content .note-back-btn:before{content:"";top:0;bottom:0;width:1px;position:absolute;background-color:#0073e6;left:0}#doc-content .note-back-btn:hover{text-decoration:underline}#doc-content .docutils.footnote{color:#000;font-size:12.8px;font-size:.8rem;display:none;margin-bottom:2rem}#doc-content .docutils.footnote td{width:100%;float:left}#doc-content .docutils.footnote .fn-backref{color:#193e5e;border:1px solid #193e5e;border-radius:3px;padding:.2rem;line-height:1;display:inline-block;margin-bottom:.5rem}.block-comments{margin-top:4.4rem;padding-bottom:2rem}.block-comments__body p{font-family:Titillium Web,Geneva,Tahoma,sans-serif}.block-comments__header{border-bottom-color:#ccc!important;border-top-color:#eeeff0!important}.block-comments__header h6{color:#06c}.block-comments__img{width:56px}.block-comments__reply-anchor{margin-top:-5em;padding-top:5em}.block-comments__logout-link{display:none;padding-top:.25em}.block-comments__logout-link--icon{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#d83750;text-shadow:0 0 20px #000}.block-comments__logout-link--icon:hover{color:#fff}.block-comments__logout-link:hover{text-decoration:none}.block-comments__logout-link--visible{display:block;position:relative}.block-comments__input{margin-bottom:1em!important}.block-comments__toggle-btn{background:none;width:32px;width:2rem;height:32px;height:2rem}.block-comments__toggle-btn .docs-icon-minus,.block-comments__toggle-btn .docs-icon-plus{color:#06c;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.block-comments__toggle-btn .docs-icon-plus{display:none}.block-comments__toggle-btn.collapsed .docs-icon-plus{display:block}.block-comments__toggle-btn.collapsed .docs-icon-minus{display:none}.block-comments__item-btn{background:none;width:32px;width:2rem;height:24px;height:1.5rem;border:0}.block-comments__item-btn .it-collapse,.block-comments__item-btn .it-expand{color:#06c}.block-comments__item-btn.collapsed .it-collapse,.block-comments__item-btn .it-expand{display:none}.block-comments__item-btn.collapsed .it-expand{display:inline-block}.block-comments__item{padding-top:1em}.block-comments__item.hidden{opacity:.5}.block-comments__item.is-new{background-color:#e6f3fe;-webkit-animation:background-fade-highlight 2s ease-out 1 forwards;animation:background-fade-highlight 2s ease-out 1 forwards}.block-comments__content{word-wrap:break-word}.block-comments__name{color:#06c;font-weight:400;font-size:16px;font-size:1rem;letter-spacing:0}.block-comments__date,.block-comments__role{font-size:14px;line-height:21px}.block-comments__role{letter-spacing:.88px}.block-comments__paragraph{font-size:14px;line-height:21px}.block-comments__paragraph a{text-decoration:underline}.box-comment{position:relative;width:100%}.box-comment:not(.sending) .loading{display:none}.box-comment.sending .loading{margin-left:1em;display:inline-block!important;position:relative;overflow:visible;width:40px;z-index:1}.box-comment.sending .loading:before{border:5px solid #0073e6!important;top:60%}.box-comment textarea{min-height:5em;font-weight:400;border:1px solid #eeeff0;border-radius:5px}.box-comment textarea:focus{border:1px solid #596771}.box-comment textarea::-webkit-input-placeholder{color:#ccc}.box-comment textarea::-moz-placeholder{color:#ccc}.box-comment textarea::-ms-input-placeholder{color:#ccc}.box-comment textarea::placeholder{color:#ccc}.box-comment__login{display:-webkit-box;display:-ms-flexbox;display:flex;border:1px solid #edf5fc;border-radius:5px;padding:1em}.box-comment__legend{font-size:12px}.box-comment__user-image{border-radius:50%;position:relative;height:56px;width:56px;float:left}.box-comment__user-image--anon{margin:.25em .75em .25em .25em;background-color:#e8f2fc}.box-comment__user-image i{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.box-comment__buttons{float:left}.box-comment__required{float:right}.box-comment__required>span{font-size:.8em}.box-comment__submit{position:relative;overflow:hidden}.box-comment__submit .loading.no-bg{display:none;width:30px;height:0;content:" ";overflow:visible;margin-bottom:5px;margin-left:-15px;margin-right:5px}.box-comment__submit .loading.no-bg:before{left:auto}.box-comment__submit>div:not(.loading){display:inline}.box-comment__suggestions__tooltip .tooltip__content{font-style:normal;padding-left:1.75em;font-size:.95em}.missing_permission{width:100%}.missing_permission__text{border:1px solid #edf5fc;border-radius:5px;padding:1em}@-webkit-keyframes background-fade-highlight{to{background-color:transparent}}@keyframes background-fade-highlight{to{background-color:transparent}}@media (max-width:767.98px){.sidebar-nav{padding-top:5.5rem}}.sidebar-nav a{text-decoration:none;color:#596771;font-size:14.4px;font-size:.9rem;display:block;line-height:1.6;margin-bottom:1rem;margin-top:1rem}.sidebar-nav a.current_item{position:relative;z-index:1;margin-bottom:1rem;margin-top:1rem;-webkit-transition:margin-bottom .3s,margin-top .3s;transition:margin-bottom .3s,margin-top .3s}.sidebar-nav a.current_item:before{content:"";position:absolute;top:-8px;top:-.5rem;bottom:-8px;bottom:-.5rem;left:-8px;left:-.5rem;right:-8px;right:-.5rem;background-color:#bffffd;z-index:-1}.sidebar-nav a:focus,.sidebar-nav a:hover{text-decoration:underline}.sidebar-nav>.sidebar-list--wrapper{padding:1rem}@media (min-width:768px){.sidebar-nav>.sidebar-list--wrapper{padding:0}}.sidebar-nav>.sidebar-list--wrapper>ul>li{padding:.1rem 3rem .1rem 1rem}.sidebar-nav>.sidebar-list--wrapper>ul>li>a{font-weight:700}.sidebar-nav>.sidebar-list--wrapper ul{list-style-type:none;padding-left:0;margin-bottom:0}.sidebar-nav>.sidebar-list--wrapper ul.current>li.current{background-color:#f6fbff}.sidebar-nav>.sidebar-list--wrapper ul.current>li.current a{color:#004e95}.sidebar-nav>.sidebar-list--wrapper ul ul{padding-left:1rem}.sidebar-nav>.sidebar-list--wrapper.figures-index--menu,.sidebar-nav>.sidebar-list--wrapper.glossary-mobile--menu,.sidebar-nav>.sidebar-list--wrapper.table-index--menu{padding-top:1rem}.sidebar-nav>.sidebar-list--wrapper.figures-index--menu>ul>li,.sidebar-nav>.sidebar-list--wrapper.glossary-mobile--menu>ul>li,.sidebar-nav>.sidebar-list--wrapper.table-index--menu>ul>li{padding-bottom:0;padding-top:.5rem}#glossary-page>.chapter-header{display:none}#glossary-page .chapter-header{padding-top:2rem;padding-bottom:2rem;padding-left:.5rem;overflow:hidden}#glossary-page .chapter-header h2{font-size:128px;font-size:8rem;font-family:Lora,serif;line-height:1}#glossary-page .glossary-page__btn{border:0;background:none;cursor:pointer;color:#0073e6;display:block;width:100%;text-align:left;text-transform:uppercase;-webkit-transition:color .3s;transition:color .3s}#glossary-page .glossary-page__btn .docs-icon-minus,#glossary-page .glossary-page__btn .docs-icon-plus{color:#0073e6}#glossary-page .glossary-page__btn .docs-icon-minus{display:inline-block}#glossary-page .glossary-page__btn .docs-icon-plus{display:none}#glossary-page .glossary-page__btn.collapsed{color:#596771}#glossary-page .glossary-page__btn.collapsed .docs-icon-minus{display:none}#glossary-page .glossary-page__btn.collapsed .docs-icon-plus{display:inline-block}#glossary-page .term-content{padding-left:2.3rem}#glossary-page .term-content,#glossary-page .term-content p{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#glossary-page .term-content:last-of-type.show,#glossary-page dt:last-of-type .glossary-page__btn.collapsed{border-bottom:2px solid #eaebed}.glossary-page__copy-link-wrap{color:#0073e6}.glossary-page__copy-link{background:none;border:none;color:#0073e6;cursor:pointer}@media (max-width:767.98px){.return-to-top{bottom:4rem}}.return-to-top i:before{margin:0}@media (max-width:767.98px){.modal.modal-sm-full .modal-dialog{margin:0;max-width:none}.modal.modal-sm-full .modal-dialog .modal-content{margin:0;width:100vw;height:100vh;border-radius:0!important;border:none}}@font-face{font-family:italia-icon-font;src:url(../font/italia-icon-font.eot?94539880);src:url(../font/italia-icon-font.eot?94539880#iefix) format("embedded-opentype"),url(../font/italia-icon-font.woff2?94539880) format("woff2"),url(../font/italia-icon-font.woff?94539880) format("woff"),url(../font/italia-icon-font.ttf?94539880) format("truetype"),url(../font/italia-icon-font.svg?94539880#italia-icon-font) format("svg");font-weight:400;font-style:normal}[class*=" it-"]:before,[class^=it-]:before{font-family:italia-icon-font;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;font-smoothing:antialiased}.it-app:before{content:"\e800"}.it-app-1:before{content:"\e801"}.it-arrow-down:before{content:"\e802"}.it-arrow-left:before{content:"\e803"}.it-arrow-right:before{content:"\e804"}.it-arrow-up:before{content:"\e805"}.it-behance:before{content:"\e806"}.it-calendar:before{content:"\e807"}.it-camera:before{content:"\e808"}.it-cancel:before{content:"\e809"}.it-check:before{content:"\e80a"}.it-chevron-left:before{content:"\e80d"}.it-chevron-right:before{content:"\e80e"}.it-close:before{content:"\e80f"}.it-collapse:before{content:"\e810"}.it-comment:before{content:"\e811"}.it-copy:before{content:"\e812"}.it-download:before{content:"\e813"}.it-drop-down:before{content:"\e814"}.it-drop-up:before{content:"\e815"}.it-help:before{content:"\e816"}.it-expand-media:before{content:"\e817"}.it-expand:before{content:"\e818"}.it-external-link:before{content:"\e819"}.it-facebook:before{content:"\e81a"}.it-favorite:before{content:"\e81b"}.it-file:before{content:"\e81c"}.it-flickr:before{content:"\e81d"}.it-github:before{content:"\e81e"}.it-googleplus:before{content:"\e81f"}.it-no:before{content:"\e820"}.it-instagram:before{content:"\e821"}.it-link:before{content:"\e822"}.it-linkedin:before{content:"\e823"}.it-list:before{content:"\e824"}.it-lock:before{content:"\e825"}.it-mail:before{content:"\e826"}.it-medium:before{content:"\e827"}.it-more-actions:before{content:"\e828"}.it-more-items:before{content:"\e829"}.it-pdf:before{content:"\e82a"}.it-pin:before{content:"\e82b"}.it-print:before{content:"\e82c"}.it-refresh:before{content:"\e82f"}.it-rss:before{content:"\e830"}.it-search:before{content:"\e831"}.it-settings:before{content:"\e832"}.it-share:before{content:"\e833"}.it-slideshare:before{content:"\e834"}.it-twitter:before{content:"\e835"}.it-unlock:before{content:"\e836"}.it-upload:before{content:"\e837"}.it-video:before{content:"\e838"}.it-warning:before{content:"\e839"}.it-whatsapp:before{content:"\e83a"}.it-youtube-text:before{content:"\e83b"}.it-youtube:before{content:"\e83c"}.it-zoom-in:before{content:"\e83d"}.it-zoom-out:before{content:"\e83e"}.it-error:before{content:"\e83f"}.it-info:before{content:"\e840"}.it-paper-plane:before{content:"\e841"} \ No newline at end of file diff --git a/refs/pull/212/merge/it/_static/data/glossary.json b/refs/pull/212/merge/it/_static/data/glossary.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/refs/pull/212/merge/it/_static/data/glossary.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/refs/pull/212/merge/it/_static/doctools.js b/refs/pull/212/merge/it/_static/doctools.js new file mode 100644 index 000000000..c3db08d1c --- /dev/null +++ b/refs/pull/212/merge/it/_static/doctools.js @@ -0,0 +1,264 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + parent.insertBefore( + span, + parent.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.highlightSearchWords(); + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords: () => { + const highlight = + new URLSearchParams(window.location.search).get("highlight") || ""; + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + const url = new URL(window.location); + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + const blacklistedElements = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", + ]); + document.addEventListener("keydown", (event) => { + if (blacklistedElements.has(document.activeElement.tagName)) return; // bail for input elements + if (event.altKey || event.ctrlKey || event.metaKey) return; // bail with special keys + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + case "Escape": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.hideSearchWords(); + event.preventDefault(); + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/refs/pull/212/merge/it/_static/documentation_options.js b/refs/pull/212/merge/it/_static/documentation_options.js new file mode 100644 index 000000000..860ac2179 --- /dev/null +++ b/refs/pull/212/merge/it/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: 'version: latest', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: false, +}; \ No newline at end of file diff --git a/refs/pull/212/merge/it/_static/file.png b/refs/pull/212/merge/it/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/it/_static/font/docs-italia.eot b/refs/pull/212/merge/it/_static/font/docs-italia.eot new file mode 100644 index 0000000000000000000000000000000000000000..169c6163b35c962c959ee57b2c2257fd4ae9f981 GIT binary patch literal 11192 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 k!RrF@`>@1b^2_9IJhy + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/it/_static/font/docs-italia.ttf b/refs/pull/212/merge/it/_static/font/docs-italia.ttf new file mode 100644 index 0000000000000000000000000000000000000000..96a7767f4dd660a0d79cc2678274189f10fb7ad4 GIT binary patch literal 11012 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 literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/it/_static/font/docs-italia.woff b/refs/pull/212/merge/it/_static/font/docs-italia.woff new file mode 100644 index 0000000000000000000000000000000000000000..cda2cacb9b6c8afb3c845bff87d03a2b034e3dea GIT binary patch literal 11092 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 B(DMKQ literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/it/_static/font/italia-icon-font.eot b/refs/pull/212/merge/it/_static/font/italia-icon-font.eot new file mode 100644 index 0000000000000000000000000000000000000000..5242e53839d7d1643699f0b6fc9a012d4f4d5f56 GIT binary patch literal 23672 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 + + +Copyright (C) 2018 by original authors @ fontello.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/it/_static/font/italia-icon-font.ttf b/refs/pull/212/merge/it/_static/font/italia-icon-font.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f290bd6e060305044fed76427a695f7cf364aa71 GIT binary patch literal 23472 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 QzV+UM@c%$i^b_(w0enpTDF6Tf literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/it/_static/font/italia-icon-font.woff b/refs/pull/212/merge/it/_static/font/italia-icon-font.woff new file mode 100644 index 0000000000000000000000000000000000000000..101f487bc8f60c2e787058058785bbec8f2a43cf GIT binary patch literal 13888 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 Y*7{$1T|uO;#mK-h0I+Vv4*(^b literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/it/_static/font/italia-icon-font.woff2 b/refs/pull/212/merge/it/_static/font/italia-icon-font.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4598d5a9919533a1c6aba2b07bddaec3786da1df GIT binary patch literal 11952 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 CrWaHI literal 0 HcmV?d00001 diff --git a/refs/pull/212/merge/it/_static/images/agid-logo.svg b/refs/pull/212/merge/it/_static/images/agid-logo.svg new file mode 100644 index 000000000..a81f5eb84 --- /dev/null +++ b/refs/pull/212/merge/it/_static/images/agid-logo.svg @@ -0,0 +1,25 @@ + + + +Logo dell&Agenzia per l&Italia Digitale +Emblema della Repubblica Italiana con accanto l&acronimo AGID + + + + + + + + + + + + + + + + + diff --git a/refs/pull/212/merge/it/_static/images/may.svg b/refs/pull/212/merge/it/_static/images/may.svg new file mode 100644 index 000000000..53670ba97 --- /dev/null +++ b/refs/pull/212/merge/it/_static/images/may.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/refs/pull/212/merge/it/_static/images/must.svg b/refs/pull/212/merge/it/_static/images/must.svg new file mode 100644 index 000000000..177c3c51e --- /dev/null +++ b/refs/pull/212/merge/it/_static/images/must.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/refs/pull/212/merge/it/_static/images/must_not.svg b/refs/pull/212/merge/it/_static/images/must_not.svg new file mode 100644 index 000000000..8c0c0d852 --- /dev/null +++ b/refs/pull/212/merge/it/_static/images/must_not.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/refs/pull/212/merge/it/_static/images/should.svg b/refs/pull/212/merge/it/_static/images/should.svg new file mode 100644 index 000000000..c1f35d655 --- /dev/null +++ b/refs/pull/212/merge/it/_static/images/should.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/refs/pull/212/merge/it/_static/images/should_not.svg b/refs/pull/212/merge/it/_static/images/should_not.svg new file mode 100644 index 000000000..88e64a64c --- /dev/null +++ b/refs/pull/212/merge/it/_static/images/should_not.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/refs/pull/212/merge/it/_static/images/team-digitale-logo.svg b/refs/pull/212/merge/it/_static/images/team-digitale-logo.svg new file mode 100644 index 000000000..fa557011d --- /dev/null +++ b/refs/pull/212/merge/it/_static/images/team-digitale-logo.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/refs/pull/212/merge/it/_static/jquery-3.6.0.js b/refs/pull/212/merge/it/_static/jquery-3.6.0.js new file mode 100644 index 000000000..fc6c299b7 --- /dev/null +++ b/refs/pull/212/merge/it/_static/jquery-3.6.0.js @@ -0,0 +1,10881 @@ +/*! + * jQuery JavaScript Library v3.6.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2021-03-02T17:08Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.6.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.6 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2021-02-16 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the primary Deferred + primary = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + primary.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( primary.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return primary.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); + } + + return primary.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + + // Support: Chrome 86+ + // In Chrome, if an element having a focusout handler is blurred by + // clicking outside of it, it invokes the handler synchronously. If + // that handler calls `.remove()` on the element, the data is cleared, + // leaving `result` undefined. We need to guard against this. + return result && result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + which: true +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + // Suppress native focus or blur as it's already being fired + // in leverageNative. + _default: function() { + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. + tr.style.height = "1px"; + trChild.style.height = "9px"; + + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is display: block + // gets around this issue. + trChild.style.display = "block"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ).filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ).map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + +originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

backup-restore.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/it/contribute.html b/refs/pull/212/merge/it/contribute.html new file mode 100644 index 000000000..3496b8b15 --- /dev/null +++ b/refs/pull/212/merge/it/contribute.html @@ -0,0 +1,1261 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | contribute.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

contribute.rst

+

Instruction to join in the development here.

+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/it/defined-terms.html b/refs/pull/212/merge/it/defined-terms.html new file mode 100644 index 000000000..d4c248749 --- /dev/null +++ b/refs/pull/212/merge/it/defined-terms.html @@ -0,0 +1,1359 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | defined-terms.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

defined-terms.rst

+

Di seguito le descrizioni di acronimi e definizioni, correlati al presente documento utili ad approfondimenti su tematiche che completano l' it-wallet e i componenti con i quali interagisce.

+
+

Acronimi

+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Acronimo

Descrizione

OID4VP

OpenID for Verifiable Presentation

PID

Person Identification Data

VC

Verifiable Credential

VP

Verifiable Presentation

API

Application Programming Interface. Insieme componenti previsti per semplificare gli scenari di integrazione di uno specifico Sistema.

+
+
+

Definizioni

+ ++++ + + + + + + + + + + + + + +

Definizione

Descrizione

Wallet Instance

Mobile App che gestisce, memorizza e protegge le Verifiable Credentials di un holder e ne consente la presentazione ad una Relying Party

Relying Party

Entità che riceve da una Wallet Instance una o più VP e processa le stesse

+
+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/it/genindex.html b/refs/pull/212/merge/it/genindex.html new file mode 100644 index 000000000..9a2e2af14 --- /dev/null +++ b/refs/pull/212/merge/it/genindex.html @@ -0,0 +1,1253 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Index + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + +

Index

+ +
+ +
+ + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/it/index.html b/refs/pull/212/merge/it/index.html new file mode 100644 index 000000000..78b5183b6 --- /dev/null +++ b/refs/pull/212/merge/it/index.html @@ -0,0 +1,1397 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | The Italian EUDI Wallet implementation profile + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + +
+

The Italian EUDI Wallet implementation profile

+

[TODO INTRO]

+

Introduzione

+

cos'è eIDAS

+

cos’è IT-Wallet

+

scopo delle regole tecniche

+

In this documentation you can find the technical specification +for implementing the following components:

+
+
    +
  • Entities of the ecosystem according to EIDAS-ARF.

  • +
  • Infrastructure of trust attesting realiability and eligibility of the participants.

  • +
  • PID and EAAs data schemes and attribute sets.

  • +
  • PID/EAA in MDL CBOR format.

  • +
  • PID/EAA in SD-JWT format.

  • +
  • Wallet Solution general architecture.

  • +
  • Wallet Instance Attestation data model in JWS format.

  • +
  • Issuance of PID/EAA according to OpenID4VCI.

  • +
  • Presentation of PID/EAA according to OpenID4VP.

  • +
  • Presentation of pseudonyms according to SIOPv2.

  • +
  • PID/EAA backup and restore mechanisms.

  • +
  • PID/EAA revocation lists.

  • +
+
+
+

Index of content

+
+ +
+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/it/issuance.html b/refs/pull/212/merge/it/issuance.html new file mode 100644 index 000000000..dac374446 --- /dev/null +++ b/refs/pull/212/merge/it/issuance.html @@ -0,0 +1,1308 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | issuance.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

issuance.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/it/objects.inv b/refs/pull/212/merge/it/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..adbbdf73562e9157c4391746ad67d425cda4b5a7 GIT binary patch literal 678 zcmV;X0$KedAX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkZXk{Qt zbYX01VQwHrRYXZ3S7B^yWpp5EZE$R5ZDnqBVRUJ4ZXj@SZ)Rz1WeOu8R%LQ?X>V>i zAa-SPb7^mGIv{LebY*jN3L_v?Xk{RBWo=<;Ze(S0Aa78b#rNMXCQiPX<{x4c-n=PL2uk35QXpl6_z+tsn?#H!yYO{YO9>FnPh3P zv0&U}|9y=C!(g&|W4?iT?^)O$#Q1kzxCMvCLhn$1lVW7i5h8S{Dl7kRj3KXTg zl80l2c$YP(Wa|N}B++p~)27PD!Pu6Cqe*>aT$&-Y?TF4}CtP`RlK*+fma)*Gt|BWf zWz_aljA4`|Ck|F=<{N!yGK~&$y{nV5Ql>{)u9ITEGY>A)^9`@tMJIR4!apJ6`F4z=DULq5mx2pmR=fwSBy{RO9|47YXWKIDMi% zK?_y}TEkdPQvwvT6jqW4dcc?>m3enVm7HNmx$EQ!Xjexr{tkjpSo)C1ifZJ&Y+uF< z@B4RhOXo$mFPA{veoCT#$al5{{d*g{s|S7R^^qF8vw`MvMz5b_NiE|4fQ9FhHGPsv Mtb) + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | pid-eaa-data.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

pid-eaa-data.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/it/pid-eaa-mdoc-cbor.html b/refs/pull/212/merge/it/pid-eaa-mdoc-cbor.html new file mode 100644 index 000000000..45229946c --- /dev/null +++ b/refs/pull/212/merge/it/pid-eaa-mdoc-cbor.html @@ -0,0 +1,1308 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | pid-eaa-mdoc-cbor.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

pid-eaa-mdoc-cbor.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/it/pid-eaa-sd-jwt.html b/refs/pull/212/merge/it/pid-eaa-sd-jwt.html new file mode 100644 index 000000000..00f6a2381 --- /dev/null +++ b/refs/pull/212/merge/it/pid-eaa-sd-jwt.html @@ -0,0 +1,1308 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | pid-eaa-sd-jwt.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

pid-eaa-sd-jwt.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/it/pseudonyms.html b/refs/pull/212/merge/it/pseudonyms.html new file mode 100644 index 000000000..0d610c1be --- /dev/null +++ b/refs/pull/212/merge/it/pseudonyms.html @@ -0,0 +1,1308 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | pseudonyms.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

pseudonyms.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/it/revocation-lists.html b/refs/pull/212/merge/it/revocation-lists.html new file mode 100644 index 000000000..5cdf58d7c --- /dev/null +++ b/refs/pull/212/merge/it/revocation-lists.html @@ -0,0 +1,1308 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | revocation-lists.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

revocation-lists.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/it/search.html b/refs/pull/212/merge/it/search.html new file mode 100644 index 000000000..054dcf081 --- /dev/null +++ b/refs/pull/212/merge/it/search.html @@ -0,0 +1,1267 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Search + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + + +
+ +
+ + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/it/searchindex.js b/refs/pull/212/merge/it/searchindex.js new file mode 100644 index 000000000..d9eae94c9 --- /dev/null +++ b/refs/pull/212/merge/it/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["backup-restore", "contribute", "defined-terms", "index", "issuance", "pid-eaa-data", "pid-eaa-mdoc-cbor", "pid-eaa-sd-jwt", "pseudonyms", "revocation-lists", "ssi-introduction", "standards", "trust", "wallet-instance-attestation", "wallet-solution"], "filenames": ["backup-restore.rst", "contribute.rst", "defined-terms.rst", "index.rst", "issuance.rst", "pid-eaa-data.rst", "pid-eaa-mdoc-cbor.rst", "pid-eaa-sd-jwt.rst", "pseudonyms.rst", "revocation-lists.rst", "ssi-introduction.rst", "standards.rst", "trust.rst", "wallet-instance-attestation.rst", "wallet-solution.rst"], "titles": ["backup-restore.rst", "contribute.rst", "defined-terms.rst", "The Italian EUDI Wallet implementation profile", "issuance.rst", "pid-eaa-data.rst", "pid-eaa-mdoc-cbor.rst", "pid-eaa-sd-jwt.rst", "pseudonyms.rst", "revocation-lists.rst", "ssi-introduction.rst", "Standards", "trust.rst", "wallet-instance-attestation.rst", "wallet-solution.rst"], "terms": {"tutti": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "gli": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "esempi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "contenuti": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "questa": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "documentazion": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "sono": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "da": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "intendersi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "come": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "non": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "normativi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "all": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "exampl": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "contain": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "document": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "ar": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "meant": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "norm": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "what": [0, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "useful": [0, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "todo": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "req": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "1": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "2": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "tabl": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "paramet": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "claim": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "descript": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "kei": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "valu": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "instruct": 1, "join": 1, "develop": 1, "here": 1, "di": 2, "seguito": 2, "le": 2, "descrizioni": 2, "e": 2, "correlati": 2, "al": 2, "present": [2, 3], "documento": 2, "utili": 2, "ad": 2, "approfondimenti": 2, "su": 2, "tematich": 2, "che": 2, "completano": 2, "l": 2, "wallet": 2, "i": 2, "componenti": 2, "con": 2, "quali": 2, "interagisc": 2, "acronimo": 2, "descrizion": 2, "oid4vp": 2, "openid": 2, "verifi": 2, "pid": [2, 3], "person": 2, "identif": 2, "data": [2, 3], "vc": 2, "credenti": 2, "vp": 2, "api": 2, "applic": 2, "program": 2, "interfac": 2, "insiem": 2, "previsti": 2, "per": 2, "semplificar": 2, "scenari": 2, "integrazion": 2, "uno": 2, "specifico": 2, "sistema": 2, "definizion": 2, "instanc": [2, 3], "mobil": 2, "app": 2, "gestisc": 2, "memorizza": 2, "protegg": 2, "un": 2, "holder": 2, "ne": 2, "consent": 2, "la": 2, "presentazion": 2, "una": 2, "reli": 2, "parti": 2, "entit\u00e0": 2, "ricev": 2, "o": 2, "pi\u00f9": 2, "processa": 2, "stess": 2, "intro": 3, "introduzion": 3, "co": 3, "\u00e8": 3, "eida": 3, "IT": 3, "scopo": 3, "dell": 3, "regol": 3, "tecnich": 3, "In": 3, "you": 3, "can": 3, "find": 3, "technic": 3, "specif": 3, "follow": 3, "compon": 3, "entiti": 3, "ecosystem": 3, "accord": 3, "arf": 3, "infrastructur": 3, "trust": 3, "attest": 3, "realiabl": 3, "elig": 3, "particip": 3, "eaa": 3, "scheme": 3, "attribut": 3, "set": 3, "mdl": 3, "cbor": 3, "format": 3, "sd": 3, "jwt": 3, "solut": 3, "gener": 3, "architectur": 3, "model": 3, "jw": 3, "issuanc": 3, "openid4vci": 3, "openid4vp": 3, "pseudonym": 3, "siopv2": 3, "backup": 3, "restor": 3, "mechan": 3, "revoc": 3, "list": 3, "ssi": 3, "introduct": 3, "rst": 3, "properti": 3, "requir": 3, "consider": 3, "librari": 3, "code": 3, "snippet": 3, "extern": 3, "refer": 3, "defin": 3, "term": 3, "acronimi": 3, "definizioni": 3, "mdoc": 3, "contribut": 3, "standard": 3}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"backup": 0, "restor": 0, "rst": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "gener": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "properti": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "requir": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "attribut": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "implement": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "consider": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "librari": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "code": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "snippet": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "extern": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "refer": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "contribut": 1, "defin": 2, "term": 2, "acronimi": 2, "definizioni": 2, "The": 3, "italian": 3, "eudi": 3, "wallet": [3, 13, 14], "profil": 3, "index": 3, "content": 3, "issuanc": 4, "pid": [5, 6, 7], "eaa": [5, 6, 7], "data": 5, "mdoc": 6, "cbor": 6, "sd": 7, "jwt": 7, "pseudonym": 8, "revoc": 9, "list": 9, "ssi": 10, "introduct": 10, "standard": 11, "trust": 12, "instanc": 13, "attest": 13, "solut": 14}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.todo": 2, "sphinx": 56}}) \ No newline at end of file diff --git a/refs/pull/212/merge/it/ssi-introduction.html b/refs/pull/212/merge/it/ssi-introduction.html new file mode 100644 index 000000000..17f026a2b --- /dev/null +++ b/refs/pull/212/merge/it/ssi-introduction.html @@ -0,0 +1,1308 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | ssi-introduction.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

ssi-introduction.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/it/standards.html b/refs/pull/212/merge/it/standards.html new file mode 100644 index 000000000..e70988b8e --- /dev/null +++ b/refs/pull/212/merge/it/standards.html @@ -0,0 +1,1256 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Standards + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

Standards

+

TODO

+
+ + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/it/trust.html b/refs/pull/212/merge/it/trust.html new file mode 100644 index 000000000..c9d3677e2 --- /dev/null +++ b/refs/pull/212/merge/it/trust.html @@ -0,0 +1,1308 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | trust.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

trust.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/it/wallet-instance-attestation.html b/refs/pull/212/merge/it/wallet-instance-attestation.html new file mode 100644 index 000000000..17afb37e4 --- /dev/null +++ b/refs/pull/212/merge/it/wallet-instance-attestation.html @@ -0,0 +1,1308 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | wallet-instance-attestation.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

wallet-instance-attestation.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/refs/pull/212/merge/it/wallet-solution.html b/refs/pull/212/merge/it/wallet-solution.html new file mode 100644 index 000000000..89ae6834a --- /dev/null +++ b/refs/pull/212/merge/it/wallet-solution.html @@ -0,0 +1,1308 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | wallet-solution.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

wallet-solution.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file