a,a:active,a:hover{outline:0}h1{margin:.67em 0}b,dt,strong{font-weight:700}h1 .guilabel,h2 .guilabel,h3 .guilabel,h4 .guilabel,h5 .guilabel,h6 .guilabel{font-style:italic}a>em,address,cite{font-style:normal}q{quotes:"\201C""\201D""\2018""\2019"}sub,sup{font-size:75%;line-height:0;vertical-align:baseline}textarea{vertical-align:top}sup{top:-.5em}sub{bottom:-.25em}body.no-scroll,svg:not(:root){overflow:hidden}h1,h2,h3,hr{margin-top:20px}h1,h2,h3,h4,h5,h6,ol,ul{margin-bottom:10px}button,input,select,textarea{font-size:100%;margin:0}hr{margin-bottom:20px}button,input{line-height:normal}body{line-height:1.428571429}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox]{box-sizing:border-box;padding:0}input[type=search]{-webkit-appearance:textfield;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}table{border-spacing:0;max-width:100%}@media print{blockquote,img,pre,tr{page-break-inside:avoid}*{background:0 0!important;box-shadow:none!important;color:#000!important;text-shadow:none!important}a,a:visited{text-decoration:underline}blockquote,pre{border:1px solid #999}thead{display:table-header-group}@page{margin:2cm .5cm}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}}body,div.highlight{background-color:#fff}body{font-size:14px}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}button,input,select[multiple],textarea{background-image:none}a:focus,input[type=checkbox]:focus,input[type=file]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}label{display:inline-block}hr{border-top:1px solid #eee;height:0}small{font-size:85%}div.body td{text-align:left}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{color:#999;font-weight:400;line-height:1}h4,h5,h6{margin-top:10px}blockquote p:last-child,div.body li>p.first,li div.line-block,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}address{margin-bottom:20px}dd,dt{line-height:1.428571429}blockquote{border-left:5px solid #eee;margin:0 0 20px;padding:10px 20px}blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}blockquote small{color:#999;display:block}blockquote small:before{content:"\2014 \00A0"}blockquote:after,blockquote:before,q:after,q:before{content:""}.container{margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}.container:after,.container:before{content:" ";display:table}.container:after{clear:both}.fa-pull-left,.fa4-pull-left{float:left}@media (min-width:768px){.container{max-width:750px}}@media (min-width:992px){.container{max-width:970px}}label:not([for*=-message-rating]){font-weight:700;margin-bottom:5px}input[type=checkbox]{line-height:normal;margin:4px 0 0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}dl{margin-bottom:15px}input[type=checkbox][disabled]{cursor:not-allowed}dd,dd table,dd ul{margin-bottom:10px}.fa-pull-right,.fa4-pull-right{float:right}input[type=text]:disabled{color:#333}th{text-align:left}.fa-fw,.fa-li,.fa-stack-1x,.fa-stack-2x,.fa4-fw,.fa4-li{text-align:center}.line-block .line-block{margin-bottom:0;margin-top:0}.fa,.fab,.fal,.far,.fas,[class*=icon-]{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-style:normal;font-variant:normal;line-height:1}.far,[class*=icon-]{font-weight:400}@media (min-width:1200px){.container{max-width:1170px}}.fa-stack,.fa4{display:inline-block}@font-face{font-family:icomoon;font-style:normal;font-weight:800;src:url('/cats-d8c4vu/media.mongodb.org/fonts/icomoon.woff?qcwgdc')) format("woff"),url('/cats-d8c4vu/media.mongodb.org/fonts/icomoon.svg?qcwgdc#icomoon')) format("svg")}[class*=icon-]{speak:none;font-feature-settings:normal;font-family:icomoon}:root{--black:#001e2b;--gray-dark4:#112733;--gray-dark3:#1c2d38;--gray-dark2:#3d4f58;--gray-dark1:#5c6c75;--gray-base:#889397;--gray-light1:#c1c7c6;--gray-light2:#e8edeb;--gray-light3:#f9fbfa;--mongodb-green:#13aa52;--mongodb-green:var(--leaf);--blue-dark3:#0c2657;--blue-dark2:#083c90;--blue-dark1:#1254b7;--blue-base:#016bf8;--blue-light1:#0498ec;--blue-light2:#c3e7fe;--blue-light3:#e1f7ff;--green-dark3:#023430;--green-dark2:#00684a;--green-dark1:#00a35c;--green-base:#00ed64;--green-light1:#71f6ba;--green-light2:#c0fae6;--green-light3:#e3fcf7;--leaf:#13aa52;--fern:#12924f;--forest:#116149;--fog:#b8c4c2;--graphite:#21313c;--white:#fff;--day-spa:#e8edeb;--spring:#91c851;--daffodile:#ffdd49;--mongodb-green-light:#c2e0b4;--mongodb-green-neutral:#eff6ec;--green-secondary:#3c6626;--blush:#f4758b;--blush-light:#f9c7d0;--blush-neutral:#fdf1f2;--air:#c2deff;--air-light:#e7f0f9;--air-neutral:#f3f7fd;--marigold:#f4b65d;--marigold-light:#f6d29d;--marigold-neutral:#fff7ee;--tomato:#ef4c4c;--light-grey-green:#c2e0b4;--light-tan:#f6d29d;--charcoal-grey-two:#424950;--grey-primary:#b3bbc1;--grey-secondary:#616161;--light-grey-primary:#e0e7e8;--light-grey-secondary:#f5f6f7;--primary-shadow:rgba(0,0,0,.1);--mms-alert-blue:#43b1e5;--mms-alert-red:#ef4c4c;--mms-alert-red-dark:color(var(--alert-red) tint(25%));--mms-gray1:#464c4f;--mms-gray5:#babdbe;--mms-green2:#13aa52;--mms-warning-text:#ffb618;--sans-serif:"Euclid Circular A","Helvetica Neue",sans-serif;--monospace:"Source Code Pro",monospace;--hr-style:1px solid #e0e7e8;--hr-style:1px solid var(--light-grey-primary);--image-chevron:url('data:image/svg+xml;utf8,') no-repeat center;--chevron-width:16px;--image-caret:url('data:image/svg+xml;utf8,') no-repeat center;--caret-width:10px;--exclamation-circle:"\f06a";--check-circle:"\f058";--lg-color-dark-mode:var(--day-spa)} /*! * Font Awesome Free 5.3.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */.fa,.fab,.fal,.far,.fas{font-feature-settings:normal;display:inline-block;text-rendering:auto}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x,.fa-stack-2x,.fa4-2x,.fa4-stack-2x{font-size:2em}.fa-3x,.fa4-3x{font-size:3em}.fa-4x,.fa4-4x{font-size:4em}.fa-5x,.fa4-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{width:1.25em}.fa-ul{margin-left:2.5em;padding-left:0}.fa-li{left:-2em;line-height:inherit;position:absolute;width:2em}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa.fa-pull-left,.fa4.fa4-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fa4.fa4-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin,.fa4-spin{animation:fa-spin 2s linear infinite}.fa-pulse,.fa4-pulse{animation:fa-spin 1s steps(8) infinite}.fa-rotate-90,.fa4-rotate-90{transform:rotate(90deg)}.fa-rotate-180,.fa4-rotate-180{transform:rotate(180deg)}.fa-rotate-270,.fa4-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal,.fa4-flip-horizontal{transform:scaleX(-1)}.fa-flip-vertical,.fa4-flip-vertical{transform:scaleY(-1)}.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90,:root .fa4-flip-horizontal,:root .fa4-flip-vertical,:root .fa4-rotate-180,:root .fa4-rotate-270,:root .fa4-rotate-90{filter:none}.fa-stack{height:2em;line-height:2em;position:relative;vertical-align:middle;width:2em}.fa4-li{position:absolute}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;width:100%}.fa-stack-1x,.fa4-stack-1x{line-height:inherit}.fa-inverse,.fa4-inverse{color:#fff}.fa-500px:before,.fa4-500px:before{content:"\f26e"}@font-face{font-family:Font Awesome\ 5 Brands;font-style:normal;font-weight:400;src:url('/cats-d8c4vu/use.fontawesome.com/releases/v5.3.1/webfonts/fa-brands-400.woff')) format("woff"),url('/cats-d8c4vu/use.fontawesome.com/releases/v5.3.1/webfonts/fa-regular-400.eot?#iefix')) format("embedded-opentype"),url('/cats-d8c4vu/use.fontawesome.com/releases/v5.3.1/webfonts/fa-regular-400.svg#fontawesome')) format("svg")}@font-face{font-family:Font Awesome\ 5 Free;font-style:normal;font-weight:900;src:url('/cats-d8c4vu/use.fontawesome.com/releases/v5.3.1/webfonts/fa-solid-900.woff')) format("woff"),url('/cats-d8c4vu/use.fontawesome.com/releases/v5.3.1/webfonts/fa-solid-900.svg#fontawesome')) format("svg")}.fa,.fas{font-weight:900} /*! * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) */@font-face{font-family:FontAwesome4;font-style:normal;font-weight:400;src:url(/docs/manual/static/fontawesome4-webfont-20fd1704ea223900efa9fd4e869efb08.woff2) format("woff2"),url(/docs/manual/static/fontawesome4-webfont-f691f37e57f04c152e2315ab7dbad881.woff) format("woff"),url(/docs/manual/static/fontawesome4-webfont-1e59d2330b4c6deb84b340635ed36249.ttf) format("truetype")}.fa4{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font:14px/1 FontAwesome4;font-size:inherit}.charts-icon,.mms-icon,.mms-org-icon{-moz-osx-font-smoothing:grayscale;display:inline-block;font-style:normal}.charts-icon,body{-webkit-font-smoothing:antialiased}.fa4-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa4-stack,img{vertical-align:middle}.fa4-fw{width:1.28571429em}.fa4-ul{margin-left:2.14285714em;padding-left:0}.fa4-li{left:-2.14285714em;top:.14285714em;width:2.14285714em}.fa4-li.fa4-lg{left:-1.85714286em}.fa4-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}@keyframes fa-spin{0%{transform:rotate(0)}to{transform:rotate(359deg)}}.fa4-stack{display:inline-block;height:2em;line-height:2em;position:relative;width:2em}.fa4-stack-1x,.fa4-stack-2x{left:0;position:absolute;text-align:center;width:100%}.mms-icon,.mms-org-icon{font-size:16px;position:relative}.mms-icon:after,.mms-org-icon:after{left:0;position:absolute;top:0}.mms-icon{font-family:MMSIcons-Regular}.mms-org-icon{font-family:MMSOrgIcons-Regular}.charts-icon{font-feature-settings:normal;font-family:ChartsIcons;font-variant:normal;line-height:1}dd{margin-top:3px}div.body{transition:opacity .25s linear}.first{margin-top:0!important}.linenos pre{background-color:transparent}dd{margin-left:30px}.line-block{display:block;margin-bottom:1em;margin-top:1em}.line-block .line-block{margin-left:1.5em}.linenos{float:left;padding-top:24px;width:2em}@media print{div.document{margin:0!important;width:100%}}div td pre{background-color:transparent}@font-face{font-family:MMSIcons-Regular;font-style:normal;font-weight:400;src:url(/docs/manual/static/MMSIcons-Regular-5bedbe88351f7667a2a81586d558e5ff.woff2) format("woff2"),url(/docs/manual/static/MMSIcons-Regular-d25e35eae17c6f40768c83dc7149b0a8.woff) format("woff"),url(/docs/manual/static/MMSIcons-Regular-960c944a07e1714bb4a828f117e5aa8b.ttf) format("truetype")}@font-face{font-family:MMSOrgIcons-Regular;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAAALEAAoAAAAABlQAAAJ6AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlYAgkoKgVyBbQsGAAE2AiQDCAQgBYRtBykbpAVAHoVxw11igYhF0ZQi3vhrPPy3X3rf/AkAOUCVE0nsolYFXGSMASygZQfk6qrrqjaqDkhX7+Ba23CtFxGVfT15MdkNtaQJb3gzixBFvNLIn4BP6P9zLl6J538+xwywCQysaGQzLLA1yDT6QugQD/3Y73lRtZGPXqSZh3umhMjiniq16TKd4q5sH/MRBBJVUFGtnNYrwdVBAQZdjMQgAIFBkGwxldgkJ9xQLUsJGxXKuA/UvkkAKIafukAwyWQkbANOAJAIyANj3RMCkvHD7BcFt7esqE3N6K7Oy7yGj0EMww/xIn68OP06oml0OHXiSLO9xga9aXJ5cXVOFY4u5vEhmi47mH6qhi/6XQe92B6D/J9/e1Yj59f4mfs3S6Vsab4jitvfMJWr+b1oCvCAwzE/V8Jj4ZOYGoNx39fiMELo4KXtvbbeGt95Vzk7km+1ik2YQkG44nn/ZXlrPQzX+rWHRo+hrvfcUSALLiu0Dwscz78qBl7n9taAbljT9IsV5GrQSCTuhm/rkAUkaGQLLNByTUq0cFQLt3EIAuQIBQqwsESY0hEBRqDYMgqzUNgioNZkFQrdYiCOpNaQRBgw6Yr8h1mDSUg9BqDZJmn6HQ6gzJxBtU6fYH1VrDF+qVoiPVYDQsF8dko73NbXZwSv6zLLRAPq542RlZymBFfr7ZlEOI8dAhPLUU1n7lU1p5q2cbS4S5shLQyMDJANMgDPQoWm0ojezauJkhGWuORzMwaWKnge0R4XMxnoWLEyVbhiy7uO3h8pqZ5CBFjChGmIsDpYGLkz6VnZ0LxQ1zsTLQITKYEYRbiUyZjPyeGXRcHHwA9SPfiE4K) format("woff2"),url(data:font/woff;base64,d09GRgABAAAAAAQYAAoAAAAABlQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAAA9AAAAD4AAABWVr1jO2NtYXAAAAE0AAAAPAAAAUoApAFvZ2x5ZgAAAXAAAADcAAAA3CHU3wZoZWFkAAACTAAAAC0AAAA2EIIX4WhoZWEAAAJ8AAAAGAAAACQIXQQDaG10eAAAApQAAAAIAAAACAgAAABsb2NhAAACnAAAAAYAAAAGAG4AAG1heHAAAAKkAAAAHgAAACABDgBVbmFtZQAAAsQAAAE7AAACbdWMZSRwb3N0AAAEAAAAABUAAAApARAAAHicY2BkYWCcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGBwYPBk8WUDcGBaIMCOIAACY/wesAAB4nGNgYGBmgGAZBkYGEHAB8hjBfBYGDSDNBqQZGZiALM/8EqwPT/HVD1QMDIxkA9wEhYyWAEALzJBw8AAgAAAAAEAAPkACMASAAAJSYvAT4BNS4BJw4BBzM+ATceARcOAQcuAScjHgEXMjY3FzcwARYfAR4BMzI2PwEXHgE7ATUjJy4BDgEPAScuAQ8BIxUzMj8BMAQADmRyKS4E67Cj4xZpFah2hLADA7CEWIwqczDMhUiBNeVJ/TAEHiIIFw0QGgY9NAcZD2hIWgcaHxkGQzEOMBJZutAVEDtmDmRxNYBIsOkEA8qccJACA6+Eg68EAVRGc40CLinjSQHDBy0zCwwSD5doDQ9nsg4PAREPp0kUBRFYZw87eJxjYGRgYADigzb/wuP5bb4ycLMwgMC1jS8bkGkWBuYnQIqDgQnEAwBGJQrYAAAAeJxjYGRgYGEAghgwCWIzMqACJgALRgBtBAAAAAQAAAAAAAAAAG4AAHicY2BkYGBgYvAEYgYwi4GBCwgZGP6D+QwAD88BZAAAeJx1j0tOwzAQhn/3BbQSqqhgh+QFYgEofYhVN+yafRfdp63Th9I4ctxKPQDn4QicgCPQG3AHftIBoVJiefzNN5NxAuACOyjsn0vuPSucMttzCSe4Fi7T3whXyA/CVTTwKFyjfxKu4x6hcAMtOE5QlTNmd3gWVmjiRbiEc7wKl+nfhCvkd+EqrvAhXENTlYXrGKmWcAO3ahGa1LjIm6keb3WYbLO5N+77HJrZOoncoR4Zly9sqrtB56f0e0y+mfW8j3Xs7EoPbOpNklidObs0Ex/Mvc/67XYsPpjYFX/fIOV2iOB5TqExxpYxRMIzw7zw7k8+ZJxhTRsdqR7moyLmWMDyPo0uAnSOvPXf1+TY8LYerUfMPGaPxYo0KCZ+dSdcliYrakuaCX1QTPe0fbS54oP+gF2c9Ak0Y2+kAHicY2BigAAuBuwAKM8IUgMAAdYAEgAAAA==) format("woff"),url(data:font/ttf;base64,AAEAAAAKAIAAAwAgT1MvMla9YzsAAAEoAAAAVmNtYXAApAFvAAABiAAAAUpnbHlmIdTfBgAAAtwAAADcaGVhZBCCF+EAAADQAAAANmhoZWEIXQQDAAAArAAAACRobXR4CAAAAAAAAYAAAAAIbG9jYQBuAAAAAALUAAAABm1heHABDgBVAAABCAAAACBuYW1l1YxlJAAAA7gAAAJtcG9zdAEQAAAAAAYoAAAAKQABAAAEAAAAAFwEAAAAAAAEAAABAAAAAAAAAAAAAAAAAAAAAgABAAAAAQAAwT0HM18PPPUACwQAAAAAANax6YAAAAAA1rHpgAAAAAAEAAPkAAAACAACAAAAAAAAAAEAAAACAEkAAgAAAAAAAgAAAAoACgAAAP8AAAAAAAAAAQQAAZAABQAIAokCzAAAAI8CiQLMAAAB6wAyAQgAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABAAEkASQQAAAAAXAQAAAAAAAABAAAAAAAABAAAAAQAAAAAAAADAAAAAwAAABwAAQAAAAAARAADAAEAAAAcAAQAKAAAAAYABAABAAIAAABJ/8AAAAAAEn/wAA/7gAAQAAAAAAAAAAAQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbgAAAAIAAAAABAAD5AAjAEgAACUmLwE+ATUuAScOAQczPgE3HgEXDgEHLgEnIx4BFzI2Nxc3MAEWHwEeATMyNj8BFx4BOwE1IycuAQ4BDwEnLgEPASMVMzI/ATAEAA5kcikuBOuwo+MWaRWodoSwAwOwhFiMKnMwzIVIgTXlSf0wBB4iCBcNEBoGPTQHGQ9oSFoHGh8ZBkMxDjASWbrQFRA7Zg5kcTWASLDpBAPKnHCQAgOvhIOvBAFURnONAi4p40kBwwctMwsMEg+XaA0PZ7IODwERD6dJFAURWGcPOwAAABIA3gABAAAAAAAAABUAAAABAAAAAAABAAgAFQABAAAAAAACAAcAHQABAAAAAAADAAgAJAABAAAAAAAEAAgALAABAAAAAAAFAAsANAABAAAAAAAGAAgAPwABAAAAAAAKACsARwABAAAAAAALABMAcgADAAEECQAAACoAhQADAAEECQABABAArwADAAEECQACAA4AvwADAAEECQADABAAzQADAAEECQAEABAA3QADAAEECQAFABYA7QADAAEECQAGABABAwADAAEECQAKAFYBEwADAAEECQALACYBaUdlbmVyYXRlZCBieSBHbHlwaHRlckdseXBodGVyUmVndWxhckdseXBodGVyR2x5cGh0ZXJWZXJzaW9uIDEuMEdseXBodGVyR2VuZXJhdGVkIGJ5IHN2ZzJ0dGYgZnJvbSBGb250ZWxsbyBwcm9qZWN0Lmh0dHA6Ly9mb250ZWxsby5jb20ARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABHAGwAeQBwAGgAdABlAHIARwBsAHkAcABoAHQAZQByAFIAZQBnAHUAbABhAHIARwBsAHkAcABoAHQAZQByAEcAbAB5AHAAaAB0AGUAcgBWAGUAcgBzAGkAbwBuACAAMQAuADAARwBsAHkAcABoAHQAZQByAEcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAAcwB2AGcAMgB0AHQAZgAgAGYAcgBvAG0AIABGAG8AbgB0AGUAbABsAG8AIABwAHIAbwBqAGUAYwB0AC4AaAB0AHQAcAA6AC8ALwBmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAECAAAAAAAA) format("truetype")}@font-face{font-family:ChartsIcons;font-style:normal;font-weight:400;src:url(data:font/woff2;base64,d09GMgABAAAAAAOMAAoAAAAAB0QAAANAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABlYAgkoKg2SDQgsGAAE2AiQDCAQgBYRVBykbYQZRlCxKH+DHgd3wVQRCO8BliGUDodgsi+GD3Az/EXy/H/s99wmuybTT8IwnspdIEmt0n05ITKdbiPJ/iG9pbXsghQtJI6Zd+8mbD7FcSJTqqXBk9/4E2gugjnYlbODuVSF8SD5En+dyfOv5gc1/s+l6c1ATfIEt8l5iRel83gaPo0UJZtgwdtmTe4hc3CrUprN0Dty4x8cPGbUkRcbtv74/szA0MsoBezmAAJIMJYOlxEoUbN+WCaCUCwmLVQXpRvXoy4xFKfjzARwsgRxtwD2+AWgEtNXX1TU0cq6hrra24Zi1ZfPJBUHEEjqYDMTQQykwIWwIJ/TSimQgEBgaEQIqqItRw9lN+/oYg1Xza6lWqKD81izovmKa9l827TRW0QsrAoPumBAcWwGwBO4wGKNG1xnKiA1HHHnM0saAEWZjmyd1B04IHLmp7zlyYoSJpTMN72lLHE16BrXtaWBiZEfBJ7jg1bsIhgl5+TaUJAOxnQThFjjswm4vIxvDlgia3MLBmL2MC/vUMBRr8Ai7g86y7mzDU6CJySl/rNGBuMFFAzn7cosm3P1RydYNXJ7F/pYNcVH96um5w/q2muDp0JAs37kv3CYaNn5u5RJX/Tynai4/KH6k10LWi8ViCdC0XRg0dwpqAY1Hf5ZyhWt4F2sjZ79gG8eQ1ZcqEJ1UxGINTAbBJ65vC/AYRfDxv3PXmq3aFATCJ1+1H6xKV56ASh0h8V+DkHP+h5pGH4KzzxsEb1vbiAWgupOv5SAQbDcXnMYIWf6tJXLwcYdyjdd+NbUSCLatngrzZp7A3ZRrZ+L9JPfaABLq1QNUQ7tftwvky4RSF5IaA8iUhoicmUChwRxKpXnUmzbYo0GHSFPkdZhyAxAavSBp9opMozciZ95R6PZEqdF/1Nv1n2swFhv3w7lFciqCqDpWJfWP2Gxqp5zrr66gvHC0F8P13peI3jWU+eaoeSrj/mPXOXNNvDpz138WWHBlXBUFuSxCOyEWEieFAHxPxQgoFVRbcvl2EoqP5qNtt8/UQrkMIVC81bRjUF/b80n4czyEp5JLEXO5DHIlEjmiUMlFXAaiAggV2hjG081nUkYu1QDU77jCWB0BAAA=) format("woff2"),url(data:font/woff;base64,d09GRgABAAAAAAT4AAoAAAAAB0QAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAAA9AAAAD4AAABWVrVjM2NtYXAAAAE0AAAAPAAAAUoAlAF3Z2x5ZgAAAXAAAAGuAAAB5GI+BANoZWFkAAADIAAAAC4AAAA2FExZ3WhoZWEAAANQAAAAHAAAACQI6gN3aG10eAAAA2wAAAAIAAAACAgAAABsb2NhAAADdAAAAAYAAAAGAPIAAG1heHAAAAN8AAAAIAAAACABHQCubmFtZQAAA5wAAAFEAAACVT7oPWZwb3N0AAAE4AAAABUAAAApARAAAHicY2BkYWCcwMDKwMHUyXSGgYGhH0IzvmYwYuRgYGBiYGVmwAoC0lxTGBwYHBkcWUDcGBaIMCOIAACXvwecAAB4nGNgYGBmgGAZBkYGEHAB8hjBfBYGDSDNBqQZGZiALMf/8EqwPT/A1D1QMDIxkA5YCSsZDADALO5Bwd4nC2OsW/TQBjFv89OHaglFDe5C3LatImdcyWf0BEnvShpSaHgJEKVaMXE0goJpFIhdanUobBAQQpiYoKNzVtWxF/B3oGZMLExUMPnhuWe3nu/p+/A+fsVIBfnAK7CAlRAQBN6EMMOPILH8AyO4QWcwXv4AJ8BsNnDtgisvGJVLK/ptqcaN5A8ixSrh8h4+RZq1SCMVATXMF8ucQJF25uBNJuhpfwlOldaytBAefWsa6vimiaQKa+1gTSvYqRMEWSdijKQbpvWbBtRqAPThyK5HJiEK7xjjx4OtyoGOvbWMMFT0sH9yWVoO3jxZT5+gEUnFLpvXdnQImwkpo93dT2gNiGsMerEVvq61l88lZvrlZ74/4pNvtiv7a26XXJTqrvu6nSwftuu8Sn3Ct1Xx+m39Od48OMdKmSZGjwx3f0nUh9I15zIztOgYiRyYrryQEv9XLOqHm/L3XGzyg6P5PZYL3FK5dFhpM92z+mf9lBzrmPrI57PXdcjO5mPd/L3OvbCxaew5fNly1rmfis0fnPpr9xkTqvmj/68LOB3LJy8MQrpSvrr5C0C/AMcw2JeAAB4nGNgZGBgAOIUvgrzeH6brwzcLAwgcGM6VwGM/r+LgYHFDSzOwcAEogD3nAi1AAB4nGNgZGBgYQCCGBD5v4Slh4GRARUwAQA1GAJsBAAAAAQAAAAAAAAAAPIAAAABAAAAAgCiABEAAAAAAAIAAAAKAAoAAAD/AAAAAAAAeJx1kD1Ow0AQhZ/zh0gQBQgamhUFQiA5Px1p6OKaFOkdZx0ncrzWehPJBefhAJyAA3AAGq7AAWh42FOQSHi0O9+8fTuzMoAzfMJD/V1w1eyhw6rmBo5wJdykfi3cIt8Kt9GDL9xhPAh3cY9H4R7OsWYHr3XM6g7Pwh5O8CLcwClehZvU34Rb5HfhNi7xIdyh/iXcxQzfwj3ceE+BzrQNnV6oeamCtMwTp22UhNYVU73cpqEU9T7TtliZTA39QS3sXS92y5FzsYqt2aiJyZxOU6Nya9Y6cn7iXD7u92PR/chsEEAj47II4ZgXUJij5B4gZc6RVLpFRAqZHQpMqSyxpSM8OPnLs+pegRUMZygM+fMHe47/pxfYccKIqkPMOqbHYEOaVN1+3SnDUMmrszWViLpfvdhRHaPPiA/8Pl3s9APzDmqGeJxjYGKAAC4G7AAozwhSAwAB1gASAAAA) format("woff"),url(data:font/ttf;base64,AAEAAAAKAIAAAwAgT1MvMla1YzMAAAEoAAAAVmNtYXAAlAF3AAABiAAAAUpnbHlmYj4EAwAAAtwAAAHkaGVhZBRMWd0AAADQAAAANmhoZWEI6gN3AAAArAAAACRobXR4CAAAAAAAAYAAAAAIbG9jYQDyAAAAAALUAAAABm1heHABHQCuAAABCAAAACBuYW1lPug9ZgAABMAAAAJVcG9zdAEQAAAAAAcYAAAAKQABAAAEAAAAAFwEAAAA/3QEjAABAAAAAAAAAAAAAAAAAAAAAgABAAAAAQAAZA6GO18PPPUACwQAAAAAANiXCnAAAAAA2JcKcP+6AAAERgQAAAAACAACAAAAAAAAAAEAAAACAKIAEQAAAAAAAgAAAAoACgAAAP8AAAAAAAAAAQQAAZAABQAIAokCzAAAAI8CiQLMAAAB6wAyAQgAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABAAEEAQQQAAAAAXAQAAAAAAAABAAAAAAAABAAAAAQAAAAAAAADAAAAAwAAABwAAQAAAAAARAADAAEAAAAcAAQAKAAAAAYABAABAAIAAABB/8AAAAAAEH/wAA/8AAAQAAAAAAAAAAAQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8gAAABH/ugAABEYEAAAJABIAGwAmADIAOwBGAFEAWgBiAGoAdQB9AIUAjQCTAKEAAAEyOwE1JicGBzAVHgEXNjc1IzAlLgEnBgcVMzAVIisBFRYXPgE3MCUyOwE+ATcmJw4BBxcUFhc2NyY1IyUuAScGBx4BFzMwFSIrARQHFz4BNzAFFB0BPgE3JzAjIgceARc1MBM2Ny4BJxUwIzQ9AQ4BBx4BMzADJicHHgEXMDM+ATcnBgcwAwYHFz4BNzAzHgEXNycDJAATPgE3BAADDgEHMAFCC0lUSEMbAgERC0NIqAF8ARELR0uvC0lUSEMLEQH9uApGUAETESsmNz8GCD03JislqAMkAUQ3IicLEQGoC0lUJUk4Rgb+hCE/HHwsQDwbOyYsQDwbOyYsJkAWHD8hXygaOhs7JuohPxw6GijqRzxBCyEW6hYjEDqDdf7Q/uuKR+mLATABFYpH6YsCFqgDGmBlLDdpLBoDryw4ZicbAqgsrwMaLGk3LDdtNxUeN4pNLFKKMh4Va3AsTYo3HRY3bTcscGszN4VS2wpGUAtINxYWN0YGmQHbBRg3SQuoCkZRB0U4CxL9mis0JBYfBgYfFiQ0KwL4FiwkIDEVETQhJEn8fhAB3wEQeIYCEP4g/vF4hwEAAAAAABIA3gABAAAAAAAAABUAAAABAAAAAAABAAYAFQABAAAAAAACAAcAGwABAAAAAAADAAYAIgABAAAAAAAEAAYAKAABAAAAAAAFAAsALgABAAAAAAAGAAYAOQABAAAAAAAKACsAPwABAAAAAAALABMAagADAAEECQAAACoAfQADAAEECQABAAwApwADAAEECQACAA4AswADAAEECQADAAwAwQADAAEECQAEAAwAzQADAAEECQAFABYA2QADAAEECQAGAAwA7wADAAEECQAKAFYA+wADAAEECQALACYBUUdlbmVyYXRlZCBieSBHbHlwaHRlcmNoYXJ0c1JlZ3VsYXJjaGFydHNjaGFydHNWZXJzaW9uIDEuMGNoYXJ0c0dlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAEcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAARwBsAHkAcABoAHQAZQByAGMAaABhAHIAdABzAFIAZQBnAHUAbABhAHIAYwBoAGEAcgB0AHMAYwBoAGEAcgB0AHMAVgBlAHIAcwBpAG8AbgAgADEALgAwAGMAaABhAHIAdABzAEcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAAcwB2AGcAMgB0AHQAZgAgAGYAcgBvAG0AIABGAG8AbgB0AGUAbABsAG8AIABwAHIAbwBqAGUAYwB0AC4AaAB0AHQAcAA6AC8ALwBmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQAAAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAECAAAAAAAA) format("truetype")}@font-face{font-display:swap;font-family:Euclid Circular A;font-style:normal;font-weight:700;src:url(/docs/manual/static/EuclidCircularA-Semibold-WebXL-fa7f7a6de763f3fc0ef6d7bce19a5b97.woff) format("woff")}div.document{margin-left:25px}div.section>h1+dl.dbcommand>dt,div.section>h1+dl.expression>dt,div.section>h1+dl.group>dt,div.section>h1+dl.method>dt,div.section>h1+dl.operator>dt,div.section>h1+dl.pipeline>dt,div.section>h1+dl.projection>dt,dl.binary{display:none}.highlight ::-webkit-scrollbar{-webkit-appearance:none;height:5px;width:7px}.highlight ::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.5);border-radius:0;height:0}body{color:#21313c;font-family:Euclid Circular A,Helvetica Neue,Helvetica,Arial,sans-serif;margin:0;padding:0}hr{border:1px solid #b1b4b6}div.body h1+dl,div.body h1+p,div.body h2+dl,div.body h2+p,div.body h3+dl,div.body h3+p,div.body h4+dl,div.body h4+p{padding:0;text-indent:0}a code{font-weight:400}dl.method dt{margin-bottom:24px}dl.method>dt big{font-size:16px;font-weight:300}dl.method>dt em{font-style:normal;font-weight:700}.content{display:flex;font-size:16px;line-height:24px;margin:45px auto 0}@media (max-width:1340px){.document{margin-left:25px}}@media (min-width:1121px) and (max-width:1340px){.document{margin-left:25px}}@media (max-width:1024px){.document{margin-left:25px}}#tooltip-1{z-index:3} /*! * Font Awesome Free 5.3.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-ad:before{content:"\f641"}.fa-address-book:before,.fa4-address-book:before{content:"\f2b9"}.fa-address-card:before,.fa4-address-card:before,.fa4-vcard:before{content:"\f2bb"}.fa-adjust:before,.fa4-adjust:before{content:"\f042"}.fa-adn:before,.fa4-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before,.fa4-align-center:before{content:"\f037"}.fa-align-justify:before,.fa4-align-justify:before{content:"\f039"}.fa-align-left:before,.fa4-align-left:before{content:"\f036"}.fa-align-right:before,.fa4-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before,.fa4-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before,.fa4-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before,.fa4-american-sign-language-interpreting:before,.fa4-asl-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before,.fa4-anchor:before{content:"\f13d"}.fa-android:before,.fa4-android:before{content:"\f17b"}.fa-angellist:before,.fa4-angellist:before{content:"\f209"}.fa-angle-double-down:before,.fa4-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before,.fa4-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before,.fa4-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before,.fa4-angle-double-up:before{content:"\f102"}.fa-angle-down:before,.fa4-angle-down:before{content:"\f107"}.fa-angle-left:before,.fa4-angle-left:before{content:"\f104"}.fa-angle-right:before,.fa4-angle-right:before{content:"\f105"}.fa-angle-up:before,.fa4-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before,.fa4-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before,.fa4-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before,.fa4-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before,.fa4-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before,.fa4-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before,.fa4-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before,.fa4-arrow-down:before{content:"\f063"}.fa-arrow-left:before,.fa4-arrow-left:before{content:"\f060"}.fa-arrow-right:before,.fa4-arrow-right:before{content:"\f061"}.fa-arrow-up:before,.fa4-arrow-up:before{content:"\f062"}.fa-arrows-alt:before,.fa4-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-assistive-listening-systems:before,.fa4-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before,.fa4-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before,.fa4-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before,.fa4-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-backspace:before{content:"\f55a"}.fa-backward:before,.fa4-backward:before{content:"\f04a"}.fa-balance-scale:before,.fa4-balance-scale:before{content:"\f24e"}.fa-ban:before,.fa4-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before,.fa4-bandcamp:before{content:"\f2d5"}.fa-barcode:before,.fa4-barcode:before{content:"\f02a"}.fa-bars:before,.fa4-bars:before,.fa4-navicon:before,.fa4-reorder:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before,.fa4-bath:before,.fa4-bathtub:before,.fa4-s15:before{content:"\f2cd"}.fa-battery-empty:before,.fa4-battery-0:before,.fa4-battery-empty:before{content:"\f244"}.fa-battery-full:before,.fa4-battery-4:before,.fa4-battery-full:before,.fa4-battery:before{content:"\f240"}.fa-battery-half:before,.fa4-battery-2:before,.fa4-battery-half:before{content:"\f242"}.fa-battery-quarter:before,.fa4-battery-1:before,.fa4-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before,.fa4-battery-3:before,.fa4-battery-three-quarters:before{content:"\f241"}.fa-bed:before,.fa4-bed:before,.fa4-hotel:before{content:"\f236"}.fa-beer:before,.fa4-beer:before{content:"\f0fc"}.fa-behance:before,.fa4-behance:before{content:"\f1b4"}.fa-behance-square:before,.fa4-behance-square:before{content:"\f1b5"}.fa-bell:before,.fa4-bell:before{content:"\f0f3"}.fa-bell-slash:before,.fa4-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before,.fa4-bicycle:before{content:"\f206"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before,.fa4-binoculars:before{content:"\f1e5"}.fa-birthday-cake:before,.fa4-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before,.fa4-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before,.fa4-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blind:before,.fa4-blind:before{content:"\f29d"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before,.fa4-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before,.fa4-bluetooth-b:before{content:"\f294"}.fa-bold:before,.fa4-bold:before{content:"\f032"}.fa-bolt:before,.fa4-bolt:before,.fa4-flash:before{content:"\f0e7"}.fa-bomb:before,.fa4-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before,.fa4-book:before{content:"\f02d"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before,.fa4-bookmark:before{content:"\f02e"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before,.fa4-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-briefcase:before,.fa4-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before,.fa4-bitcoin:before,.fa4-btc:before{content:"\f15a"}.fa-bug:before,.fa4-bug:before{content:"\f188"}.fa-building:before,.fa4-building:before{content:"\f1ad"}.fa-bullhorn:before,.fa4-bullhorn:before{content:"\f0a1"}.fa-bullseye:before,.fa4-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before,.fa4-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before,.fa4-buysellads:before{content:"\f20d"}.fa-calculator:before,.fa4-calculator:before{content:"\f1ec"}.fa-calendar:before,.fa4-calendar-o:before{content:"\f133"}.fa-calendar-alt:before,.fa4-calendar:before{content:"\f073"}.fa-calendar-check:before,.fa4-calendar-check-o:before{content:"\f274"}.fa-calendar-minus:before,.fa4-calendar-minus-o:before{content:"\f272"}.fa-calendar-plus:before,.fa4-calendar-plus-o:before{content:"\f271"}.fa-calendar-times:before,.fa4-calendar-times-o:before{content:"\f273"}.fa-camera:before,.fa4-camera:before{content:"\f030"}.fa-camera-retro:before,.fa4-camera-retro:before{content:"\f083"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before,.fa4-automobile:before,.fa4-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before,.fa4-caret-down:before{content:"\f0d7"}.fa-caret-left:before,.fa4-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.fa4-caret-right:before{content:"\f0da"}.fa-caret-square-down:before,.fa4-caret-square-o-down:before,.fa4-toggle-down:before{content:"\f150"}.fa-caret-square-left:before,.fa4-caret-square-o-left:before,.fa4-toggle-left:before{content:"\f191"}.fa-caret-square-right:before,.fa4-caret-square-o-right:before,.fa4-toggle-right:before{content:"\f152"}.fa-caret-square-up:before,.fa4-caret-square-o-up:before,.fa4-toggle-up:before{content:"\f151"}.fa-caret-up:before,.fa4-caret-up:before{content:"\f0d8"}.fa-cart-arrow-down:before,.fa4-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before,.fa4-cart-plus:before{content:"\f217"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before,.fa4-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before,.fa4-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before,.fa4-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before,.fa4-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before,.fa4-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before,.fa4-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before,.fa4-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before,.fa4-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-certificate:before,.fa4-certificate:before{content:"\f0a3"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before,.fa4-area-chart:before{content:"\f1fe"}.fa-chart-bar:before,.fa4-bar-chart-o:before,.fa4-bar-chart:before{content:"\f080"}.fa-chart-line:before,.fa4-line-chart:before{content:"\f201"}.fa-chart-pie:before,.fa4-pie-chart:before{content:"\f200"}.fa-check:before,.fa4-check:before{content:"\f00c"}.fa-check-circle:before,.fa4-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before,.fa4-check-square:before{content:"\f14a"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before,.fa4-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before,.fa4-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before,.fa4-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before,.fa4-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before,.fa4-chevron-down:before{content:"\f078"}.fa-chevron-left:before,.fa4-chevron-left:before{content:"\f053"}.fa-chevron-right:before,.fa4-chevron-right:before{content:"\f054"}.fa-chevron-up:before,.fa4-chevron-up:before{content:"\f077"}.fa-child:before,.fa4-child:before{content:"\f1ae"}.fa-chrome:before,.fa4-chrome:before{content:"\f268"}.fa-church:before{content:"\f51d"}.fa-circle:before,.fa4-circle:before{content:"\f111"}.fa-circle-notch:before,.fa4-circle-o-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before,.fa4-clock-o:before{content:"\f017"}.fa-clone:before,.fa4-clone:before{content:"\f24d"}.fa-closed-captioning:before,.fa4-cc:before{content:"\f20a"}.fa-cloud:before,.fa4-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before,.fa4-code:before{content:"\f121"}.fa-code-branch:before,.fa4-code-fork:before{content:"\f126"}.fa-codepen:before,.fa4-codepen:before{content:"\f1cb"}.fa-codiepie:before,.fa4-codiepie:before{content:"\f284"}.fa-coffee:before,.fa4-coffee:before{content:"\f0f4"}.fa-cog:before,.fa4-cog:before,.fa4-gear:before{content:"\f013"}.fa-cogs:before,.fa4-cogs:before,.fa4-gears:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before,.fa4-columns:before{content:"\f0db"}.fa-comment:before,.fa4-comment:before{content:"\f075"}.fa-comment-alt:before,.fa4-commenting:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before,.fa4-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before,.fa4-compass:before{content:"\f14e"}.fa-compress:before,.fa4-compress:before{content:"\f066"}.fa-concierge-bell:before{content:"\f562"}.fa-connectdevelop:before,.fa4-connectdevelop:before{content:"\f20e"}.fa-contao:before,.fa4-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before,.fa4-copy:before,.fa4-files-o:before{content:"\f0c5"}.fa-copyright:before,.fa4-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before,.fa4-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-credit-card:before,.fa4-credit-card:before{content:"\f09d"}.fa-crop:before,.fa4-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before,.fa4-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-css3:before,.fa4-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before,.fa4-cube:before{content:"\f1b2"}.fa-cubes:before,.fa4-cubes:before{content:"\f1b3"}.fa-cut:before,.fa4-cut:before,.fa4-scissors:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-dashcube:before,.fa4-dashcube:before{content:"\f210"}.fa-database:before,.fa4-database:before{content:"\f1c0"}.fa-deaf:before,.fa4-deaf:before,.fa4-deafness:before,.fa4-hard-of-hearing:before{content:"\f2a4"}.fa-delicious:before,.fa4-delicious:before{content:"\f1a5"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before,.fa4-desktop:before{content:"\f108"}.fa-deviantart:before,.fa4-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-diagnoses:before{content:"\f470"}.fa-dice:before{content:"\f522"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before,.fa4-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dollar-sign:before,.fa4-dollar:before,.fa4-usd:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before,.fa4-dot-circle-o:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before,.fa4-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before,.fa4-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before,.fa4-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drupal:before,.fa4-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before,.fa4-edge:before{content:"\f282"}.fa-edit:before,.fa4-edit:before,.fa4-pencil-square-o:before{content:"\f044"}.fa-eject:before,.fa4-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before,.fa4-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before,.fa4-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before,.fa4-empire:before,.fa4-ge:before{content:"\f1d1"}.fa-envelope:before,.fa4-envelope:before{content:"\f0e0"}.fa-envelope-open:before,.fa4-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before,.fa4-envelope-square:before{content:"\f199"}.fa-envira:before,.fa4-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before,.fa4-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-etsy:before,.fa4-etsy:before{content:"\f2d7"}.fa-euro-sign:before,.fa4-eur:before,.fa4-euro:before{content:"\f153"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before,.fa4-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before,.fa4-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before,.fa4-exclamation-triangle:before,.fa4-warning:before{content:"\f071"}.fa-expand:before,.fa4-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before,.fa4-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before,.fa4-eye:before{content:"\f06e"}.fa-eye-dropper:before,.fa4-eyedropper:before{content:"\f1fb"}.fa-eye-slash:before,.fa4-eye-slash:before{content:"\f070"}.fa-facebook:before,.fa4-facebook-f:before,.fa4-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before,.fa4-facebook-square:before{content:"\f082"}.fa-fast-backward:before,.fa4-fast-backward:before{content:"\f049"}.fa-fast-forward:before,.fa4-fast-forward:before{content:"\f050"}.fa-fax:before,.fa4-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-female:before,.fa4-female:before{content:"\f182"}.fa-fighter-jet:before,.fa4-fighter-jet:before{content:"\f0fb"}.fa-file:before,.fa4-file:before{content:"\f15b"}.fa-file-alt:before,.fa4-file-text:before{content:"\f15c"}.fa-file-archive:before,.fa4-file-archive-o:before,.fa4-file-zip-o:before{content:"\f1c6"}.fa-file-audio:before,.fa4-file-audio-o:before,.fa4-file-sound-o:before{content:"\f1c7"}.fa-file-code:before,.fa4-file-code-o:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before,.fa4-file-excel-o:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before,.fa4-file-image-o:before,.fa4-file-photo-o:before,.fa4-file-picture-o:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before,.fa4-file-pdf-o:before{content:"\f1c1"}.fa-file-powerpoint:before,.fa4-file-powerpoint-o:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before,.fa4-file-movie-o:before,.fa4-file-video-o:before{content:"\f1c8"}.fa-file-word:before,.fa4-file-word-o:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before,.fa4-film:before{content:"\f008"}.fa-filter:before,.fa4-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before,.fa4-fire:before{content:"\f06d"}.fa-fire-extinguisher:before,.fa4-fire-extinguisher:before{content:"\f134"}.fa-firefox:before,.fa4-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before,.fa4-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-flag:before,.fa4-flag:before{content:"\f024"}.fa-flag-checkered:before,.fa4-flag-checkered:before{content:"\f11e"}.fa-flask:before,.fa4-flask:before{content:"\f0c3"}.fa-flickr:before,.fa4-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before,.fa4-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before,.fa4-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before,.fa4-font:before{content:"\f031"}.fa-font-awesome:before,.fa4-fa:before,.fa4-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before,.fa4-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before,.fa4-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before,.fa4-forumbee:before{content:"\f211"}.fa-forward:before,.fa4-forward:before{content:"\f04e"}.fa-foursquare:before,.fa4-foursquare:before{content:"\f180"}.fa-free-code-camp:before,.fa4-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before,.fa4-frown-o:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before,.fa4-futbol-o:before,.fa4-soccer-ball-o:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before,.fa4-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before,.fa4-gavel:before,.fa4-legal:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before,.fa4-genderless:before{content:"\f22d"}.fa-get-pocket:before,.fa4-get-pocket:before{content:"\f265"}.fa-gg:before,.fa4-gg:before{content:"\f260"}.fa-gg-circle:before,.fa4-gg-circle:before{content:"\f261"}.fa-gift:before,.fa4-gift:before{content:"\f06b"}.fa-git:before,.fa4-git:before{content:"\f1d3"}.fa-git-square:before,.fa4-git-square:before{content:"\f1d2"}.fa-github:before,.fa4-github:before{content:"\f09b"}.fa-github-alt:before,.fa4-github-alt:before{content:"\f113"}.fa-github-square:before,.fa4-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before,.fa4-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-martini:before,.fa4-glass:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glasses:before{content:"\f530"}.fa-glide:before,.fa4-glide:before{content:"\f2a5"}.fa-glide-g:before,.fa4-glide-g:before{content:"\f2a6"}.fa-globe:before,.fa4-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before,.fa4-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before,.fa4-google-plus-circle:before,.fa4-google-plus-official:before{content:"\f2b3"}.fa-google-plus-g:before,.fa4-google-plus:before{content:"\f0d5"}.fa-google-plus-square:before,.fa4-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before,.fa4-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before,.fa4-graduation-cap:before,.fa4-mortar-board:before{content:"\f19d"}.fa-gratipay:before,.fa4-gittip:before,.fa4-gratipay:before{content:"\f184"}.fa-grav:before,.fa4-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before,.fa4-h-square:before{content:"\f0fd"}.fa-hacker-news:before,.fa4-hacker-news:before,.fa4-y-combinator-square:before,.fa4-yc-square:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before,.fa4-hand-lizard-o:before{content:"\f258"}.fa-hand-paper:before,.fa4-hand-paper-o:before,.fa4-hand-stop-o:before{content:"\f256"}.fa-hand-peace:before,.fa4-hand-peace-o:before{content:"\f25b"}.fa-hand-point-down:before,.fa4-hand-o-down:before{content:"\f0a7"}.fa-hand-point-left:before,.fa4-hand-o-left:before{content:"\f0a5"}.fa-hand-point-right:before,.fa4-hand-o-right:before{content:"\f0a4"}.fa-hand-point-up:before,.fa4-hand-o-up:before{content:"\f0a6"}.fa-hand-pointer:before,.fa4-hand-pointer-o:before{content:"\f25a"}.fa-hand-rock:before,.fa4-hand-grab-o:before,.fa4-hand-rock-o:before{content:"\f255"}.fa-hand-scissors:before,.fa4-hand-scissors-o:before{content:"\f257"}.fa-hand-spock:before,.fa4-hand-spock-o:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before,.fa4-handshake-o:before{content:"\f2b5"}.fa-hashtag:before,.fa4-hashtag:before{content:"\f292"}.fa-haykal:before{content:"\f666"}.fa-hdd:before,.fa4-hdd-o:before{content:"\f0a0"}.fa-heading:before,.fa4-header:before{content:"\f1dc"}.fa-headphones:before,.fa4-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before,.fa4-heart:before{content:"\f004"}.fa-heartbeat:before,.fa4-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before,.fa4-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-home:before,.fa4-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-hospital:before,.fa4-hospital-o:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before,.fa4-hourglass:before{content:"\f254"}.fa-hourglass-end:before,.fa4-hourglass-3:before,.fa4-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before,.fa4-hourglass-2:before,.fa4-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before,.fa4-hourglass-1:before,.fa4-hourglass-start:before{content:"\f251"}.fa-houzz:before,.fa4-houzz:before{content:"\f27c"}.fa-html5:before,.fa4-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before,.fa4-i-cursor:before{content:"\f246"}.fa-id-badge:before,.fa4-id-badge:before{content:"\f2c1"}.fa-id-card:before,.fa4-drivers-license:before,.fa4-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-image:before,.fa4-image:before,.fa4-photo:before,.fa4-picture-o:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before,.fa4-imdb:before{content:"\f2d8"}.fa-inbox:before,.fa4-inbox:before{content:"\f01c"}.fa-indent:before,.fa4-indent:before{content:"\f03c"}.fa-industry:before,.fa4-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before,.fa4-info:before{content:"\f129"}.fa-info-circle:before,.fa4-info-circle:before{content:"\f05a"}.fa-instagram:before,.fa4-instagram:before{content:"\f16d"}.fa-internet-explorer:before,.fa4-internet-explorer:before{content:"\f26b"}.fa-ioxhost:before,.fa4-ioxhost:before{content:"\f208"}.fa-italic:before,.fa4-italic:before{content:"\f033"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before,.fa4-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before,.fa4-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before,.fa4-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before,.fa4-keyboard-o:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before,.fa4-language:before{content:"\f1ab"}.fa-laptop:before,.fa4-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before,.fa4-lastfm:before{content:"\f202"}.fa-lastfm-square:before,.fa4-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before,.fa4-leaf:before{content:"\f06c"}.fa-leanpub:before,.fa4-leanpub:before{content:"\f212"}.fa-lemon:before,.fa4-lemon-o:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before,.fa4-life-bouy:before,.fa4-life-buoy:before,.fa4-life-ring:before,.fa4-life-saver:before,.fa4-support:before{content:"\f1cd"}.fa-lightbulb:before,.fa4-lightbulb-o:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before,.fa4-chain:before,.fa4-link:before{content:"\f0c1"}.fa-linkedin:before,.fa4-linkedin-square:before{content:"\f08c"}.fa-linkedin-in:before,.fa4-linkedin:before{content:"\f0e1"}.fa-linode:before,.fa4-linode:before{content:"\f2b8"}.fa-linux:before,.fa4-linux:before{content:"\f17c"}.fa-lira-sign:before,.fa4-try:before,.fa4-turkish-lira:before{content:"\f195"}.fa-list:before,.fa4-list:before{content:"\f03a"}.fa-list-alt:before,.fa4-list-alt:before{content:"\f022"}.fa-list-ol:before,.fa4-list-ol:before{content:"\f0cb"}.fa-list-ul:before,.fa4-list-ul:before{content:"\f0ca"}.fa-location-arrow:before,.fa4-location-arrow:before{content:"\f124"}.fa-lock:before,.fa4-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before,.fa4-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before,.fa4-magic:before{content:"\f0d0"}.fa-magnet:before,.fa4-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before,.fa4-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before,.fa4-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before,.fa4-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before,.fa4-map-pin:before{content:"\f276"}.fa-map-signs:before,.fa4-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before,.fa4-mars:before{content:"\f222"}.fa-mars-double:before,.fa4-mars-double:before{content:"\f227"}.fa-mars-stroke:before,.fa4-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before,.fa4-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before,.fa4-mars-stroke-v:before{content:"\f22a"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before,.fa4-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before,.fa4-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before,.fa4-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before,.fa4-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before,.fa4-meh-o:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-menorah:before{content:"\f676"}.fa-mercury:before,.fa4-mercury:before{content:"\f223"}.fa-microchip:before,.fa4-microchip:before{content:"\f2db"}.fa-microphone:before,.fa4-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before,.fa4-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before,.fa4-minus:before{content:"\f068"}.fa-minus-circle:before,.fa4-minus-circle:before{content:"\f056"}.fa-minus-square:before,.fa4-minus-square:before{content:"\f146"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before,.fa4-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before,.fa4-mobile-phone:before,.fa4-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before,.fa4-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before,.fa4-money:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before,.fa4-moon-o:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before,.fa4-motorcycle:before{content:"\f21c"}.fa-mouse-pointer:before,.fa4-mouse-pointer:before{content:"\f245"}.fa-music:before,.fa4-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-neuter:before,.fa4-neuter:before{content:"\f22c"}.fa-newspaper:before,.fa4-newspaper-o:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-nintendo-switch:before{content:"\f418"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before,.fa4-object-group:before{content:"\f247"}.fa-object-ungroup:before,.fa4-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before,.fa4-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before,.fa4-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before,.fa4-opencart:before{content:"\f23d"}.fa-openid:before,.fa4-openid:before{content:"\f19b"}.fa-opera:before,.fa4-opera:before{content:"\f26a"}.fa-optin-monster:before,.fa4-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-outdent:before,.fa4-dedent:before,.fa4-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before,.fa4-pagelines:before{content:"\f18c"}.fa-paint-brush:before,.fa4-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before,.fa4-paper-plane:before,.fa4-send:before{content:"\f1d8"}.fa-paperclip:before,.fa4-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before,.fa4-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before,.fa4-clipboard:before,.fa4-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before,.fa4-pause:before{content:"\f04c"}.fa-pause-circle:before,.fa4-pause-circle:before{content:"\f28b"}.fa-paw:before,.fa4-paw:before{content:"\f1b0"}.fa-paypal:before,.fa4-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before,.fa4-pencil-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-carry:before{content:"\f4ce"}.fa-percent:before,.fa4-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before,.fa4-phone:before{content:"\f095"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before,.fa4-phone-square:before{content:"\f098"}.fa-phone-volume:before,.fa4-volume-control-phone:before{content:"\f2a0"}.fa-php:before{content:"\f457"}.fa-pied-piper:before,.fa4-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before,.fa4-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before,.fa4-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before,.fa4-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before,.fa4-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before,.fa4-pinterest-square:before{content:"\f0d3"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before,.fa4-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before,.fa4-play:before{content:"\f04b"}.fa-play-circle:before,.fa4-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before,.fa4-plug:before{content:"\f1e6"}.fa-plus:before,.fa4-plus:before{content:"\f067"}.fa-plus-circle:before,.fa4-plus-circle:before{content:"\f055"}.fa-plus-square:before,.fa4-plus-square:before{content:"\f0fe"}.fa-podcast:before,.fa4-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before,.fa4-gbp:before{content:"\f154"}.fa-power-off:before,.fa4-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before,.fa4-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before,.fa4-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before,.fa4-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before,.fa4-qq:before{content:"\f1d6"}.fa-qrcode:before,.fa4-qrcode:before{content:"\f029"}.fa-question:before,.fa4-question:before{content:"\f128"}.fa-question-circle:before,.fa4-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before,.fa4-quora:before{content:"\f2c4"}.fa-quote-left:before,.fa4-quote-left:before{content:"\f10d"}.fa-quote-right:before,.fa4-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-random:before,.fa4-random:before{content:"\f074"}.fa-ravelry:before,.fa4-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before,.fa4-ra:before,.fa4-rebel:before,.fa4-resistance:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before,.fa4-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before,.fa4-reddit:before{content:"\f1a1"}.fa-reddit-alien:before,.fa4-reddit-alien:before{content:"\f281"}.fa-reddit-square:before,.fa4-reddit-square:before{content:"\f1a2"}.fa-redo:before,.fa4-repeat:before,.fa4-rotate-right:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before,.fa4-registered:before{content:"\f25d"}.fa-rendact:before{content:"\f3e4"}.fa-renren:before,.fa4-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before,.fa4-mail-reply-all:before,.fa4-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-retweet:before,.fa4-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-road:before,.fa4-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before,.fa4-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before,.fa4-feed:before,.fa4-rss:before{content:"\f09e"}.fa-rss-square:before,.fa4-rss-square:before{content:"\f143"}.fa-ruble-sign:before,.fa4-rouble:before,.fa4-rub:before,.fa4-ruble:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-rupee-sign:before,.fa4-inr:before,.fa4-rupee:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before,.fa4-safari:before{content:"\f267"}.fa-sass:before{content:"\f41e"}.fa-save:before,.fa4-floppy-o:before,.fa4-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before,.fa4-scribd:before{content:"\f28a"}.fa-search:before,.fa4-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before,.fa4-search-minus:before{content:"\f010"}.fa-search-plus:before,.fa4-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before,.fa4-eercast:before{content:"\f2da"}.fa-sellsy:before,.fa4-sellsy:before{content:"\f213"}.fa-server:before,.fa4-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before,.fa4-mail-forward:before,.fa4-share:before{content:"\f064"}.fa-share-alt:before,.fa4-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before,.fa4-share-alt-square:before{content:"\f1e1"}.fa-share-square:before,.fa4-share-square:before{content:"\f14d"}.fa-shekel-sign:before,.fa4-ils:before,.fa4-shekel:before,.fa4-sheqel:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before,.fa4-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before,.fa4-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before,.fa4-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before,.fa4-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before,.fa4-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before,.fa4-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before,.fa4-sign-language:before,.fa4-signing:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before,.fa4-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-simplybuilt:before,.fa4-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before,.fa4-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skull:before{content:"\f54c"}.fa-skyatlas:before,.fa4-skyatlas:before{content:"\f216"}.fa-skype:before,.fa4-skype:before{content:"\f17e"}.fa-slack:before,.fa4-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-sliders-h:before,.fa4-sliders:before{content:"\f1de"}.fa-slideshare:before,.fa4-slideshare:before{content:"\f1e7"}.fa-smile:before,.fa4-smile-o:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-snapchat:before,.fa4-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before,.fa4-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before,.fa4-snapchat-square:before{content:"\f2ad"}.fa-snowflake:before,.fa4-snowflake-o:before{content:"\f2dc"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before,.fa4-sort:before,.fa4-unsorted:before{content:"\f0dc"}.fa-sort-alpha-down:before,.fa4-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-up:before,.fa4-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-down:before,.fa4-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-up:before,.fa4-sort-amount-desc:before{content:"\f161"}.fa-sort-down:before,.fa4-sort-desc:before,.fa4-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before,.fa4-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-up:before,.fa4-sort-numeric-desc:before{content:"\f163"}.fa-sort-up:before,.fa4-sort-asc:before,.fa4-sort-up:before{content:"\f0de"}.fa-soundcloud:before,.fa4-soundcloud:before{content:"\f1be"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before,.fa4-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-spinner:before,.fa4-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before,.fa4-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before,.fa4-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before,.fa4-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before,.fa4-stack-overflow:before{content:"\f16c"}.fa-stamp:before{content:"\f5bf"}.fa-star:before,.fa4-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before,.fa4-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before,.fa4-steam:before{content:"\f1b6"}.fa-steam-square:before,.fa4-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before,.fa4-step-backward:before{content:"\f048"}.fa-step-forward:before,.fa4-step-forward:before{content:"\f051"}.fa-stethoscope:before,.fa4-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before,.fa4-sticky-note:before{content:"\f249"}.fa-stop:before,.fa4-stop:before{content:"\f04d"}.fa-stop-circle:before,.fa4-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before,.fa4-street-view:before{content:"\f21d"}.fa-strikethrough:before,.fa4-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before,.fa4-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before,.fa4-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before,.fa4-subscript:before{content:"\f12c"}.fa-subway:before,.fa4-subway:before{content:"\f239"}.fa-suitcase:before,.fa4-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before,.fa4-sun-o:before{content:"\f185"}.fa-superpowers:before,.fa4-superpowers:before{content:"\f2dd"}.fa-superscript:before,.fa4-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before,.fa4-refresh:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before,.fa4-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before,.fa4-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before,.fa4-tag:before{content:"\f02b"}.fa-tags:before,.fa4-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before,.fa4-tasks:before{content:"\f0ae"}.fa-taxi:before,.fa4-cab:before,.fa4-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before,.fa4-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-tencent-weibo:before,.fa4-tencent-weibo:before{content:"\f1d5"}.fa-terminal:before,.fa4-terminal:before{content:"\f120"}.fa-text-height:before,.fa4-text-height:before{content:"\f034"}.fa-text-width:before,.fa4-text-width:before{content:"\f035"}.fa-th:before,.fa4-th:before{content:"\f00a"}.fa-th-large:before,.fa4-th-large:before{content:"\f009"}.fa-th-list:before,.fa4-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before,.fa4-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before,.fa4-thermometer-0:before,.fa4-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before,.fa4-thermometer-4:before,.fa4-thermometer-full:before,.fa4-thermometer:before{content:"\f2c7"}.fa-thermometer-half:before,.fa4-thermometer-2:before,.fa4-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before,.fa4-thermometer-1:before,.fa4-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before,.fa4-thermometer-3:before,.fa4-thermometer-three-quarters:before{content:"\f2c8"}.fa-thumbs-down:before,.fa4-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before,.fa4-thumbs-up:before{content:"\f164"}.fa-thumbtack:before,.fa4-thumb-tack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before,.fa4-close:before,.fa4-remove:before,.fa4-times:before{content:"\f00d"}.fa-times-circle:before,.fa4-times-circle:before{content:"\f057"}.fa-tint:before,.fa4-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before,.fa4-toggle-off:before{content:"\f204"}.fa-toggle-on:before,.fa4-toggle-on:before{content:"\f205"}.fa-toolbox:before{content:"\f552"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before,.fa4-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before,.fa4-train:before{content:"\f238"}.fa-transgender:before,.fa4-intersex:before,.fa4-transgender:before{content:"\f224"}.fa-transgender-alt:before,.fa4-transgender-alt:before{content:"\f225"}.fa-trash:before,.fa4-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-tree:before,.fa4-tree:before{content:"\f1bb"}.fa-trello:before,.fa4-trello:before{content:"\f181"}.fa-tripadvisor:before,.fa4-tripadvisor:before{content:"\f262"}.fa-trophy:before,.fa4-trophy:before{content:"\f091"}.fa-truck:before,.fa4-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before,.fa4-tty:before{content:"\f1e4"}.fa-tumblr:before,.fa4-tumblr:before{content:"\f173"}.fa-tumblr-square:before,.fa4-tumblr-square:before{content:"\f174"}.fa-tv:before,.fa4-television:before,.fa4-tv:before{content:"\f26c"}.fa-twitch:before,.fa4-twitch:before{content:"\f1e8"}.fa-twitter:before,.fa4-twitter:before{content:"\f099"}.fa-twitter-square:before,.fa4-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before,.fa4-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before,.fa4-underline:before{content:"\f0cd"}.fa-undo:before,.fa4-rotate-left:before,.fa4-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before,.fa4-universal-access:before{content:"\f29a"}.fa-university:before,.fa4-bank:before,.fa4-institution:before,.fa4-university:before{content:"\f19c"}.fa-unlink:before,.fa4-chain-broken:before,.fa4-unlink:before{content:"\f127"}.fa-unlock:before,.fa4-unlock:before{content:"\f09c"}.fa-unlock-alt:before,.fa4-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before,.fa4-upload:before{content:"\f093"}.fa-usb:before,.fa4-usb:before{content:"\f287"}.fa-user:before,.fa4-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before,.fa4-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before,.fa4-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-plus:before,.fa4-user-plus:before{content:"\f234"}.fa-user-secret:before,.fa4-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before,.fa4-user-times:before{content:"\f235"}.fa-users:before,.fa4-group:before,.fa4-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before,.fa4-venus:before{content:"\f221"}.fa-venus-double:before,.fa4-venus-double:before{content:"\f226"}.fa-venus-mars:before,.fa4-venus-mars:before{content:"\f228"}.fa-viacoin:before,.fa4-viacoin:before{content:"\f237"}.fa-viadeo:before,.fa4-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before,.fa4-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before,.fa4-video-camera:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before,.fa4-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before,.fa4-vimeo:before{content:"\f27d"}.fa-vine:before,.fa4-vine:before{content:"\f1ca"}.fa-vk:before,.fa4-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before,.fa4-volume-down:before{content:"\f027"}.fa-volume-off:before,.fa4-volume-off:before{content:"\f026"}.fa-volume-up:before,.fa4-volume-up:before{content:"\f028"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before,.fa4-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before,.fa4-wechat:before,.fa4-weixin:before{content:"\f1d7"}.fa-whatsapp:before,.fa4-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before,.fa4-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before,.fa4-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before,.fa4-wikipedia-w:before{content:"\f266"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before,.fa4-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before,.fa4-window-minimize:before{content:"\f2d1"}.fa-window-restore:before,.fa4-window-restore:before{content:"\f2d2"}.fa-windows:before,.fa4-windows:before{content:"\f17a"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before,.fa4-krw:before,.fa4-won:before{content:"\f159"}.fa-wordpress:before,.fa4-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before,.fa4-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before,.fa4-wpexplorer:before{content:"\f2de"}.fa-wpforms:before,.fa4-wpforms:before{content:"\f298"}.fa-wrench:before,.fa4-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before,.fa4-xing:before{content:"\f168"}.fa-xing-square:before,.fa4-xing-square:before{content:"\f169"}.fa-y-combinator:before,.fa4-y-combinator:before,.fa4-yc:before{content:"\f23b"}.fa-yahoo:before,.fa4-yahoo:before{content:"\f19e"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yelp:before,.fa4-yelp:before{content:"\f1e9"}.fa-yen-sign:before,.fa4-cny:before,.fa4-jpy:before,.fa4-rmb:before,.fa4-yen:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before,.fa4-yoast:before{content:"\f2b1"}.fa-youtube:before,.fa4-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"} /*! * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) */.fa4-envelope-o:before{content:"\f003"}.fa4-star-o:before{content:"\f006"}.fa4-trash-o:before{content:"\f014"}.fa4-file-o:before{content:"\f016"}.fa4-arrow-circle-o-down:before{content:"\f01a"}.fa4-arrow-circle-o-up:before{content:"\f01b"}.fa4-play-circle-o:before{content:"\f01d"}.fa4-pencil:before{content:"\f040"}.fa4-share-square-o:before{content:"\f045"}.fa4-check-square-o:before{content:"\f046"}.fa4-arrows:before{content:"\f047"}.fa4-times-circle-o:before{content:"\f05c"}.fa4-check-circle-o:before{content:"\f05d"}.fa4-arrows-v:before{content:"\f07d"}.fa4-arrows-h:before{content:"\f07e"}.fa4-thumbs-o-up:before{content:"\f087"}.fa4-thumbs-o-down:before{content:"\f088"}.fa4-heart-o:before{content:"\f08a"}.fa4-sign-out:before{content:"\f08b"}.fa4-external-link:before{content:"\f08e"}.fa4-sign-in:before{content:"\f090"}.fa4-square-o:before{content:"\f096"}.fa4-bookmark-o:before{content:"\f097"}.fa4-dashboard:before,.fa4-tachometer:before{content:"\f0e4"}.fa4-comment-o:before{content:"\f0e5"}.fa4-comments-o:before{content:"\f0e6"}.fa4-exchange:before{content:"\f0ec"}.fa4-cloud-download:before{content:"\f0ed"}.fa4-cloud-upload:before{content:"\f0ee"}.fa4-bell-o:before{content:"\f0a2"}.fa4-cutlery:before{content:"\f0f5"}.fa4-file-text-o:before{content:"\f0f6"}.fa4-building-o:before{content:"\f0f7"}.fa4-circle-o:before{content:"\f10c"}.fa4-mail-reply:before,.fa4-reply:before{content:"\f112"}.fa4-folder-o:before{content:"\f114"}.fa4-folder-open-o:before{content:"\f115"}.fa4-flag-o:before{content:"\f11d"}.fa4-star-half-empty:before,.fa4-star-half-full:before,.fa4-star-half-o:before{content:"\f123"}.fa4-shield:before{content:"\f132"}.fa4-ticket:before{content:"\f145"}.fa4-minus-square-o:before{content:"\f147"}.fa4-level-up:before{content:"\f148"}.fa4-level-down:before{content:"\f149"}.fa4-external-link-square:before{content:"\f14c"}.fa4-youtube-square:before{content:"\f166"}.fa4-youtube-play:before{content:"\f16a"}.fa4-bitbucket-square:before{content:"\f172"}.fa4-long-arrow-down:before{content:"\f175"}.fa4-long-arrow-up:before{content:"\f176"}.fa4-long-arrow-left:before{content:"\f177"}.fa4-long-arrow-right:before{content:"\f178"}.fa4-arrow-circle-o-right:before{content:"\f18e"}.fa4-arrow-circle-o-left:before{content:"\f190"}.fa4-plus-square-o:before{content:"\f196"}.fa4-spoon:before{content:"\f1b1"}.fa4-paper-plane-o:before,.fa4-send-o:before{content:"\f1d9"}.fa4-circle-thin:before{content:"\f1db"}.fa4-bell-slash-o:before{content:"\f1f7"}.fa4-meanpath:before{content:"\f20c"}.fa4-diamond:before{content:"\f219"}.fa4-facebook-official:before{content:"\f230"}.fa4-sticky-note-o:before{content:"\f24a"}.fa4-hourglass-o:before{content:"\f250"}.fa4-map-o:before{content:"\f278"}.fa4-commenting-o:before{content:"\f27b"}.fa4-credit-card-alt:before{content:"\f283"}.fa4-pause-circle-o:before{content:"\f28c"}.fa4-stop-circle-o:before{content:"\f28e"}.fa4-wheelchair-alt:before{content:"\f29b"}.fa4-question-circle-o:before{content:"\f29c"}.fa4-envelope-open-o:before{content:"\f2b7"}.fa4-address-book-o:before{content:"\f2ba"}.fa4-address-card-o:before,.fa4-vcard-o:before{content:"\f2bc"}.fa4-user-circle-o:before{content:"\f2be"}.fa4-user-o:before{content:"\f2c0"}.fa4-drivers-license-o:before,.fa4-id-card-o:before{content:"\f2c3"}.fa4-times-rectangle:before,.fa4-window-close:before{content:"\f2d3"}.fa4-times-rectangle-o:before,.fa4-window-close-o:before{content:"\f2d4"}.charts-icon-geoglobe:before{content:"\0041"}.mms-icon-addcenter{color:#13aa52;color:var(--mms-green2)}.mms-icon-configsvr-down,.mms-icon-configsvr-fatal,.mms-icon-configsvr-shunned,.mms-icon-configsvr-unknown,.mms-icon-deadface,.mms-icon-down,.mms-icon-fatal,.mms-icon-shunned,.mms-icon-unknown{color:#ef4c4c;color:var(--mms-alert-red)}.mms-icon-configsvr-recovering,.mms-icon-configsvr-rollback,.mms-icon-configsvr-startup,.mms-icon-configsvr-startup2,.mms-icon-recovering,.mms-icon-rollback,.mms-icon-startup,.mms-icon-startup2,.mms-icon-surprisedface{color:#ffb618;color:var(--mms-warning-text)}.mms-icon-configsvr-arbiter:after,.mms-icon-configsvr-delayed:after,.mms-icon-configsvr-down:after,.mms-icon-configsvr-fatal:after,.mms-icon-configsvr-hidden:after,.mms-icon-configsvr-nostate:after,.mms-icon-configsvr-primary:after,.mms-icon-configsvr-recovering:after,.mms-icon-configsvr-rollback:after,.mms-icon-configsvr-secondary:after,.mms-icon-configsvr-shunned:after,.mms-icon-configsvr-startup2:after,.mms-icon-configsvr-startup:after,.mms-icon-configsvr-unknown:after,.mms-icon-replica-set-configsvr:after{content:"\E084"}.mms-icon-wrench-exclamation{color:#babdbe;color:var(--mms-gray5)}.mms-icon-replica-set-configsvr{content:"\E144"}.mms-org-icon-activity-feed:before{content:"\0049"}.mms-icon-nostate:before{content:"\E000"}.mms-icon-startup2:before,.mms-icon-startup:before{content:"\E001"}.mms-icon-primary:before{content:"\E004"}.mms-icon-secondary:before{content:"\E005"}.mms-icon-arbiter:before{content:"\E007"}.mms-icon-hidden-s:before{content:"\E009"}.mms-icon-delayed:before{content:"\E011"}.mms-icon-recovering:before{content:"\E013"}.mms-icon-down:before{content:"\E015"}.mms-icon-fatal:before{content:"\E017"}.mms-icon-shunned:before{content:"\E019"}.mms-icon-rollback:before{content:"\E021"}.mms-icon-unknown:before{content:"\E023"}.mms-icon-standalone:before{content:"\E030"}.mms-icon-replica-set:before{content:"\E031"}.mms-icon-replica-set-configsvr:before{content:"\E143"}.mms-icon-cluster:before{content:"\E032"}.mms-icon-mongos:before{content:"\E033"}.mms-icon-configsvr:before{content:"\E034"}.mms-icon-configsvr-down:before{content:"\E045"}.mms-icon-configsvr-shunned:before{content:"\E048"}.mms-icon-configsvr-hidden:before{content:"\E051"}.mms-icon-configsvr-recovering:before{content:"\E054"}.mms-icon-configsvr-delayed:before{content:"\E057"}.mms-icon-configsvr-arbiter:before{content:"\E060"}.mms-icon-configsvr-nostate:before{content:"\E038"}.mms-icon-configsvr-primary:before{content:"\E040"}.mms-icon-configsvr-startup2:before,.mms-icon-configsvr-startup:before{content:"\E063"}.mms-icon-configsvr-secondary:before{content:"\E042"}.mms-icon-configsvr-rollback:before{content:"\E066"}.mms-icon-configsvr-fatal:before{content:"\E069"}.mms-icon-configsvr-unknown:before{content:"\E072"}.mms-icon-addcenter:before{content:"\E083"}.mms-icon-dragtopleft:before{content:"\E200"}.mms-icon-bell:before{content:"\E201"}.mms-icon-list:before{content:"\E202"}.mms-icon-topology:before{content:"\E203"}.mms-icon-cloud:before{content:"\E204"}.mms-icon-lock:before{content:"\E205"}.mms-icon-laptop:before{content:"\E206"}.mms-icon-office:before{content:"\E207"}.mms-icon-floppy:before{content:"\E208"}.mms-icon-support1:before{content:"\E209"}.mms-icon-support2:before{content:"\E210"}.mms-icon-add:before{content:"\E211"}.mms-icon-remove:before{content:"\E212"}.mms-icon-check:before{content:"\E213"}.mms-icon-creditcard:before{content:"\E214"}.mms-icon-graph:before{content:"\E215"}.mms-icon-api:before{content:"\E216"}.mms-icon-2fa:before{content:"\E217"}.mms-icon-smartphone:before{content:"\E218"}.mms-icon-continuous:before{content:"\E219"}.mms-icon-pointintime:before{content:"\E220"}.mms-icon-hammer:before{content:"\E221"}.mms-icon-edit:before{content:"\E222"}.mms-icon-umbrella:before{content:"\E223"}.mms-icon-ellipsis:before{content:"\E224"}.mms-icon-dragleft:before{content:"\E225"}.mms-icon-list-skinny:before{content:"\E226"}.mms-icon-modify:before,.mms-icon-wrench:before{content:"\E227"}.mms-icon-grid:before{content:"\E228"}.mms-icon-ssl:before{content:"\E229"}.mms-icon-auth:before{content:"\E230"}.mms-icon-metrics:before{content:"\E232"}.mms-icon-back:before{content:"\E233"}.mms-icon-surprisedface:before{content:"\E234"}.mms-icon-sadface:before{content:"\E235"}.mms-icon-deadface:before{content:"\E236"}.mms-icon-paused:before{content:"\E239"}.mms-icon-automation:before{content:"\E300"}.mms-icon-backup:before{content:"\E301"}.mms-icon-monitoring:before{content:"\E302"}.mms-icon-group:before{content:"\E303"}.mms-icon-user:before{content:"\E304"}.mms-icon-role:before{content:"\E305"}.mms-icon-leaf:before{content:"\E306"}.mms-icon-databases:before{content:"\E307"}.mms-icon-database:before{content:"\E308"}.mms-icon-servers:before{content:"\E309"}.mms-icon-server:before{content:"\E310"}.mms-icon-dashboard:before{content:"\E311"}.mms-icon-setup:before{content:"\E312"}.mms-icon-settings:before{content:"\E313"}.mms-icon-activity:before{content:"\E314"}.mms-icon-ops-manager:before{content:"\E315"}.mms-icon-logo-amazon:before{content:"\E500"}.mms-icon-logo-ubuntu:before{content:"\E501"}.mms-icon-logo-apple:before{content:"\E502"}.mms-icon-logo-linux:before{content:"\E503"}.mms-icon-logo-windows:before{content:"\E504"}.mms-icon-logo-redhat:before{content:"\E505"}.mms-icon-rocketbot:before{content:"\F006"}.mms-icon-snowbot:before{content:"\F007"}.mms-icon-medium-cloud:before{content:"\F010"}.mms-icon-sadface{color:color(var(--alert-red) tint(25%));color:var(--mms-alert-red-dark)}body{--font-color-primary:var(--black);--font-color-light:var(--gray-base);--heading-color-primary:var(--green-dark2);--opposite-color:var(--black);--link-color-primary:var(--blue-base);--link-font-weight:500;--background-color-primary:var(--white);--background-color-secondary:var(--gray-light3);--sidenav-bg-color:var(--gray-light3);--sidenav-border-bottom-color:var(--gray-light2);--sidenav-toggle-color:var(--green-dark2);--sidenav-toggle-border-color:var(--gray-light2);--sidenav-item-title:var(--gray-dark3);--sidenav-item-color:var(--black);--sidenav-hover-bg-color:var(--gray-light2);--sidenav-active-bg-color:var(--green-light3);--sidenav-active-color:var(--green-dark2);--sidenav-active-before-color:var(--green-dark1);--select-button-bg-color:var(--white);--select-button-color:var(--black);--select-button-carot:var(--gray-dark2);--tab-color-primary:var(--gray-dark1);--tab-color-secondary:var(--green-dark2);--wayfinding-bg-color:var(--gray-light3);--wayfinding-border-color:var(--gray-light2)}.dark-theme body{--font-color-primary:var(--gray-light2);--font-color-light:var(--gray-light2);--heading-color-primary:var(--gray-light2);--opposite-color:var(--white);--link-color-primary:var(--blue-light1);--link-font-weight:700;--background-color-primary:var(--black);--background-color-secondary:transparent;--sidenav-bg-color:var(--gray-dark4);--sidenav-border-bottom-color:var(--gray-dark2);--sidenav-toggle-color:var(--gray-light1);--sidenav-toggle-border-color:var(--gray-dark2);--sidenav-item-title:var(--gray-light2);--sidenav-item-color:var(--gray-light2);--sidenav-hover-bg-color:var(--gray-dark3);--sidenav-active-bg-color:var(--green-dark3);--sidenav-active-color:var(--white);--sidenav-active-before-color:var(--green-base);--select-button-bg-color:var(--gray-dark4);--select-button-color:var(--gray-light3);--select-button-carot:var(--gray-light1);--tab-color-primary:var(--gray-light1);--tab-color-secondary:var(--gray-light2);--wayfinding-bg-color:var(--gray-dark3);--wayfinding-border-color:var(--gray-dark2);::-webkit-scrollbar{background:var(--gray-dark3)}::-webkit-scrollbar-thumb{background:var(--gray-dark2);background-clip:content-box;border:3px solid transparent;border-radius:9px}}body{background-color:var(--background-color-primary);color:var(--font-color-primary)}.nav-dark{display:none}.dark-theme .nav-dark,.nav-light{display:initial}.dark-theme .nav-light{display:none}Use Explicit Encryption - Database Manual - MongoDB Docs
MongoDB 8.0Our fastest version everarrow-right
Build with MongoDB Atlas
Get started for free in minutes
Atlas DocumentationGet started using AtlasMongoDB DriversUse drivers and libraries for MongoDB
  • Sign In
    Docs Menu
    Docs Home
    /
    Database Manual
    / / / /

    Use Explicit Encryption

    This guide shows you how to encrypt a document with explicit encryption and a MongoDB driver.

    After completing this guide, you should be able to configure a driver to encrypt fields in a document using explicit encryption. With this knowledge, you should be able to create a client application that uses explicit encryption. with automatic decryption.

    Important

    Do Not Use this Sample Application In Production

    Because the instructions in this tutorial include storing an encryption key in an insecure environment, you should not use an unmodified version of this application in production. Using this application in production risks unauthorized access to the encryption key or loss of the key needed to decrypt your data. The purpose of this tutorial is to demonstrate how to use Queryable Encryption without needing to set up a Key Management System.

    You can use a Key Management System to securely store your encryption key in a production environment. A KMS is a remote service that securely stores and manages your encryption keys. To learn how to set up a Queryable Encryption enabled application that uses a KMS, see the Queryable Encryption Tutorials.

    To complete and run the code in this guide, you need to set up your development environment as shown in the Install a Queryable Encryption Compatible Driver page.

    To see the complete code for the sample application, select your programming language in the language selector.

    Complete Python Application

    1

    You must create a Customer Master Key (CMK) to perform Queryable Encryption.

    Create a 96-byte Customer Master Key and save it to the file master-key.txt:

    using (var randomNumberGenerator = System.Security.Cryptography.RandomNumberGenerator.Create())
    {
    var bytes = new byte[96];
    randomNumberGenerator.GetBytes(bytes);
    var localMasterKeyBase64Write = Convert.ToBase64String(bytes);
    File.WriteAllText("master-key.txt", localMasterKeyBase64Write);
    }
    func localMasterKey() []byte {
    key := make([]byte, 96)
    if _, err := rand.Read(key); err != nil {
    log.Fatalf("Unable to create a random 96 byte data key: %v", err)
    }
    if err := ioutil.WriteFile("master-key.txt", key, 0644); err != nil {
    log.Fatalf("Unable to write key to file: %v", err)
    }
    return key
    }
    byte[] localMasterKeyWrite = new byte[96];
    new SecureRandom().nextBytes(localMasterKeyWrite);
    try (FileOutputStream stream = new FileOutputStream("master-key.txt")) {
    stream.write(localMasterKeyWrite);
    }
    const fs = require("fs");
    const crypto = require("crypto");
    try {
    fs.writeFileSync("master-key.txt", crypto.randomBytes(96));
    } catch (err) {
    console.error(err);
    }
    path = "master-key.txt"
    file_bytes = os.urandom(96)
    with open(path, "wb") as f:
    f.write(file_bytes)

    Warning

    Secure your Local Key File in Production

    We recommend storing your Customer Master Keys in a remote Key Management System (KMS). To learn how to use a remote KMS in your Queryable Encryption implementation, see the Queryable Encryption Tutorials guide.

    If you choose to use a local key provider in production, exercise great caution and do not store it on the file system. Consider injecting the key into your client application using a sidecar process, or use another approach that keeps the key secure.

    Tip

    Generate a CMK from the Command Line

    Use the following command to generate a CMK from a Unix shell or PowerShell:

    • Unix/macOS shell:

      echo $(head -c 96 /dev/urandom | base64 | tr -d '\n')
    • PowerShell:

      $r=[byte[]]::new(64);$g=[System.Security.Cryptography.RandomNumberGenerator]::Create();$g.GetBytes($r);[Convert]::ToBase64String($r)

    Save the output of the preceding command to a file named customer-master-key.txt.

    Tip

    See: Complete Code

    To view the complete code for making a Customer Master Key, see the Queryable Encryption sample application repository.

    To view the complete code for making a Customer Master Key, see the Queryable Encryption sample application repository.

    To view the complete code for making a Customer Master Key, see the Queryable Encryption sample application repository.

    To view the complete code for making a Customer Master Key, see the Queryable Encryption sample application repository.

    To view the complete code for making a Customer Master Key, see the Queryable Encryption sample application repository.

    2

    Create a unique index on the keyAltNames field in your encryption.__keyVault namespace.

    Select the tab corresponding to your preferred MongoDB driver:

    var connectionString = "<Your MongoDB URI>";
    var keyVaultNamespace = CollectionNamespace.FromFullName("encryption.__keyVault");
    var keyVaultClient = new MongoClient(connectionString);
    var indexOptions = new CreateIndexOptions<BsonDocument>
    {
    Unique = true,
    PartialFilterExpression = new BsonDocument
    {{"keyAltNames", new BsonDocument {{"$exists", new BsonBoolean(true)}}}}
    };
    var builder = Builders<BsonDocument>.IndexKeys;
    var indexKeysDocument = builder.Ascending("keyAltNames");
    var indexModel = new CreateIndexModel<BsonDocument>(indexKeysDocument, indexOptions);
    var keyVaultDatabase = keyVaultClient.GetDatabase(keyVaultNamespace.DatabaseNamespace.DatabaseName);
    / Drop the Key Vault Collection in case you created this collection
    / in a previous run of this application.
    keyVaultDatabase.DropCollection(keyVaultNamespace.CollectionName);
    var keyVaultCollection = keyVaultDatabase.GetCollection<BsonDocument>(keyVaultNamespace.CollectionName);
    keyVaultCollection.Indexes.CreateOne(indexModel);

    Important

    When building or running the Golang code in this guide using go build or go run, always include the cse build constraint to enable Queryable Encryption. See the following shell command for an example of including the build constraint:

    go run -tags cse make-data-key.go
    uri := "<Your MongoDB URI>"
    keyVaultClient, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri))
    if err != nil {
    return fmt.Errorf("Connect error for regular client: %v", err)
    }
    defer func() {
    _ = keyVaultClient.Disconnect(context.TODO())
    }()
    keyVaultDb := "encryption"
    keyVaultColl := "__keyVault"
    keyVaultNamespace := keyVaultDb + "." + keyVaultColl
    keyVaultIndex := mongo.IndexModel{
    Keys: bson.D{{"keyAltNames", 1}},
    Options: options.Index().
    SetUnique(true).
    SetPartialFilterExpression(bson.D{
    {"keyAltNames", bson.D{
    {"$exists", true},
    }},
    }),
    }
    / Drop the Key Vault Collection in case you created this collection
    / in a previous run of this application.
    if err = keyVaultClient.Database(keyVaultDb).Collection(keyVaultColl).Drop(context.TODO()); err != nil {
    log.Fatalf("Collection.Drop error: %v", err)
    }
    _, err = keyVaultClient.Database(keyVaultDb).Collection(keyVaultColl).Indexes().CreateOne(context.TODO(), keyVaultIndex)
    if err != nil {
    panic(err)
    }
    String keyVaultDb = "encryption";
    String keyVaultColl = "__keyVault";
    MongoClient keyVaultClient = MongoClients.create(connectionString);
    String encryptedDbName = "medicalRecords";
    String encryptedCollName = "patients";
    / Drop the Key Vault Collection in case you created this collection
    / in a previous run of this application.
    keyVaultClient.getDatabase(keyVaultDb).getCollection(keyVaultColl).drop();
    MongoCollection keyVaultCollection = keyVaultClient.getDatabase(keyVaultDb).getCollection(keyVaultColl);
    IndexOptions indexOpts = new IndexOptions().partialFilterExpression(new BsonDocument("keyAltNames", new BsonDocument("$exists", new BsonBoolean(true) ))).unique(true);
    keyVaultCollection.createIndex(new BsonDocument("keyAltNames", new BsonInt32(1)), indexOpts);
    keyVaultClient.close();
    const uri = "<Your Connection String>";
    const keyVaultClient = new MongoClient(uri);
    await keyVaultClient.connect();
    const keyVaultDB = keyVaultClient.db(keyVaultDatabase);
    / Drop the Key Vault Collection in case you created this collection
    / in a previous run of this application.
    await keyVaultDB.dropDatabase();
    const keyVaultColl = keyVaultDB.collection(keyVaultCollection);
    await keyVaultColl.createIndex(
    { keyAltNames: 1 },
    {
    unique: true,
    partialFilterExpression: { keyAltNames: { $exists: true } },
    }
    );
    connection_string = "<your connection string here>"
    key_vault_coll = "__keyVault"
    key_vault_db = "encryption"
    key_vault_namespace = f"{key_vault_db}.{key_vault_coll}"
    key_vault_client = MongoClient(connection_string)
    # Drop the Key Vault Collection in case you created this collection
    # in a previous run of this application.
    key_vault_client.drop_database(key_vault_db)
    key_vault_client[key_vault_db][key_vault_coll].create_index(
    [("keyAltNames", ASCENDING)],
    unique=True,
    partialFilterExpression={"keyAltNames": {"$exists": True}},
    )
    3
    1. Read the Customer Master Key and Specify KMS Provider Settings

      Retrieve the contents of the Customer Master Key file that you generated in the Create a Customer Master Key step of this guide.

      Use the CMK value in your KMS provider settings. The client uses these settings to discover the CMK. Set the provider name to local to indicate that you are using a Local Key Provider.

      Select the tab corresponding to your preferred MongoDB driver:

      var kmsProviders = new Dictionary<string, IReadOnlyDictionary<string, object>>();
      const string provider = "local";
      var localMasterKeyBase64Read = File.ReadAllText("master-key.txt");
      var localMasterKeyBytes = Convert.FromBase64String(localMasterKeyBase64Read);
      var localOptions = new Dictionary<string, object>
      {
      {"key", localMasterKeyBytes}
      };
      kmsProviders.Add(provider, localOptions);
      key, err := ioutil.ReadFile("master-key.txt")
      if err != nil {
      log.Fatalf("Could not read the key from master-key.txt: %v", err)
      }
      provider := "local"
      kmsProviders := map[string]map[string]interface{}{"local": {"key": key}}
      String kmsProvider = "local";
      String path = "master-key.txt";
      byte[] localMasterKeyRead = new byte[96];
      try (FileInputStream fis = new FileInputStream(path)) {
      if (fis.read(localMasterKeyRead) < 96)
      throw new Exception("Expected to read 96 bytes from file");
      }
      Map<String, Object> keyMap = new HashMap<String, Object>();
      keyMap.put("key", localMasterKeyRead);
      Map<String, Map<String, Object>> kmsProviders = new HashMap<String, Map<String, Object>>();
      kmsProviders.put("local", keyMap);
      const provider = "local";
      const path = "./master-key.txt";
      / WARNING: Do not use a local key file in a production application
      const localMasterKey = fs.readFileSync(path);
      const kmsProviders = {
      local: {
      key: localMasterKey,
      },
      };
      provider = "local"
      path = "./master-key.txt"
      # WARNING: Do not use a local key file in a production application
      with open(path, "rb") as f:
      local_master_key = f.read()
      kms_providers = {
      "local": {
      "key": local_master_key # local_master_key variable from the previous step
      },
      }
    2. Create your Data Encryption Keys

      Construct a client with your MongoDB connection string and Key Vault collection namespace, and create the Data Encryption Keys:

      Note

      Key Vault Collection Namespace Permissions

      To complete this tutorial, the database user your application uses to connect to MongoDB must have dbAdmin permissions on the following namespaces:

      • encryption.__keyVault

      • medicalRecords database

      var clientEncryptionOptions = new ClientEncryptionOptions(
      keyVaultClient,
      keyVaultNamespace,
      kmsProviders: kmsProviders
      );
      var clientEncryption = new ClientEncryption(clientEncryptionOptions);
      var dataKeyOptions1 = new DataKeyOptions(alternateKeyNames: new List<string> { "dataKey1" });
      var dataKeyOptions2 = new DataKeyOptions(alternateKeyNames: new List<string> { "dataKey2" });
      BsonBinaryData CreateKeyGetID(DataKeyOptions options)
      {
      var dateKeyGuid = clientEncryption.CreateDataKey(provider, options, CancellationToken.None);
      return new BsonBinaryData(dateKeyGuid, GuidRepresentation.Standard);
      }
      var dataKeyId1 = CreateKeyGetID(dataKeyOptions1);
      var dataKeyId2 = CreateKeyGetID(dataKeyOptions2);
      var dataKeyId3 = CreateKeyGetID(dataKeyOptions3);
      var dataKeyId4 = CreateKeyGetID(dataKeyOptions4);
      clientEncryptionOpts := options.ClientEncryption().SetKeyVaultNamespace(keyVaultNamespace).
      SetKmsProviders(kmsProviders)
      clientEnc, err := mongo.NewClientEncryption(keyVaultClient, clientEncryptionOpts)
      if err != nil {
      return fmt.Errorf("NewClientEncryption error %v", err)
      }
      defer func() {
      _ = clientEnc.Close(context.TODO())
      }()
      dataKeyOpts1 := options.DataKey().
      SetKeyAltNames([]string{"demoDataKey1"})
      dataKeyID1, err := clientEnc.CreateDataKey(context.TODO(), provider, dataKeyOpts1)
      if err != nil {
      return fmt.Errorf("create data key error %v", err)
      }
      dataKeyOpts2 := options.DataKey().
      SetKeyAltNames([]string{"demoDataKey2"})
      dataKeyID2, err := clientEnc.CreateDataKey(context.TODO(), provider, dataKeyOpts2)
      if err != nil {
      return fmt.Errorf("create data key error %v", err)
      }
      String keyVaultNamespace = keyVaultDb + "." + keyVaultColl;
      ClientEncryptionSettings clientEncryptionSettings = ClientEncryptionSettings.builder()
      .keyVaultMongoClientSettings(MongoClientSettings.builder()
      .applyConnectionString(new ConnectionString(connectionString))
      .build())
      .keyVaultNamespace(keyVaultNamespace)
      .kmsProviders(kmsProviders)
      .build();
      ClientEncryption clientEncryption = ClientEncryptions.create(clientEncryptionSettings);
      List<String> keyAlts1 = new ArrayList<String>();
      keyAlts1.add("dataKey1");
      BsonBinary dataKeyId1 = clientEncryption.createDataKey(kmsProvider, new DataKeyOptions()
      .keyAltNames(keyAlts1));
      List<String> keyAlts2 = new ArrayList<String>();
      keyAlts2.add("dataKey2");
      BsonBinary dataKeyId2 = clientEncryption.createDataKey(kmsProvider, new DataKeyOptions()
      .keyAltNames(keyAlts2));
      const clientEnc = new ClientEncryption(keyVaultClient, {
      keyVaultNamespace: keyVaultNamespace,
      kmsProviders: kmsProviders,
      });
      const dek1 = await clientEnc.createDataKey(provider, {
      keyAltNames: ["dataKey1"],
      });
      const dek2 = await clientEnc.createDataKey(provider, {
      keyAltNames: ["dataKey2"],
      });
      client = MongoClient(connection_string)
      client_encryption = ClientEncryption(
      kms_providers, # pass in the kms_providers variable from the previous step
      key_vault_namespace,
      client,
      CodecOptions(uuid_representation=STANDARD),
      )
      data_key_id_1 = client_encryption.create_data_key(provider, key_alt_names=["dataKey1"])
      data_key_id_2 = client_encryption.create_data_key(provider, key_alt_names=["dataKey2"])
    3. Create Your Encrypted Collection

      Use a Queryable Encryption enabled MongoClient instance to specify what fields you must encrypt and create your encrypted collection:

      var encryptedCollectionNamespace = CollectionNamespace.FromFullName("medicalRecords.patients");
      var encryptedFieldsMap = new Dictionary<string, BsonDocument>
      {
      {
      encryptedCollectionNamespace.FullName, new BsonDocument
      {
      {
      "fields", new BsonArray
      {
      new BsonDocument
      {
      {"keyId", dataKeyId1},
      {"path", new BsonString("patientId")},
      {"bsonType", new BsonString("int")},
      {
      "queries", new BsonDocument
      {
      {"queryType", new BsonString("equality")}
      }
      }
      },
      new BsonDocument
      {
      {"keyId", dataKeyId2},
      {"path", new BsonString("medications")},
      {"bsonType", new BsonString("array")},
      },
      }
      }
      }
      }
      };
      var extraOptions = new Dictionary<string, object>()
      {
      { "cryptSharedLibPath", "<path to crypt_shared library>" },
      };
      var autoEncryptionOptions = new AutoEncryptionOptions(
      keyVaultNamespace,
      kmsProviders,
      encryptedFieldsMap: encryptedFieldsMap,
      extraOptions: extraOptions);
      var clientSettings = MongoClientSettings.FromConnectionString(connectionString);
      clientSettings.AutoEncryptionOptions = autoEncryptionOptions;
      var secureClient = new MongoClient(clientSettings);
      var encryptedDatabase = secureClient.GetDatabase(encryptedCollectionNamespace.DatabaseNamespace.DatabaseName);
      / Drop the encrypted collection in case you created this collection
      / in a previous run of this application.
      encryptedDatabase.DropCollection(encryptedCollectionNamespace.CollectionName);
      encryptedDatabase.CreateCollection(encryptedCollectionNamespace.CollectionName);
      Console.WriteLine("Created encrypted collection!");
      dbName := "medicalRecords"
      collName := "patients"
      encNamespace := (dbName + "." + collName)
      encryptedFieldsMap := bson.M{
      encNamespace: bson.M{
      "fields": []bson.M{
      {
      "path": "patientId",
      "bsonType": "int",
      "keyId": dataKeyID1,
      "queries": []bson.M{
      {
      "queryType": "equality",
      },
      },
      },
      {
      "path": "medications",
      "bsonType": "array",
      "keyId": dataKeyID2,
      },
      },
      },
      }
      extraOptions := map[string]interface{}{
      "cryptSharedLibPath": "<Your Crypt Shared lib Path>",
      }
      autoEncryptionOpts := options.AutoEncryption().
      SetKmsProviders(kmsProviders).
      SetKeyVaultNamespace(keyVaultNamespace).
      SetEncryptedFieldsMap(encryptedFieldsMap).
      SetExtraOptions(extraOptions)
      secureClient, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri).SetAutoEncryptionOptions(autoEncryptionOpts))
      if err != nil {
      return fmt.Errorf("Connect error for encrypted client: %v", err)
      }
      defer func() {
      _ = secureClient.Disconnect(context.TODO())
      }()
      / Drop the encrypted collection in case you created this collection
      / in a previous run of this application.
      if err = secureClient.Database(dbName).Collection(collName).Drop(context.TODO()); err != nil {
      log.Fatalf("Collection.Drop error: %v", err)
      }
      err = secureClient.Database(dbName).CreateCollection(context.TODO(), collName)
      if err != nil {
      return fmt.Errorf("Error creating collection: %v", err)
      }
      String encryptedNameSpace = encryptedDbName + "." + encryptedCollName;
      BsonDocument encFields = new BsonDocument().append("fields",
      new BsonArray(Arrays.asList(
      new BsonDocument().append("keyId", dataKeyId1)
      .append("path", new BsonString("patientId"))
      .append("bsonType", new BsonString("int"))
      .append("queries", new BsonDocument().append("queryType", new BsonString("equality"))),
      new BsonDocument().append("keyId", dataKeyId2)
      .append("path", new BsonString("medications"))
      .append("bsonType", new BsonString("array")),
      )));
      Map<String, BsonDocument> encryptedFieldsMap = new HashMap<String, BsonDocument>();
      encryptedFieldsMap.put(encryptedNameSpace, encFields);
      Map<String, Object> extraOptions = new HashMap<String, Object>();
      extraOptions.put("cryptSharedLibPath", "<path to crypt_shared>");
      MongoClientSettings clientSettings = MongoClientSettings.builder()
      .applyConnectionString(new ConnectionString(connectionString))
      .autoEncryptionSettings(AutoEncryptionSettings.builder()
      .keyVaultNamespace(keyVaultNamespace)
      .kmsProviders(kmsProviders)
      .encryptedFieldsMap(encryptedFieldsMap)
      .extraOptions(extraOptions)
      .build())
      .build();
      MongoClient mongoClientSecure = MongoClients.create(clientSettings);
      MongoDatabase encDb = mongoClientSecure.getDatabase(encryptedDbName);
      / Drop the encrypted collection in case you created this collection
      / in a previous run of this application.
      encDb.getCollection(encryptedCollName).drop();
      encDb.createCollection(encryptedCollName);
      const encryptedFieldsMap = {
      [`${secretDB}.${secretCollection}`]: {
      fields: [
      {
      keyId: dek1,
      path: "patientId",
      bsonType: "int",
      queries: { queryType: "equality" },
      },
      {
      keyId: dek2,
      path: "medications",
      bsonType: "array",
      },
      ],
      },
      };
      const extraOptions = {
      cryptSharedLibPath: "<path to FLE Shared Library>",
      };
      const encClient = new MongoClient(uri, {
      autoEncryption: {
      keyVaultNamespace,
      kmsProviders,
      extraOptions,
      encryptedFieldsMap,
      },
      });
      await encClient.connect();
      const newEncDB = encClient.db(secretDB);
      / Drop the encrypted collection in case you created this collection
      / in a previous run of this application.
      await newEncDB.dropDatabase();
      await newEncDB.createCollection(secretCollection);
      console.log("Created encrypted collection!");
      encrypted_db_name = "medicalRecords"
      encrypted_coll_name = "patients"
      encrypted_fields_map = {
      f"{encrypted_db_name}.{encrypted_coll_name}": {
      "fields": [
      {
      "keyId": data_key_id_1,
      "path": "patientId",
      "bsonType": "int",
      "queries": {"queryType": "equality"},
      },
      {
      "keyId": data_key_id_2,
      "path": "medications",
      "bsonType": "array",
      },
      ],
      },
      }
      key_vault_namespace = "encryption.__keyVault"
      auto_encryption = AutoEncryptionOpts(
      kms_providers,
      key_vault_namespace,
      encrypted_fields_map=encrypted_fields_map,
      crypt_shared_lib_path="<path to FLE Shared Library>",
      )
      secure_client = MongoClient(connection_string, auto_encryption_opts=auto_encryption)
      # Drop the encrypted collection in case you created this collection
      # in a previous run of this application.
      secure_client.drop_database(encrypted_db_name)
      encrypted_db = secure_client[encrypted_db_name]
      encrypted_db.create_collection(encrypted_coll_name)
      print("Created encrypted collection!")

    The output from the code in this section should resemble the following:

    Created encrypted collection!

    Tip

    See: Complete Code

    To view the complete code for making a Data Encryption Key, see the Queryable Encryption sample application repository.

    To view the complete code for making a Data Encryption Key, see the Queryable Encryption sample application repository.

    To view the complete code for making a Data Encryption Key, see the Queryable Encryption sample application repository.

    To view the complete code for making a Data Encryption Key, see the Queryable Encryption sample application repository.

    To view the complete code for making a Data Encryption Key, see the Queryable Encryption sample application repository.

    4
    1. Specify the Key Vault Collection Namespace

      Specify encryption.__keyVault as the Key Vault collection namespace.

      var connectionString = "<Your MongoDB URI>";
      var keyVaultNamespace = CollectionNamespace.FromFullName("encryption.__keyVault");
      var coll = "patients";
      var db = "medicalRecords";
      keyVaultColl := "__keyVault"
      keyVaultDb := "encryption"
      keyVaultNamespace := keyVaultDb + "." + keyVaultColl
      dbName := "medicalRecords"
      collName := "patients"
      String db = "medicalRecords";
      String coll = "patients";
      String keyVaultDb = "encryption";
      String keyVaultColl = "__keyVault";
      String keyVaultNamespace = String.format("%1$s.%2$s", keyVaultDb, keyVaultColl);
      String connectionString = "<Your MongoDB URI>";
      const eDB = "encryption";
      const eKV = "__keyVault";
      const keyVaultNamespace = `${eDB}.${eKV}`;
      const secretDB = "medicalRecords";
      const secretCollection = "patients";
      key_vault_namespace = "encryption.__keyVault"
      key_vault_db_name, key_vault_coll_name = key_vault_namespace.split(".", 1)
    2. Specify the Customer Master Key

      Specify the KMS provider and specify your Customer Master Key inline:

      var kmsProviders = new Dictionary<string, IReadOnlyDictionary<string, object>>();
      const string provider = "local";
      const string localMasterKeyPath = "master-key.txt";
      var localMasterKeyBase64Read = File.ReadAllText(localMasterKeyPath);
      var localMasterKeyBytes = Convert.FromBase64String(localMasterKeyBase64Read);
      var localOptions = new Dictionary<string, object>
      {
      {"key", localMasterKeyBytes}
      };
      kmsProviders.Add(provider, localOptions);
      key, err := ioutil.ReadFile("master-key.txt")
      if err != nil {
      log.Fatalf("Could not read the key from master-key.txt: %v", err)
      }
      kmsProviders := map[string]map[string]interface{}{"local": {"key": key}}
      String kmsProvider = "local";
      String path = "master-key.txt";
      byte[] localMasterKeyRead = new byte[96];
      try (FileInputStream fis = new FileInputStream(path)) {
      if (fis.read(localMasterKeyRead) < 96)
      throw new Exception("Expected to read 96 bytes from file");
      }
      Map<String, Object> keyMap = new HashMap<>();
      keyMap.put("key", localMasterKeyRead);
      Map<String, Map<String, Object>> kmsProviders = new HashMap<>();
      kmsProviders.put(kmsProvider, keyMap);
      const fs = require("fs");
      const path = "./master-key.txt";
      / WARNING: Do not use a local key file in a production application
      const localMasterKey = fs.readFileSync(path);
      const kmsProviders = {
      local: {
      key: localMasterKey,
      },
      };
      path = "./master-key.txt"
      with open(path, "rb") as f:
      local_master_key = f.read()
      kms_providers = {
      "local": {
      "key": local_master_key # local_master_key variable from the previous step
      },
      }
    3. Retrieve Data Encryption Keys

      Retrieve the Data Encryption Keys created in the Create a Data Encryption Key step of this guide:

      var regularClient = new MongoClient(connectionString);
      var keyVaultCollection = regularClient.GetDatabase(keyVaultNamespace.DatabaseNamespace.DatabaseName)
      .GetCollection<BsonDocument>(keyVaultNamespace.CollectionName);
      Guid GetKeyId(string altName)
      {
      var filter = Builders<BsonDocument>.Filter.Eq<BsonString>("keyAltNames", altName);
      return keyVaultCollection.Find(filter).First<BsonDocument>()["_id"].AsGuid;
      }
      var dataKeyId1 = GetKeyId("dataKey1");
      var dataKeyId2 = GetKeyId("dataKey2");
      uri := "<Your MongoDB URI>"
      regularClient, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri))
      if err != nil {
      panic(fmt.Errorf("Client connect error %v", err))
      }
      var foundDoc1 bson.M
      err = regularClient.Database(keyVaultDb).Collection(keyVaultColl).FindOne(context.TODO(), bson.D{{"keyAltNames", "demoDataKey1"}}).Decode(&foundDoc1)
      if err != nil {
      panic(err)
      }
      var dataKeyID1 = foundDoc1["_id"].(primitive.Binary)
      var foundDoc2 bson.M
      err = regularClient.Database(keyVaultDb).Collection(keyVaultColl).FindOne(context.TODO(), bson.D{{"keyAltNames", "demoDataKey2"}}).Decode(&foundDoc2)
      if err != nil {
      panic(err)
      }
      var dataKeyID2 = foundDoc2["_id"].(primitive.Binary)
      MongoClient client = MongoClients.create(connectionString);
      MongoCollection<Document> keyVaultClient = client.getDatabase(keyVaultDb).getCollection(keyVaultColl);
      BsonBinary dataKeyId1 = new BsonBinary(BsonBinarySubType.UUID_STANDARD, keyVaultClient.find(eq("keyAltNames", "dataKey1")).first().get("_id", Binary.class).getData());
      BsonBinary dataKeyId2 = new BsonBinary(BsonBinarySubType.UUID_STANDARD, keyVaultClient.find(eq("keyAltNames", "dataKey2")).first().get("_id", Binary.class).getData());
      const uri = "<Your MongoDB URI>";
      const unencryptedClient = new MongoClient(uri);
      await unencryptedClient.connect();
      const keyVaultClient = unencryptedClient.db(eDB).collection(eKV);
      const dek1 = await keyVaultClient.findOne({ keyAltNames: "dataKey1" });
      const dek2 = await keyVaultClient.findOne({ keyAltNames: "dataKey2" });
      connection_string = "<your connection string here>"
      client = MongoClient(connection_string)
      key_vault = client[key_vault_db_name][key_vault_coll_name]
      data_key_id_1 = key_vault.find_one({"keyAltNames": "dataKey1"})["_id"]
      data_key_id_2 = key_vault.find_one({"keyAltNames": "dataKey2"})["_id"]
    4. Specify the Path of the Automatic Encryption Shared Library

      var extraOptions = new Dictionary<string, object>()
      {
      {"cryptSharedLibPath", "<path to crypt_shared library>"},
      };
      extraOptions := map[string]interface{}{
      "cryptSharedLibPath": "<path to crypt_shared library>",
      }
      Map<String, Object> extraOptions = new HashMap<>();
      extraOptions.put("cryptSharedLibPath", "<path to crypt_shared library>");
      const extraOptions = {
      cryptSharedLibPath: "<path to crypt_shared library>",
      };
      opts = AutoEncryptionOpts(
      kms_providers,
      key_vault.full_name,
      bypass_query_analysis=True,
      key_vault_client=client,
      crypt_shared_lib_path="<path to FLE Shared Library>",
      )

      Tip

      Learn More

      To learn more about the library referenced by this path, see the Automatic Encryption Shared Library page.

    5. Create a MongoClient Object

      Instantiate a MongoClient object with the following automatic encryption settings:

      var clientSettings = MongoClientSettings.FromConnectionString(connectionString);
      var autoEncryptionOptions = new AutoEncryptionOptions(
      keyVaultNamespace,
      kmsProviders,
      bypassQueryAnalysis: true,
      extraOptions: extraOptions);
      clientSettings.AutoEncryptionOptions = autoEncryptionOptions;
      var secureClient = new MongoClient(clientSettings);
      var collection = secureClient.GetDatabase(db).GetCollection<BsonDocument>(coll);
      autoEncryptionOpts := options.AutoEncryption().
      SetKmsProviders(kmsProviders).
      SetKeyVaultNamespace(keyVaultNamespace).
      SetExtraOptions(extraOptions).
      SetBypassQueryAnalysis(true)
      secureClient, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri).SetAutoEncryptionOptions(autoEncryptionOpts))
      if err != nil {
      return fmt.Errorf("Connect error for encrypted client: %v", err)
      }
      defer func() {
      _ = secureClient.Disconnect(context.TODO())
      }()
      var coll = secureClient.Database(dbName).Collection(collName)
      MongoClientSettings clientSettings = MongoClientSettings.builder()
      .applyConnectionString(new ConnectionString(connectionString))
      .autoEncryptionSettings(AutoEncryptionSettings.builder()
      .keyVaultNamespace(keyVaultNamespace)
      .kmsProviders(kmsProviders)
      .extraOptions(extraOptions)
      .bypassQueryAnalysis(true)
      .build())
      .build();
      MongoClient mongoClientSecure = MongoClients.create(clientSettings);
      const encryptedClient = new MongoClient(uri, {
      autoEncryption: {
      kmsProviders: kmsProviders,
      keyVaultNamespace: keyVaultNamespace,
      bypassQueryAnalysis: true,
      keyVaultClient: unencryptedClient,
      extraOptions: extraOptions,
      },
      });
      await encryptedClient.connect();
      encrypted_client = MongoClient(connection_string, auto_encryption_opts=opts)
      db = encrypted_client.medicalRecords
      coll = db.patients

      Note

      Automatic Decryption

      We use a MongoClient instance with automatic encryption enabled to perform automatic decryption.

      To learn more about explicit encryption with automatic decryption, see the Fundamentals section.

    6. Create a ClientEncryption Object

      Instantiate a ClientEncryption object as follows:

      var clientEncryptionOptions = new ClientEncryptionOptions(
      keyVaultClient: regularClient,
      keyVaultNamespace: keyVaultNamespace,
      kmsProviders: kmsProviders
      );
      var clientEncryption = new ClientEncryption(clientEncryptionOptions);
      clientEncryptionOpts := options.ClientEncryption().SetKeyVaultNamespace(keyVaultNamespace).SetKmsProviders(kmsProviders)
      clientEnc, err := mongo.NewClientEncryption(regularClient, clientEncryptionOpts)
      if err != nil {
      panic(fmt.Errorf("NewClientEncryption error %v", err))
      }
      defer func() {
      _ = clientEnc.Close(context.TODO())
      }()
      ClientEncryptionSettings clientEncryptionSettings = ClientEncryptionSettings.builder()
      .keyVaultMongoClientSettings(MongoClientSettings.builder()
      .applyConnectionString(new ConnectionString(connectionString))
      .build())
      .keyVaultNamespace(keyVaultNamespace)
      .kmsProviders(kmsProviders)
      .build();
      ClientEncryption clientEncryption = ClientEncryptions.create(clientEncryptionSettings);
      const encryption = new ClientEncryption(unencryptedClient, {
      keyVaultNamespace,
      kmsProviders,
      });
      client_encryption = ClientEncryption(
      kms_providers, key_vault_namespace, client, client.codec_options
      )

    Note

    Indexed and Unindexed Algorithms

    To learn more about the indexed and unindexed algorithms in explicit encryption, see Algorithm Choice.

    5

    Use your Queryable Encryption enabled MongoClient instance to insert a document with encrypted fields into the medicalRecords.patients namespace using the following code snippet:

    var patientId = 12345678;
    var medications = new BsonArray
    {
    new BsonString("Atorvastatin"),
    new BsonString("Levothyroxine")
    };
    var indexedEncrypted = clientEncryption.Encrypt(
    patientId,
    new EncryptOptions(algorithm: "Indexed", keyId: dataKeyId1, contentionFactor: 8),
    CancellationToken.None);
    var unindexedEncrypted = clientEncryption.Encrypt(
    medications,
    new EncryptOptions(algorithm: "Unindexed", keyId: dataKeyId2),
    CancellationToken.None);
    collection.InsertOne(new BsonDocument { { "firstName", "Jon" }, { "patientId", indexedEncrypted }, { "medications", unindexedEncrypted } });
    patientIdRawValueType, patientIdRawValueData, err := bson.MarshalValue(12345678)
    if err != nil {
    panic(err)
    }
    patientIdRawValue := bson.RawValue{Type: patientIdRawValueType, Value: patientIdRawValueData}
    patientIdEncryptionOpts := options.Encrypt().
    SetAlgorithm("Indexed").
    SetKeyID(dataKeyID1).
    SetContentionFactor(8)
    patientIdEncryptedField, err := clientEnc.Encrypt(
    context.TODO(),
    patientIdRawValue,
    patientIdEncryptionOpts)
    if err != nil {
    panic(err)
    }
    medicationsRawValueType, medicationsRawValueData, err := bson.MarshalValue([]string{"Atorvastatin", "Levothyroxine"})
    if err != nil {
    panic(err)
    }
    medicationsRawValue := bson.RawValue{Type: medicationsRawValueType, Value: medicationsRawValueData}
    medicationsEncryptionOpts := options.Encrypt().
    SetAlgorithm("Unindexed").
    SetKeyID(dataKeyID2)
    medicationsEncryptedField, err := clientEnc.Encrypt(
    context.TODO(),
    medicationsRawValue,
    medicationsEncryptionOpts)
    if err != nil {
    panic(err)
    }
    _, err = coll.InsertOne(
    context.TODO(),
    bson.D{{"firstName", "Jon"}, {"patientId", patientIdEncryptedField}, {"medications", medicationsEncryptedField}})
    if err != nil {
    panic(err)
    }
    BsonInt32 patientId = new BsonInt32(12345678);
    ArrayList<BsonString> medications = new ArrayList<>();
    medications.add(new BsonString("Atorvastatin"));
    medications.add(new BsonString("Levothyroxine"));
    BsonBinary indexedEncrypted = clientEncryption.encrypt(patientId, new EncryptOptions("Indexed").keyId(dataKeyId1).contentionFactor(8L));
    BsonBinary unindexedEncrypted = clientEncryption.encrypt(new BsonArray(medications), new EncryptOptions("Unindexed").keyId(dataKeyId2));
    MongoCollection<BsonDocument> collection = mongoClientSecure.getDatabase(db).getCollection(coll, BsonDocument.class);
    collection.insertOne(new BsonDocument("firstName", new BsonString("Jon")).append("patientId", indexedEncrypted).append("medications", unindexedEncrypted));
    const patientId = 12345678;
    const medications = ["Atorvastatin", "Levothyroxine"];
    const indexedInsertPayload = await encryption.encrypt(patientId, {
    algorithm: "Indexed",
    keyId: dek1._id,
    contentionFactor: 8,
    });
    const unindexedInsertPayload = await encryption.encrypt(medications, {
    algorithm: "Unindexed",
    keyId: dek2._id,
    });
    const encryptedColl = encryptedClient
    .db(secretDB)
    .collection(secretCollection);
    await encryptedColl.insertOne({
    firstName: "Jon",
    patientId: indexedInsertPayload,
    medications: unindexedInsertPayload,
    });
    patientId = 12345678
    medications = ["Atorvastatin", "Levothyroxine"]
    indexed_insert_payload = client_encryption.encrypt(
    patientId, Algorithm.INDEXED, data_key_id_1, contention_factor=8
    )
    unindexed_insert_payload = client_encryption.encrypt(
    medications, Algorithm.UNINDEXED, data_key_id_2
    )
    coll.insert_one(
    {
    "firstName": "Jon",
    "patientId": indexed_insert_payload,
    "medications": unindexed_insert_payload,
    }
    )

    When you insert a document, your Queryable Encryption enabled client encrypts the fields of your document such that it resembles the following:

    {
    "_id": {
    "$oid": "6303e36053cc7ec2e6a630bd"
    },
    "firstName": "Jon",
    "patientId": {
    "$binary": {
    "base64": "BxLJUBmg703civqMz8ASsD4QEYeSneOGiiYHfLE77ELEkp1EC/fXPrKCNRQl2mAFddszqDJ0P3znKrq0DVMEvJoU6wa0Ra+U+JjNVr8NtJE+TpTLCannY5Av6iGfLAaiHbM/E8Ftz1YCQsArQwuNp3wIV/GJPLa2662xsyk0wz7F6IRGC3FlnxpN4UIFaHE1M7Y6kEnx3tEy5uJBvU4Sex7I2H0kqHthClH77Q6xHIHc8H9d6upvgnEbkKBCnmc24A2pSG/xZ7LBsV3j5aOboPISuN/lvg==",
    "subType": "06"
    }
    },
    "medications": {
    "$binary": {
    "base64": "BvOsveapfUxiuQxCMSM2fYIEyRlQaSqR+0NxlMarwurBflvoMz1FrSjSGgCVCpK8X+YrilP6Bac99kkaUmRJfjo4savxcjpOfEnUj5bHciPyfQBYmYF4PMLDtTTzGZpPilb9d5KgpIMBXxHi+dIcog==",
    "subType": "06"
    }
    },
    "__safeContent__": [
    {
    "$binary": {
    "base64": "ZLPIpgxzXpHUGrvdIHetwmMagR+mqvuUj5nzXNGf/WM=",
    "subType": "00"
    }
    }
    ]
    }

    Warning

    Do not Modify the __safeContent__ Field

    The __safeContent__ field is essential to Queryable Encryption. Do not modify the contents of this field.

    Tip

    See: Complete Code

    To view the complete code to insert a document encrypted with explicit encryption, see the Queryable Encryption sample application repository.

    To view the complete code to insert a document encrypted with explicit encryption, see the Queryable Encryption sample application repository.

    To view the complete code to insert a document encrypted with explicit encryption, see the Queryable Encryption sample application repository.

    To view the complete code to insert a document encrypted with explicit encryption, see the Queryable Encryption sample application repository.

    To view the complete code to insert a document encrypted with explicit encryption, see the Queryable Encryption sample application repository.

    6

    Retrieve the document with encrypted fields you inserted in the Insert a Document with Encrypted Fields step of this guide through a query on an encrypted field:

    var findPayload = clientEncryption.Encrypt(
    patientId,
    new EncryptOptions(algorithm: "Indexed", keyId: dataKeyId1, queryType: "equality", contentionFactor: 8),
    CancellationToken.None);
    var doc = collection.Find(new BsonDocument { { "patientId", findPayload } }).Single();
    Console.WriteLine($"Encrypted document: {doc}");
    findPayloadRawValueType, findPayloadRawValueData, err := bson.MarshalValue(12345678)
    if err != nil {
    panic(err)
    }
    findPayloadRawValue := bson.RawValue{Type: findPayloadRawValueType, Value: findPayloadRawValueData}
    findPayloadEncryptionOpts := options.Encrypt().
    SetAlgorithm("Indexed").
    SetKeyID(dataKeyID1).
    SetQueryType("equality").
    SetContentionFactor(8)
    findPayloadEncryptedField, err := clientEnc.Encrypt(
    context.TODO(),
    findPayloadRawValue,
    findPayloadEncryptionOpts)
    if err != nil {
    panic(err)
    }
    var resultSecure bson.M
    coll.FindOne(context.TODO(), bson.D{{"firstName", findPayloadEncryptedField}}).Decode(&resultSecure)
    if err != nil {
    panic(err)
    }
    outputSecure, err := json.MarshalIndent(resultSecure, "", " ")
    if err != nil {
    panic(err)
    }
    fmt.Printf("\nFound document searching on explicitly encrypted field:\n%s\n", outputSecure)
    BsonBinary findPayloadEncrypted = clientEncryption.encrypt(patientId, new EncryptOptions("Indexed").keyId(dataKeyId1).queryType("equality").contentionFactor(8L));
    BsonDocument result = collection.find(eq("patientId", findPayloadEncrypted)).first();
    System.out.println("Finding a document with manually encrypted field: " + result.toJson());
    const findPayload = await encryption.encrypt(patientId, {
    algorithm: "Indexed",
    keyId: dek1._id,
    queryType: "equality",
    contentionFactor: 8,
    });
    console.log("Finding a document with manually encrypted field:");
    console.log(await encryptedColl.findOne({ patientId: findPayload }));
    find_payload = client_encryption.encrypt(
    patientId,
    Algorithm.INDEXED,
    data_key_id_1,
    query_type=QueryType.EQUALITY,
    contention_factor=8,
    )
    doc = coll.find_one({"encryptedIndexed": find_payload})
    print("\nReturned document:\n")
    pprint.pprint(doc)

    The output of the preceding code snippet should contain the following document:

    {
    "__safeContent__": [
    {
    "Subtype": 0,
    "Data": "LfaIuWm9o30MIGrK7GGUoStJMSNOjRgbxy5q2TPiDes="
    }
    ],
    "_id": "6303a770857952ca5e363fd2",
    "firstName": "Jon",
    "medications": ["Atorvastatin", "Levothyroxine"],
    "patientId": 12345678
    }

    Tip

    See: Complete Code

    To view the code to retrieve your document with encrypted fields, see the Queryable Encryption sample application repository.

    To view the code to retrieve your document with encrypted fields, see the Queryable Encryption sample application repository.

    To view the code to retrieve your document with encrypted fields, see the Queryable Encryption sample application repository.

    To view the code to retrieve your document with encrypted fields, see the Queryable Encryption sample application repository.

    To view the code to retrieve your document with encrypted fields, see the Queryable Encryption sample application repository.

    To view a tutorial on using Queryable Encryption with a remote KMS, see Queryable Encryption Tutorials.

    To learn how Queryable Encryption works, see Queryable Encryption with Explicit Encryption.

    To learn more about the topics mentioned in this guide, see the following links:

    On this page

    Follow Lee on X/Twitter - Father, Husband, Serial builder creating AI, crypto, games & web tools. We are friends :) AI Will Come To Life!

    Check out: eBank.nz (Art Generator) | Netwrck.com (AI Tools) | Text-Generator.io (AI API) | BitBank.nz (Crypto AI) | ReadingTime (Kids Reading) | RewordGame | BigMultiplayerChess | WebFiddle | How.nz | Helix AI Assistant